Получение ссылки на оплату
Приведенный ниже пример на PHP показывает как можно получить прямую ссылку на оплату с заранее указанными параметрами. Данная необходимость может возникать при реализации работы мобильного приложения, работы биллинга или любой другой сложной информационной системы.
Реализуется данный функционал с помощью запроса 3.4 JSON API протокола.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
<?php # Логин и пароль от личного кабинета PayKeeper $user="demo"; $password="demo"; # Basic-авторизация передаётся как base64 $base64=base64_encode("$user:$password"); $headers=Array(); array_push($headers,'Content-Type: application/x-www-form-urlencoded'); # Подготавливаем заголовок для авторизации array_push($headers,'Authorization: Basic '.$base64); # Укажите адрес ВАШЕГО сервера PayKeeper, адрес demo.rosbank-processing.ru - пример! $server_paykeeper="demo.rosbank-processing.ru"; # Параметры платежа, сумма - обязательный параметр # Остальные параметры можно не задавать $payment_data = array ( "pay_amount" => 42.50, "clientid" => "Иванов Иван Иванович", "orderid" => "Заказ № 10", "client_email" => "test@example.com", "service_name" => "Услуга", "client_phone" => "8 (910) 123-45-67" ); # Готовим первый запрос на получение токена безопасности $uri="/info/settings/token/"; # Для сетевых запросов в этом примере используется cURL $curl=curl_init(); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$server_paykeeper.$uri); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'GET'); curl_setopt($curl,CURLOPT_HTTPHEADER,$headers); curl_setopt($curl,CURLOPT_HEADER,false); # Инициируем запрос к API $response=curl_exec($curl); $php_array=json_decode($response,true); # В ответе должно быть заполнено поле token, иначе - ошибка if (isset($php_array['token'])) $token=$php_array['token']; else die(); # Готовим запрос 3.4 JSON API на получение счёта $uri="/change/invoice/preview/"; # Формируем список POST параметров $request = http_build_query(array_merge($payment_data, array ('token'=>$token))); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$server_paykeeper.$uri); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($curl,CURLOPT_HTTPHEADER,$headers); curl_setopt($curl,CURLOPT_HEADER,false); curl_setopt($curl,CURLOPT_POSTFIELDS,$request); $response=json_decode(curl_exec($curl),true); # В ответе должно быть поле invoice_id, иначе - ошибка if (isset($response['invoice_id'])) $invoice_id = $response['invoice_id']; else die(); # В этой переменной прямая ссылка на оплату с заданными параметрами $link = "https://$server_paykeeper/bill/$invoice_id/"; # Теперь её можно использовать как угодно, например, выводим ссылку на оплату echo $link; ?> |
В переменной $link находится ссылка на оплату. Далее с данной ссылкой можно производить любые необходимые манипуляции:
- Отправлять данную ссылку для оплаты плательщику
- Использовать эту ссылку для социальных сетей
- Перенаправлять плательщика с помощью JavaScript для оплаты
- Отображать в личном кабинете прямую ссылку для оплаты
Проверить статус оплаты по ссылке можно аналогичным образом используя запрос 3.1 JSON API протокола:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php # Логин и пароль от личного кабинета PayKeeper $user="demo"; $password="demo"; # Формируем строку в base64 для Basic-авторизации $base64=base64_encode("$user:$password"); $headers=Array(); array_push($headers,'Content-Type: application/x-www-form-urlencoded'); # Подготавливаем заголовок для Basic-авторизации array_push($headers,'Authorization: Basic '.$base64); # Укажите адрес ВАШЕГО сервера PayKeeper, demo.rosbank-processing.ru - пример! $server_paykeeper="demo.rosbank-processing.ru"; # $invoice_id из предыдущего примера $invoice_id="20170724151214976"; # В примере используется библиотека cURL $curl=curl_init(); # Готовим запрос 3.1 JSON API на получение счёта $uri="/info/invoice/byid/?id=$invoice_id"; curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$server_paykeeper.$uri); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'GET'); curl_setopt($curl,CURLOPT_HTTPHEADER,$headers); curl_setopt($curl,CURLOPT_HEADER,false); # В ответе сервера должно быть поле status. Иначе - ошибка $response=json_decode(curl_exec($curl),true); if (isset($response['status'])) $status = $response['status']; else die(); # Это статус счёта. Для примера выведем его. echo $status; ?> |
В переменной $status находится статус оплаты по данной ссылке. Допустимые значения поля – created, sent, paid, expired. Статус paid означает, что оплата по данной ссылке прошла успешно.
Все успешные оплаты проведенные можно также увидеть в личном кабинете в разделе счета или настроить по ним отправку с помощью POST-оповещений.
Обратите внимание, что по каждой сгенерированной ссылке можно произвести успешную оплату только один раз. Таким образом нельзя использовать один раз полученную ссылку для нескольких покупателей в интернет магазине. Новую ссылку необходимо генерировать для каждой новой покупки.