我需要将新的支付网关集成到我们的企业网站,该网站基于社交引擎 . 这个 CMS 有一个名为Advanced Payment Gateways的扩展,允许集成新的网关 . 实际上,它获取您的网关名称并生成压缩为文件的框架结构,以便您可以解压缩并上载到服务器,从而与应用程序目录合并 .
我将解释如何在没有社交引擎的情况下实现我的网关,我希望有人能告诉我如何将其纳入社交引擎 .
首先我连接到我的 PSP 服务:
$client = new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
我在数组中准备以下参数以发送到 bpPayRequest :
$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $orderId,
'amount' => $amount,
'localDate' => $localDate,
'localTime' => $localTime,
'additionalData' => $additionalData,
'callBackUrl' => $callBackUrl,
'payerId' => $payerId);
// Call the SOAP method
$result = $client->call('bpPayRequest', $parameters, $namespace);
如果接受付款请求,则结果为逗号分隔的字符串,第一个元素为 0 .
然后我们可以通过 POST 方法将第二个元素(引用ID)发送到支付网关,如下所示:
echo "";
function postRefId (refIdValue) {
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "https://bpm.shaparak.ir/pgwchannel/startpay.mellat");
form.setAttribute("target", "_self");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "RefId");
hiddenField.setAttribute("value", refIdValue);
form.appendChild(hiddenField);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
网关将通过 POST 方法将以下参数返回给我们在付款请求中提供的回拨 URL :
RefId (前面步骤中生成的引用ID)
ResCode (付款结果:0表示成功)
saleOrderId (在付款请求期间传递的订单ID)
SaleReferenceId (销售参考代码由PSP提供给商家)
如果上一步中的 ResCode 是 0 ,那么我们需要使用以下参数传递呼叫 bpVerifyRequest 以验证付款,否则付款将被取消 .
$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $orderId,
'saleOrderId' => $verifySaleOrderId,
'saleReferenceId' => $verifySaleReferenceId);
// Call the SOAP method
$result = $client->call('bpVerifyRequest', $parameters, $namespace);
如果 bpVerifyRequest 的结果为零,则付款是确定的,商家必须提供所购买的商品或服务 . 但是,有一个可选方法 bpSettleRequest ,用于请求结算 . 它被称为如下:
$ parameters = array('terminalId'=> $ terminalId,'userName'=> $ userName,'userPassword'=> $ userPassword,'orderId'=> $ orderId,'saleOrderId'=> $ settleSaleOrderId,'saleReferenceId'=> $ settleSaleReferenceId);
//调用SOAP方法$ result = $ client-> call('bpSettleRequest',$ parameters,$ namespace);
通过查看支付网关插件中的默认网关,我感到困惑,例如PayPal,Stripe,2Checkout等 . 如何将此代码逻辑合并到新创建的网关骨架中? (结构如下所示):
Update:
我设法在 processTransaction 的 processTransaction 方法中添加了我的网关代码,它运行正常 . 但它仅适用于站点的桌面版本,无法加载移动版本 .