Мне нужно интегрировать новый платежный шлюз на наш корпоративный сайт, основанный на Social Engine. Для этого CMS
существует расширение под названием Advanced Payment Gateways, которое позволяет интегрировать новые шлюзы. Фактически, он получает имя вашего шлюза и генерирует скелетную структуру, упакованную в файл, чтобы вы могли разархивировать и загрузить на свой сервер и таким образом объединить с каталогом приложения.
Я собираюсь объяснить, как я реализую свой шлюз без Social Engine, и я надеюсь, что кто-то подскажет мне, как я могу включить это в Social Engine.
Сначала я подключаюсь к своему сервису
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 0.
Затем мы можем отправить второй элемент (ссылочный идентификатор) для оплаты шлюз следующим образом с помощью метода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
(ссылочный идентификатор, созданный на предыдущих шагах)
ResCode
(Результат платежа: 0 означает успех)
saleOrderId
(идентификатор заказа, переданный во время запроса на оплату)
SaleReferenceId
(ссылочный код продажи предоставляется PSP продавцу)Если
ResCode
на предыдущем шаге было 0 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);
Я запутался, посмотрев на шлюзы по умолчанию в плагине Payment Gateways, например, PayPal, Stripe, 2Checkout и т.д. Как мне включить эту кодовую логику в недавно созданный каркас шлюза? (структура показана ниже):
Вы можете проверить полный исходный код здесь:
default.php
callback.php