【发布时间】:2018-02-11 04:45:53
【问题描述】:
我需要在我们的公司网站上集成一个新的支付网关,该网站基于社交引擎。这个CMS 有一个扩展名为Advanced Payment Gateways,它允许集成新的网关。事实上,它会获取您的网关名称并生成一个压缩为文件的骨架结构,因此您可以解压缩并上传到您的服务器,从而与应用程序目录合并。
我将解释如何在没有社交引擎的情况下实现我的网关,我希望有人能告诉我如何将它整合到社交引擎中。
-
首先我连接到我的
PSP服务:$client = new nusoap_client('https://example.com/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。
然后我们可以将第二个元素(参考ID)发送到付款 通过POST方法网关如下:echo "<script language='javascript' type='text/javascript'>postRefId('" . $res[1] . "');</script>"; <script language="javascript" type="text/javascript"> function postRefId (refIdValue) { var form = document.createElement("form"); form.setAttribute("method", "POST"); form.setAttribute("action", "https://example.com/pgwchannel/startpay"); 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); } </script> -
网关将通过
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);
// Call the SOAP method
$result = $client->call('bpSettleRequest', $parameters, $namespace);
我对支付网关插件中的默认网关感到困惑,例如PayPal、Stripe、2Checkout 等。我如何将此代码逻辑合并到新创建的网关框架中? (结构如下图):
您可以在这里查看完整的源代码:
default.php
callback.php
【问题讨论】:
-
您想要的值(支付金额和订单ID)是否存储在输入字段中?
-
那是一个与“如何向社交引擎添加自定义支付网关”不同的问题,再次强化了我的论点。如果您只是遇到网关无法在移动设备上运行的问题,请重新提出问题,以便您只问这个问题。我问这个以防万一一个初出茅庐的程序员不小心浪费了很多时间给你一个社交引擎网关的实现,这个行业的大部分时间都是有偿工作的。如此高额的赏金,就像贿赂一样,有人接受这将降低他们的价值。
-
因此,当有人免费帮助您时,您会获得报酬,他们唯一的奖励是网站上的积分。我不认为我需要更清楚地表达我的观点。
-
为什么在移动端会失败?如果没有错误,我们将无法提供帮助
-
@JasonStack 尝试在代码中的每个点使用
error_log进行日志记录,看看它是否跳过了其中的任何一个。记录每一点。
标签: php customization payment-gateway socialengine