简体   繁体   中英

Woocommerce custom payment gateway redirection

I'm trying to create a custom Woocommerce payment gateway that redirects the customer to the payment gateway page to complete the checkout and I'm using the process_payment code as follows:

    public function process_payment( $order_id )
    {
        global $woocommerce;

        // we need it to get any order details
        $order = wc_get_order( $order_id );

        //setting up needed variables for POST
        $moovpay = new MoovPaySDK;
        $paymentURL = //payment gateway API URL;
        $time = date('YmdHis');
        $secretKey = $this->private_key;
        $merchant_code = $this->merchant_code;
        $mid = $this->mid;
        $orderID = zeroise($order_id, 8);
        $backend_URL = //callback_URL;
        $order_amount = $order->get_total();
        $order_amount_CNY = wc_format_decimal( $order_amount * 5, 2 );;
        $order_amount_CNY_no_dot = str_replace(".", "", $order_amount_CNY);
        //initiate payment
        $response = $moovpay->purchase($secretKey, '', $backend_URL, $merchant_code, $mid, $orderID, $time, '', $order_amount_CNY_no_dot, '');

And the API returns this response (I removed the values):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <form id="redirectForm" action="payment-gateway-url-here" method="post">
        
            
                <input type="hidden" name="bizType" id="bizType" value="" />
            
                <input type="hidden" name="txnSubType" id="txnSubType" value="" />
            
                <input type="hidden" name="backUrl" id="backUrl" value="" />
            
                <input type="hidden" name="orderId" id="orderId" value="" />
            
                <input type="hidden" name="signature" id="signature" value="" />
            
                <input type="hidden" name="merName" id="merName" value="" />
            
                <input type="hidden" name="txnType" id="txnType" value="" />
            
                <input type="hidden" name="channelType" id="channelType" value="" />
            
                <input type="hidden" name="certId" id="certId" value="" />
            
                <input type="hidden" name="encoding" id="encoding" value="UTF-8" />
            
                <input type="hidden" name="acqInsCode" id="acqInsCode" value="" />
            
                <input type="hidden" name="version" id="version" value="" />
            
                <input type="hidden" name="merAbbr" id="merAbbr" value="" />
            
                <input type="hidden" name="accessType" id="accessType" value="" />
            
                <input type="hidden" name="reqReserved" id="reqReserved" value="" />
            
                <input type="hidden" name="txnTime" id="txnTime" value="" />
            
                <input type="hidden" name="merId" id="merId" value="" />
            
                <input type="hidden" name="merCatCode" id="merCatCode" value="" />
            
                <input type="hidden" name="currencyCode" id="currencyCode" value="" />
            
                <input type="hidden" name="signMethod" id="signMethod" value="" />
            
                <input type="hidden" name="txnAmt" id="txnAmt" value="" />
            
        
    </form>
<script type="text/javascript">
    document.all.redirectForm.submit();
</script>   
</body>
</html>

How do I use the response to perform the redirection to payment gateway? I'm not sure if this has been asked before but I'm can't seem to find any solutions to this. Any help or direction would be greatly appreciated.

I managed to get it working, I'll post my answer here in case someone needs a solution to this.

What I did was to output the response to a php file and then perform the redirect using it.

public function process_payment( $order_id )
{
  global $woocommerce;
  
  // we need it to get any order details
  $order = wc_get_order( $order_id );
  
  //setting up needed variables for POST
  $moovpay = new MoovPaySDK;
  $paymentURL = ''; //payment gateway API URL;
  $time = date('YmdHis');
  $secretKey = $this->private_key;
  $merchant_code = $this->merchant_code;
  $mid = $this->mid;
  $orderID = zeroise($order_id, 8);
  $backend_URL = '' //callback_URL;
  $order_amount = $order->get_total();
  $order_amount_CNY = wc_format_decimal( $order_amount * 5, 2 );;
  $order_amount_CNY_no_dot = str_replace(".", "", $order_amount_CNY);
  //initiate payment
  $response = $moovpay->purchase($secretKey, '', $backend_URL, $merchant_code, $mid, $orderID, $time, '', $order_amount_CNY_no_dot, '');
  $fh = fopen(plugin_dir_path(__FILE__).'redirect.php', 'w+');
  fwrite($fh, $response);
  fclose($fh);
  $redirect_url = plugin_dir_url(__FILE__).'redirect.php';
  
  return array(
    'result' => 'success',
    'redirect' => $redirect_url
  );
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM