php - Woocommerce 自定义支付网关重定向
问题描述
我正在尝试创建一个自定义 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>
如何使用响应执行重定向到支付网关?我不确定以前是否有人问过这个问题,但我似乎找不到任何解决方案。任何帮助或方向将不胜感激。
解决方案
我设法让它工作,我会在这里发布我的答案,以防有人需要解决这个问题。
我所做的是将响应输出到 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
);
}
推荐阅读
- javascript - 如何防止在包含复选框的列表项上定义的弹出框在单击复选框时显示
- c# - 如何在c#中从字符串文本制作图像时使背景透明?
- node.js - 在 Heroku 上部署 node.js 应用程序(discord.jd bot)导致错误
- neural-network - 如何计算带有矢量输出的感知器的权重?
- excel - 将图表从 Excel 复制到 PPT
- powershell - 如果需要,通过替换前两个字符来更正子文件夹名称
- mysql - MySQL 8.0.21.0 - 安装期间数据库初始化错误
- javascript - 刽子手游戏图像仅 javascript
- flutter - 如何在颤动中更改网格视图的项目
- r - 分组变量以创建子集