Всем привет на связи ILX , и я обожаю тестировать различные интеграции. В этот раз будем разбирать гайд как поставить платёжку СБП через Paycos на сайт.
Начну с того что Paycos - это что-то типа распределённого агрегатора, который может предоставить приём денег из любой страны мира, что сейчас в общем-то очень актуально!
Суть сервиса заключается в следующем, есть люди у которых есть деньги как в одной стране, так и в другой и они меняют одни деньги на другие по внутреннему курсу с небольшой комиссией.
Это очень удобно например сейчас из России не получается оплатить Steam (или любой другой забугорный сервис), можно это исправить запилив соответствующий сервис с приёмом кеша в России и оплатой через сторонние карты.
Что же ближе к делу....
После регистрации на сервисе paycos.com и урегулирования всех формальностей с документами и администраторами, у нас появляется доступ в личный кабинет.
В котором, после согласования с администратором должны появиться ваши субаккаунты,
для ваших сайтов указанных при регистрации.
Собственно тут и находятся 2 самые важные вещи для нашей интеграции:
1) ID
2) MerchantPrivateKey

Администратор вам также пришлет инструкции по запросам которые вы должны делать.
вот она тут.
Ее мы возьмём за основу, однако если следовать только ей ничего не получится.
Так куда слать запросы и что нужно чтобы все заработало там не написано.
Что ж после не длительной переписки с техподдержкой все же таки выяснилось
И вот что потребовалось для того чтобы просто получить токен оплаты по СБП.
О чем в обшей документации либо не сказано либо не совсем все очевидно!
Например:
1) CURLOPT_URL => "https://gateway-router.paycos.com/api/v1/init/pay"
2)CURLOPT_POSTFIELDS =>
2.1) \"product\" Для теста оставил как есть TEST PAYIN
2.2) \"amount\" Это значение должно быть в копейках, в данном случае мы просто добавляем нули тк все передается в текстовом виде
2.3) три ссылки с обязательным заполнением и валидным адресом, впрочем это было понятно но я сначало не все заполнил.
\"сallbackUrl\" адрес перенаправления по завершении платежа
\"redirectSuccessUrl\" адрес, в случае успешной оплаты
\"redirectFailUrl\" адрес, в случае ошибки или сбоя платежа
Далее в общей документации почему то отсутвовал, но после общения с тех поддержкой всё-таки нашёлся
2.4) "customer" : { "client_id" : "1" } //сдесь может быть ваше значение номера клиента
2.5) "order_number": Сдесь нужен ID вашего субакаунта
2.6) "orderNumber" : это значение временное значение присвоеное тразакции с сайта лучше начинать с единицы, если запросить повторно запрос на тоже самое временное значение то он не сработает однако если отменить платеж то может сработать еще раз. в любом случае лучше просто каждый раз увеличивать этот счётчик и все будет в порядке.
2.7) CURLOPT_HTTPHEADER =>
"authorization: ".$MerchantPrivateKey."", // Сдесь нужен MerchantPrivateKey вашего субакаунта
Давайте же посмотрим что в итоге у нас получилось
$summ = 500;// Сумма оплаты не может быть меньше 500рублей
$login = "ILX_0" // Тут просто данные которые вы хотите передать в терминал
$ID= 103213654// Берете из ID с админки для одобренного субакаунта
$MerchantPrivateKey = 51c2cd6g84ce658bf00f// тоже самое
$orderNumber = 1// Это значение должно меняться при каждом срабатывании на +1 можно
// для теста пока засунем его в фаил order.txt каждый раз при вызове будет менятся
$orderNumber = file_get_contents("order.txt")+1;
file_put_contents ("order.txt",$orderNumber);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://gateway-router.paycos.com/api/v1/init/pay",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "
{
\"product\" : \"TEST PAYIN\",
\"amount\" : \"".$summ."00\",
\"currency\" : \"RUB\",
\"order_number\": \"".$ID."\",
\"redirectSuccessUrl\" : \"http://pay-steam.xyz/compleatpay.php\",
\"callback_url\": \"http://pay-steam.xyz/compleatpay.php/?u=callback_url\",
\"redirectFailUrl\" : \"http://pay-steam.xyz/erpay.php\",
\"extraReturnParam\" : \"".$login."\",
\"customer\" :
{
\"client_id\" : \"1\"
},
\"orderNumber\" : \"".$orderNumber."\",
\"locale\" : \"zh\"\n
}",
CURLOPT_HTTPHEADER => array(
"authorization: ".$MerchantPrivateKey."",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
print_r ($response); //
}
После исправления данных и запуска этого скрипта
Вам придёт ответ от сервера примерно в таком виде

Понимаю выглядит не очень, но всетаки банковские данные не шутка...
Но дело не в этом нас интересует именно paiment_page_url там где total
На эту страницу мы в итоге делаем переадресацию в нашем скрипте.
Поменяем то место где наш print_r ($response) и сделаем переадресацию
$ens = json_decode($response,true,512);
if (isset($ens['payment_page_url']['total']))
{
echo "<script>window.location.href='".$ens['payment_page_url']['total']."'</script>";
}
После переадресации нас вынесет на проверку на бота перед оплатой, здесь пользователь должен кликнуть мышью на кошелёк, ничего интересного но все же этап:

После нажатия вывалится окно оплаты:

Все данные как до оплаты так и после можно найти в админке Paycos.
Оплата по карте
Приведенный выше не единственный способ оплаты через данную систему
В личном кабинете paycos в саб аккаунтах есть второй тип транзакций оплата по номеру карты.
Для того, чтобы использовать его нужно будет изменить $MerchantPrivateKey в своем запросе на тот что указан в суб аккаунтах как New Traffic.
Однако это ещё не все, в стандартном ответе от сервера нужно использовать другую ссылку, хранящуюся в ответе по адресу payment_page_url=>methods=>ob_card
таким образом чтобы осуществить эту оплату с переадресацией замените
print_r ($response) из первоначального скрипта на код приведённый ниже.
$ens = json_decode($response,true,512);
if (isset($ens['payment_page_url']['methods']['ob_card']))
{
echo "<script>window.location.href='".$ens['payment_page_url']['methods']['ob_card']."'</script>";
}
Окно оплаты в этом случае будет выглядеть вот так.

И после выбора банка:

На этой трогательной ноте первичная интеграция завершается и вы получаете долгожданный доступ к международным банковским операциям в виде сервиса.
А ваш слуга надеюсь получит немного кармы, ну или критики что тоже неплохо.
А если этот гайд помог вам не стесняйтесь благодарить как не жалко =)