Если Вы хотите получать статус транзакции, использовать рекуррентные или двухстадийные платежи, то Вам может быть интересна возможность получать нотификации об оплате. Для этого Вам необходимо при создании сервиса указать . Если URL указан, а чекбокс не включен, то скрипт вызываться не будет!
В случае успешного завершения платежа информация о нем будет передана Вам POST-запросом на данный URL, а также GET-запросом на URL страницы успешной покупки. Набор параметров для обеих рассылок идентичен. Таким образом вы можете уведомлять пользователя о деталях оплаченного заказа после редиректа на страницу успеха, основываясь на данных, полученных из нотификации: номер заказа, стоимость, дата и т.д. Подробности ниже в таблице параметров (см. оглавление).
Если при создании сервиса было заполнено поле email, то на указанную электронную почту также будет выслана информация о платеже.
Запросы от нашего сервера в случае первой неудачной попытки передаются со следующей периодичностью: 180, 180, 180 с. |
|
| Параметр | Версия | Описание |
| tid | 1.0, 1.1, 2.0 | ID транзакции |
| name | 1.0, 1.1, 2.0 | Название товара или услуги. Отображается на странице оплаты. |
| comment | 1.0, 1.1, 2.0 | Комментарий платежа переданный в процессе инициализации платежа. |
| partner_id | 1.0, 1.1, 2.0 | ID партнера, то есть ваш ID |
| service_id | 1.0, 1.1, 2.0 | ID сервиса |
| order_id | 1.0, 1.1, 2.0 | ID заказа |
| type | 1.0, 1.1, 2.0 | Тип платежа |
| currency | 1.0, 1.1, 2.0 | Валюта операции, поддерживается только RUB, не участвует в формировании подписи при version = (1.0|1.1) |
| cost | 1.0, 1.1, 2.0 | Общая сумма заказа, переданная при инициализации платежной операции |
| income_total | 1.0, 1.1, 2.0 | Общая сумма в рублях, заплаченная покупателем, может отличаться от income и system_income только в случае оплаты частями или при переносе комиссии на плательщика |
| income | 1.0, 1.1, 2.0 | Сумма в рублях, полученная от платежного инструмента по данной платежной транзакции |
| partner_income | 1.0, 1.1, 2.0 | Сумма в рублях, дохода магазина по данной платежной транзакции |
| system_income | 1.0, 1.1, 2.0 | Сумма в рублях, заплаченная покупателем по данной платежной транзакции |
| command | 1.0, 1.1, 2.0 | Текущее действие:
ВАЖНО: в случае полной оплаты сервиса придут и success и process. |
| result | 1.0, 1.1, 2.0 | Только для command=refund, значения ‘ok’ или ‘fail’ |
| resultStr | 1.0, 1.1, 2.0 | Текст уведомления. |
| version | 1.0, 1.1, 2.0 | Версия протокола уведомления. (На данный момент: 1.0, 1.1, 2.0). Версия по умолчанию — 1.0. Переключение на другие версии производится на стороне Провайдера по запросу от клиента |
| phone_number | 1.0, 1.1, 2.0 | Опционально, номер телефона |
| 1.0, 1.1, 2.0 | Опционально, email | |
| date_created | 1.0, 1.1, 2.0 | дата и время создания транзакции, формат 'YYYY-MM-DD HH24.MI.SS' (MSK) |
| recurrent_order_id | 1.0, 1.1, 2.0 | ID заказа (order_id), который был передан при первом вызове рекуррентного платежа (только для рекуррентных операций) |
| card | 1.0, 1.1, 2.0 | v 1.0 Маскированный номер карты, в случае если проведенный платеж является рекуррентным (только для рекуррентных операций) v 1.1 и 2.0 заполнено всегда когда есть поле card |
| cardholder | 2.0 | Имя держателя карты если присутствует в транзакции |
| card_binding_id | 1.0, 1.1, 2.0 | уникальный токен для сохраненных данных карты. Устарело. Подробнее. |
| test | 1.0, 1.1, 2.0 | Значение 1 (только для тестовых платежей), См. описание |
| paid_date | 2.0 | дата и время оплаты транзакции (подтверждения оплаты платежным каналом), формат 'YYYY-MM-DD HH24.MI.SS' (MSK) |
| check | 2.0 | Алгоритм формирования описан в приложении №1. |
| check | 1.0, 1.1 | MD5 хеш от параметров: tid + name + comment + partner_id + service_id + order_id + type + cost + income_total + income + partner_income + system_income + command + phone_number + email + result + resultStr + date_created + version + card + recurrent_order_id + test + secret_key Где secret_key – секретный ключ сервиса. Пример формирования продемонстрирован ниже. |
| check(если command=refund) | 1.0, 1.1 | MD5 хеш от параметров:'tid'+'name'+'comment'+'partner_id'+'service_id'+'order_id'+'type'+'cost'+'command'+'result'+'resultStr'+'phone_number'+'email'+'date_created'+'version'+'secret_key' |
| refund_ext_id | 1.0, 1.1, 2.0 | дополнительный id возврата при осуществлении нескольких возвратов в рамках транзакции. Подробнее |
|
| Версия меняется по запросу в отдел технической интеграции |
Все параметры участвуют в формировании подписи check. Подпись формируется как md5 от всех параметров, сцепленных в строку без пробелов + добавленный в конце секретный ключ сервиса.
1 | $param['check']==md5($param['tid'].$param['name'].$param['comment'].$param['partner_id'].$param['service_id'].$param['order_id'].$param['type'].$param['cost'].$param['income_total'].$param['income'].$param['partner_income'].$param['system_income'].$param['command'].$param['phone_number'].$param['email'].$param['result'].$param['resultStr'].$param['date_created'].$param['version'].$secretKey); |
<?php
$param = array
(
'comment' => '',
'phone_number' => '74952760800',
'order_id' => '67',
'currency' => 'RUB',
'cost' => '511.0',
'date_created' => '2021-01-28 21:35:49',
'partner_id' => '250305',
'resultStr' => 'транзакция оплачена полностью',
'name' => 'Покупка в магазине',
'system_income' => '511.0',
'income_total' => '511.0',
'partner_income' => '434.35',
'version' => '1.0',
'command' => 'success',
'income' => '511.0',
'tid' => '474541305',
'service_id' => '85494',
'type' => 'spg_test',
'email' => 'test@mail.ru',
'result' => ''
);
$secretKey = 'c9264d756f170802c4eaf9405077b946';
echo rawurlencode(md5($param['tid'].$param['name'].$param['comment'].$param['partner_id'].$param['service_id'].$param['order_id'].$param['type'].$param['cost'].$param['income_total'].$param['income'].$param['partner_income'].$param['system_income'].$param['command'].$param['phone_number'].$param['email'].$param['result'].$param['resultStr'].$param['date_created'].$param['version'].$secretKey)); |
import hashlib
from urllib.parse import parse_qs
import pprint
secretkey = '262eb24f12d0c3fdd990eae096016055'
params_list = [
'tid',
'name',
'comment',
'partner_id',
'service_id',
'order_id',
'type',
'cost',
'income_total',
'income',
'partner_income',
'system_income',
'command',
'phone_number',
'email',
'result',
'resultStr',
'date_created',
'version',
'secretKey'
]
# Тело webhook-нотификации, полученное на URL обработчика:
qs = 'comment=&phone_number=79165483580&order_id=00000015¤cy=RUB&cost=75.0&date_created=2022-03-29+22%3A38%3A08&partner_id=250305&check=66b522b5749bfe713ac089a55a013725&resultStr=%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D1%8F+%D0%BE%D0%BF%D0%BB%D0%B0%D1%87%D0%B5%D0%BD%D0%B0+%D1%87%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%BD%D0%BE&name=Acquiring+lifepay+00000015&system_income=75.0&income_total=75.0&partner_income=63.75&version=1.0&command=process&income=75.0&tid=491789584&service_id=87875&type=ipsp_test_cards_01&email=awa77%40mail.ru'
params = parse_qs(qs)
pp = pprint.PrettyPrinter()
pp.pprint(params)
values = []
for i in params_list:
values.append(params.get(i, [''])[0])
md5_str = ''.join(values)
md5_str += secretkey
print(md5_str)
md5 = hashlib.md5(md5_str.encode('UTF-8')).hexdigest()
print('Рассчитанный MD5', md5)
print('MD5 полученный в нотификации',params['check'][0]) |
Для рекуррентных платежей добавляются два поля card и recurrent_order_id и строка для подписи формируется следующим образом:
tid + name + comment + partner_id + service_id + order_id + type + cost + income_total + income + partner_income + system_income + command + phone_number + email + resultStr + date_created + version +card + recurrent_order_id + secret_key