При каждом принятом платеже PayKeeper может отправлять POST-запрос на указанный URL предприятия. Для этого необходимо включить данную функцию в личном кабинете предприятия.
Параметр | Назначение | Обязательный | |
1 | Параметр:id | Назначение:Уникальный номер платежа | Обязательный:Да |
2 | Параметр:sum | Назначение:Сумма платежа | Обязательный:Да |
3 | Параметр:clientid | Назначение:Фамилия Имя Отчество | Обязательный:Нет |
4 | Параметр:orderid | Назначение:Номер заказа | Обязательный:Нет |
5 | Параметр:key | Назначение:Цифровая подпись запроса, строка из символов a-f и 0-9 | Обязательный:Да |
Поле key — цифровая подпись запроса. Она является md5-хешем, который вычисляется от конкатенации параметров 1-4 с добавлением в конец секретного слова. Секретное слово также настраивается в личном кабинете.
Обязательно нужно проверять, что sum , clientid и orderid соответствуют друг другу в вашей информационной системе. То есть. если было получено оповещение об успешном платёже по заказу номер orderid , нужно проверить, что он действительно есть, что его сумма действительно совпадает с полученной суммой оплаты sum , что он принадлежит пользователю clientid . Если ваша система не использует идентификацию заказов или пользователей, проверяйте только релевантные для вашего случая параметры.
Параметр | Назначение | Обязательный | |
1 | Параметр:service_name | Назначение:Наименование услуги | Обязательный:Нет |
2 | Параметр:client_email | Назначение:Адрес электронной почты | Обязательный:Нет |
3 | Параметр:client_phone | Назначение:Телефон | Обязательный:Нет |
4 | Параметр:ps_id | Назначение:Идентификатор платежной системы | Обязательный:Да |
5 | Параметр:batch_date | Назначение:Дата списания авторизованного платежа | Обязательный:Нет |
6 | Параметр:fop_receipt_key | Назначение:Код страницы чека 54-ФЗ | Обязательный:Нет |
7 | Параметр:bank_id | Назначение:Идентификатор привязки карты | Обязательный:Нет |
8 | Параметр:bank_payer_id | Назначение:Идентификатор привязки клиента | Обязательный:Нет |
9 | Параметр:card_number | Назначение:Маскированный номер карты | Обязательный:Нет |
10 | Параметр:card_holder | Назначение:Держатель карты | Обязательный:Нет |
11 | Параметр:card_expiry | Назначение:Срок действия карты | Обязательный:Нет |
12 | Параметр:bank_operation_datetime | Назначение:Дата и время совершения платежа в банке | Обязательный:Нет |
Если параметр отмечен как необязательный, то в запросе он может отсутствовать, либо быть пустым. Поля clientid , orderid , service_name , client_email , client_phone будут те же, что и при инициализации платёжа.
ps_id устанавливается в зависимости от платёжной системы, через которую проходит платёж (например, через Qiwi, Яндекс.Деньги или WebMoney) либо в зависимости от банка-эквайера, через который принимается оплата.
batch_date передается в том случае, если платёжная платформа PayKeeper работает в двухстадийном режиме оплаты (режим «авторизация + списание»). В этом режиме успешная оплата является операцией авторизации денежных средств, которые по прошествии заданного периода времени должны быть списаны с карты плательщика. batch_date в этом случае представляет собой дату запланированного списания платёжа.
fop_receipt_key передается в том случае, если платёжная платформа интегрирована с онлайн-кассой. С помощью fop_receipt_key формируется постоянный адрес страницы с чеком 54-ФЗ по данному платёжу.
Если в процессе оплаты была создана привязка карты, то дополнительно передаётся bank_id — идентификатор созданной привязки карты. Он понадобится при выполнении платёжа по привязанной карте. Если платёж происходит с уже привязанной карты, то в bank_id будет идентификатор использованной привязки.
Параметры card_number , card_holder , card_expiry , могут быть заполнены соответственно маскированным номером карты, именем держателя карты и сроком действия карты плательщика, если использующийся шлюз банка эти данные передаёт.
где hash вычисляется как md5-хеш от конкатенации поля id запроса и того же секретного слова, а слово «OK» состоит из английских букв O и K. Такой ответ считается подтверждением того, что информационная система предприятия приняла данный платёж.
1 2 3 4 |
<?php $hash = md5($id.$secret_seed); echo "OK $hash"; ?> |
В случае, если на запрос не будет получен корректный ответ, PayKeeper будет продолжать попытки сообщить о платёже, повторяя запрос каждую минуту. Если через определённое число попыток (50 по умолчанию) не будет получен корректный ответ, платёж в PayKeeper получит статус «Совершён без оповещения». Такой платёж можно повторно провести через веб-интерфейс администратора.
Например, на языке PHP приём оповещений можно реализовать так:
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 |
<?php $secret_seed = "verysecretseed"; $id = $_POST['id']; $sum = $_POST['sum']; $clientid = $_POST['clientid']; $orderid = $_POST['orderid']; $key = $_POST['key']; if ($key != md5 ($id.number_format($sum, 2, ".", "") .$clientid.$orderid.$secret_seed)) { echo "Error! Hash mismatch"; exit; } # Рекомендуем проверять, существует ли заказ $orderid, # принадлежит ли он пользователю $clientid, # совпадает ли его сумма с переданной $sum ... # Заказ $orderid можно считать оплаченным, # нужно отметить, что он оплачен ... echo "OK ".md5($id.$secret_seed); ?> |
Ваша система должна корректно обрабатывать ситуацию, когда уведомление об успешном платёже отправляется несколько раз — не должно происходить повторных зачислений одного и того же платёжа. Проще всего это сделать, запоминая id принятого платёжа в базе данных и проверяя его уникальность.
Существует также возможность настроить уведомления о произведённых возвратах и неуспешных платёжах (в статусе «Не состоялся»). Для настройки таких уведомлений необходимо обратиться в службу поддержки.
Менеджер перезвонит вам и расскажет про детали подключения