Created
March 26, 2018 07:41
-
-
Save morozVA/091636663b66de29f2ff13ebfa7b5d37 to your computer and use it in GitHub Desktop.
Подключение платежных систем - пример webpay и bepaid
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Подключение эквайринга | |
Необходимо получить от клиента доступы в кабинет пользователя нужной платежной системы. | |
Для webpay сначала дается доступ к тестовому кабинету. В нем проверяется правильность подключения и деньги не списываются при оплате. Когда все готово и работает – клиент пишет в webpay, и ему дают доступы от рабочего кабинета. | |
Для bepaid кабинет один. | |
Произвести необходимую настройку в кабинете пользователя платежной системы. | |
Для webpay - задать секретный ключ, прописать страницы error, success, notify. Забираем из кабинета id магазина. | |
Для bepaid надо в кабинете настроить данные тестового платежа – срок действия тестовой карточки и прочее. Также забираем id магазина. | |
СТРАНИЦА КОРЗИНЫ | |
На сайте создаем сниппет formSetCookie. В нем формируем куки с информацией об оплате. | |
function toSetCookie(&$fields){ | |
global $modx; | |
$modx->clearCache(); | |
$delivery = $fields['sumDelivery']; | |
$total = $fields['totalPrice1']; | |
$email = $fields['order-email']; | |
$phone = $fields['order-phone']; | |
$wsb_order = $fields['wsb_order']; | |
$discount = $fields['discountRubl']; | |
setcookie ("delivery", $delivery); | |
setcookie ("total",$total); | |
setcookie ("email",$email); | |
setcookie ("phone",$phone); | |
setcookie ("wsb_order",$wsb_order); | |
setcookie ("discount",$discount); | |
} | |
Вызываем его на странице корзины. В параметре &eFormOnValidate сниппета eform вызываем функцию из сниппета. | |
[!formSetCookie!] | |
[!eForm? &formid=`shopOrderForm` &tpl=`shopOrderForm` &report=`shopOrderReport` &to=`[!GetField? &docid=`58` &field=`send`!]` &from=`Заказ на сайте [(site_url)]` &gotoid=`60` &ccsender=`1` &subject=`Новый заказ` &protectSubmit=`0` &submitLimit=`1` &eFormOnBeforeMailSent=`populateOrderData` &eFormOnMailSent=`sendOrderToManager` &eFormOnValidate=`toSetCookie`!]`+] | |
Страница “Спасибо за заказ”. | |
При оформлении заказа происходит редирект на страницу “Спасибо за заказ”. В нем происходит проверка выбранного способа оплаты. Если выбран webpay/bepaid: | |
А. Выводим текст «Ваш заказ оформлен! Сейчас вы будете перенаправлены на безопасную | |
для оплаты страницу.» | |
Б. | |
Если webpay: | |
Выводим форму. | |
<form id="payOrderForm" method="post" action="https://payment.webpay.by/"> | |
<input type="text" style="display:none;" value="" name="special" class="special" eform="Спец:date:0"> | |
<input type="hidden" name="wsb_order" value="[!wsb_order!]" eform="::0::" /> | |
[!toGetCookie!] | |
<button type="submit" id="submit" class="btn-color hidden"><span><span>Оплатить заказ</span></span></button> | |
</form> | |
В форме вызываем сниппет toGetCookie. В нем формируем поля формы из сохраненных кук – id магазина, сумма заказа, код валюты, адреса страниц error, success, notify, хешированная строка с секретным ключом для проверки подлинности, поле варианта платежа – тестовый или рабочий. | |
<?php | |
if (isset($_COOKIE['delivery'])) { | |
$delivery = $_COOKIE['delivery']; | |
} | |
if (isset($_COOKIE['discount'])) { | |
$discount = $_COOKIE['discount']; | |
} | |
$wsb_total= $_COOKIE['coockie_totalPrice']; | |
$wsb_email= $_COOKIE['email']; | |
$wsb_phone= $_COOKIE['phone']; | |
$wsb_order_num = $_COOKIE['coockie_wsb_order']; | |
//ПАРАМЕТРЫ, ЗАДАВАЕМЫЕ ПОЛЬЗОВАТЕЛЕМ | |
// Секретный ключ надо задать в сниппете getHash | |
$wsb_storeid=967854700; //id магазина | |
$wsb_test=0; //1 - тест, 2 - реальная оплата(0) | |
$wsb_currency_id='BYN'; //валюта (BYR, USD, EUR, RUB) | |
$wsb_store="Интернет-магазин unipress.by"; //название магазина | |
//$wsb_return_url="http://unipress.by/blagodarim_vas_za_oplatu_zakaza_cherez_sistemu_erip.html"; //адрес страницы при успешной оплате заказа | |
//$wsb_cancel_return_url="http://unipress.by/oshibka_oplaty.html"; //адрес страницы в случае НЕ успешной оплаты | |
$wsb_seed=time(); //случайная последовательность символов | |
$getHashParams = array('wsb_seed' => $wsb_seed, 'wsb_storeid' => $wsb_storeid, 'wsb_order_num' => $wsb_order_num, 'wsb_test' => $wsb_test, 'wsb_currency_id' => $wsb_currency_id, 'wsb_total' => $wsb_total); | |
$wsb_signature = $modx->runSnippet('getHash', $getHashParams); | |
$webpay_fields = '<input type="hidden" name="*scart" eform="::0::"> | |
<input type="hidden" name="wsb_version" value="2" eform="::0::"> | |
<input type="hidden" name="wsb_language_id" value="russian" eform="::0::"> | |
<input type="hidden" name="wsb_storeid" value="'.$wsb_storeid.'" eform="::0::"> | |
<input type="hidden" name="wsb_store" value="'.$wsb_store.'" eform="::0::"> | |
<input type="hidden" name="wsb_order_num" value="'.$wsb_order_num.'" eform="::0::"> | |
<input type="hidden" name="wsb_test" value="'.$wsb_test.'" eform="::0::"> | |
<input type="hidden" name="wsb_currency_id" value="'.$wsb_currency_id.'" eform="::0::"> | |
<input type="hidden" name="wsb_seed" value="'.$wsb_seed.'" eform="::0::"> | |
<input type="hidden" name="wsb_return_url" value="http://unipress.by/blagodarim_vas_za_oplatu_zakaza_cherez_sistemu_erip.html" eform="::0::"> | |
<input type="hidden" name="wsb_cancel_return_url" value="http://unipress.by/oshibka_oplaty.html" eform="::0::"> | |
<input type="hidden" name="wsb_notify_url" value="http://unipress.by/blagodarim_vas_za_oplatu_zakaza_cherez_sistemu_erip.html" eform="::0::"> | |
<input type="hidden" name="wsb_total" value="'.$wsb_total.'" eform="::0::"> | |
<input type="hidden" name="wsb_signature" value="'.$wsb_signature.'" eform="::0::"> | |
<input type="hidden" name="wsb_invoice_item_name[]" value="Товар"> | |
<input type="hidden" name="wsb_invoice_item_price[]" value="'.$wsb_total.'"> | |
<input type="hidden" name="wsb_invoice_item_quantity[]" value="1"> | |
'; | |
echo $webpay_fields; | |
C помощью js вызывам событие отправки формы через 1,5 секунды. | |
Когда все работает – получаем у клиента доступы к рабочему кабинету webpay. В нем не забываем заново указать секретный ключ и адреса. Заменяем в сниппете данные id магазина, секретного ключа, wsb_test. | |
Если bepaid: | |
Вызываем сниппет bePaid, в нем инклюдим php файл bePaid.php. В файле: | |
Указываем доступы: | |
$shop = '2781:2ed59d980d00eb893c2b9a56b0f7954be61ea4b2586f3459652c13b7d74862a8'; | |
Переводим сумму в нужный формат, без копеек | |
$total = htmlspecialchars($_COOKIE['total']) * 100; | |
Формируем объект с данными запроса | |
$data = '{ | |
"checkout": { | |
"version": 2.1, | |
"order": { | |
"amount": '.$total.', | |
"currency": "BYN", | |
"description": "'.$description.'" | |
}, | |
"settings": { | |
"language": "ru", | |
"decline_url": "http://mebel-delo.by/decline.html", | |
"fail_url": "http://mebel-delo.by/fail.html", | |
"notification_url": "http://mebel-delo.by/notify.html", | |
"success_url": "http://mebel-delo.by/success.html" | |
}, | |
"transaction_type": "payment" | |
} | |
}'; | |
Делаем запрос в поисковую систему для получения токена: | |
$url = "https://checkout.bepaid.by/ctp/api/checkouts"; | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
curl_setopt($ch, CURLOPT_POST, 1); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); | |
curl_setopt($ch, CURLOPT_URL, $url); | |
curl_setopt($ch, CURLOPT_USERPWD, $shop); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | |
$result = curl_exec($ch); | |
curl_close($ch); | |
$res = json_decode($result); | |
$token = $res->checkout->token; | |
Выводим ссылку | |
echo '<a class="hidden go_to_pay" href="'.$res->checkout->redirect_url.'">Перейти на страницу оплаты</a>'; | |
Далее в чанке с помощью js переходим по сформированной ссылке | |
$("document").ready(function(){ | |
function go_to_pay() { | |
var url = $("a.go_to_pay").attr('href'); | |
location.href = url; | |
} | |
setTimeout(go_to_pay, 2000); | |
}); | |
В форме оплаты для проверки работы вводим данные тестовой карты. Номер карты указан в документации, срок действия и код безопасности бы заполняем в кабинете пользователя. | |
Чек-лист: | |
Оформляем заказ, указав в выборе оплаты webpay/ерип или другую нужную систему. | |
Проверяем переход на специальную страницу с текстом об успешном заказе и грядущем переходе на страницу оплаты. | |
Проверяем автоматический переход js-ом на страницу оплаты. | |
Проверяем на странице оплаты верность информации (оплачиваемую сумму и пр.). | |
Совершаем тестовый платеж. | |
Жмем на ссылку возвращения на сайт. | |
Проверяем существование страницы успешной оплаты. | |
Переключившись в рабочий режим проверяем вплоть до страницы оплаты. | |
Проверяем очищение корзины, отправку письма о заказе. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment