我正在尝试创建一个自定义的Woocommerce付款网关,它将客户重定向到付款网关页面以完成结帐,并且我正在使用process_payment
代码,如下所示:
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, '');
API返回此响应(我删除了值):
<!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>
如何使用响应执行重定向到支付网关的操作?我不确定是否曾经有人问过这个问题,但是我似乎找不到任何解决方案。任何帮助或指示将不胜感激。
答案 0 :(得分:2)
我设法使其正常运行,如果有人需要对此的解决方案,我将在此处发布答案。
我所做的是将响应输出到php文件,然后使用它执行重定向。
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
);
}