Обработчик платежа

По мере выполнения платежа мы уведомляем платформу магазина о статусе оплаты, последовательно отправляя GET запросы на URL обработчика.

Важно: домен в обработчике платежей должен полностью совпадать с тем, который вы добавляете к нам в систему в качестве проекта

Методы

CHECK: проверка возможности оказания услуги абоненту, запрос отправляется до прохождения оплаты. Вы должны подтвердить готовность системы (проверить корректность суммы платежа, существование счета в БД и т. д.)

PAY: уведомление об успешном списании, вы должны оказать услугу абоненту. При любой ошибке на данном этапе (например, не доступна БД) платеж получает статус «Не завершен». После устранения проблем вы можете повторно провести платеж в интерфейсе статистики. Деньги зачисляются на баланс партнера независимо от ответа обработчика

PREAUTH: уведомление в платежах с преавторизацией, когда средства успешно заблокированы. Важно! Не следует оказывать услугу или выдавать товар плательщику при получении такого уведомления. Списание средств и оказание услуги следует совершать при выполнении confirmPayment

ERROR: ошибка платежа на любом из этапов. Если ошибка вызвана пустым/ошибочным ответом сервера партнера, то запрос отправлен не будет. Следует учесть, что данный статус не конечный и возможны ситуации, когда после запроса ERROR может последовать запрос PAYhttp://адрес_вашего_обработчика? method=check params[account]=userId params[date]=2012-10-01 12:32:00 params[operator]=beeline params[paymentType]=mc params[projectId]=1 params[phone]=9XXXXXXXXX params[payerSum]=10.00 params[payerCurrency]=RUB params[signature]=9bdf52a4830779a1383ac24f1b3ed054 params[orderSum]=10.00 params[orderCurrency]=RUB params[unitpayId]=1234567 params[test]=0

Значение

Описание

method

строка

check — запрос на проверку состояния абонента pay — уведомление о списании error — уведомление об ошибке

unitpayId

число

Внутренний номер платежа в UnitPay

projectId

число

ID проекта в UnitPay

account

строка

Идентификатор абонента в системе партнера

payerSum

число

Сумма списания с лицевого счета абонента

payerCurrency

строка

Валюта списания с лицевого счета абонента по стандарту ISO 4217 (RUB, UAH, BYN, EUR, USD)

profit

число

Ваш доход с данного платежа, в рублях

phone

число

Телефон плательщика (передается только для мобильных платежей)

paymentType

строка

Код платежной системы

orderSum

число

Сумма заказа. Обязательно сверяйте поступившее значение с оригинальной суммой заказа

orderCurrency

строка

Валюта заказа по стандарту ISO 4217 (RUB, UAH, BYN, EUR, USD). Обязательно сверяйте поступившее значение с оригинальной валютой заказа

operator

строка

Буквенный код оператора

date

строка

Дата платежа в формате YYYY-mm-dd HH:ii:ss (например 2012-10-01 12:32:00)

errorMessage

строка

Детализация ошибки (только для метода error)

test

число

Признак тестового режима, если запрос делается с использованием механизма "тестового запроса", то значение будет равно 1. Для реальных платежей значение всегда 0

3ds

число

Признак наличия 3-DS для операций по карте, флаг присутствует при PAY уведомлениях

subscriptionId

число

Идентификатор подписки, возвращается после успешной оплаты установочного платежа по подписке. Присутствует при PREAUTH и PAY уведомлениях

signature

строка

Цифровая подпись. Образуется как sha256(method + "{up}" + params + "{up}" + secretKey), где sha256 - метод шифрования; "{up}" - разделитель параметров в хеш-функции; method - тип вызова (check, pay, error); params - значения параметров из массива params, объединенные разделителем "{up}". Все параметры должны быть предварительно отсортированы по ключу, в склейке не участвуют параметры sign и signature; secretKey - секретный ключ проекта (доступен в личном кабинете); Пример расчета подписи для запроса http://partnerUrl?method=check & params[b]=bob & params[c]=sam & params[a]=todи секретного ключа "a1b1c1d1" sha256("check{up}tod{up}bob{up}sam{up}a1b1c1d1")

Пример формирования цифровой подписи на PHP:

1function getSignature($method, array $params, $secretKey) {2 ksort($params);3 unset($params['sign']);4 unset($params['signature']);5 array_push($params, $secretKey);6 array_unshift($params, $method);7 return hash('sha256', join('{up}', $params));8}9

Пример формирования цифровой подписи на Perl:

1sub getSignature {2 my ($method, $params, $secretKey) = @_;3 delete $params->{sign};4 delete $params->{signature};5 my $s = $method;6 foreach my $key (sort keys %{$params}) {7 $s .= '{up}' . $params->{$key};8 }9 $s .= '{up}' . $secretKey;10 use Digest::SHA qw(sha256_hex);11 return sha256_hex($s);12}13

Всегда проверяйте IP адреса, с которых приходят запросы к обработчику платежейВАЖНО: в системе партнера не должно быть двух разных платежей с одним unitpayId. При получении повторного запроса CHECK или PAY необходимо вернуть результат выполнения предыдущего запроса, ничего не пополняя/зачисляя

Успешный ответ

1{"result": {2 "message": "Запрос успешно обработан"3}}4

Значение

Описание

message

строка

Текстовый статус выполнения запроса.

Ошибочный ответ

1{"error": {2 "message": "Описание ошибки"3}}4

Значение

Описание

message

строка

Информация с описанием ошибки формирования платежа.

В случае ошибок, при использовании формы оплаты текст из параметра "message" будет показан клиентуВАЖНО: на этапе PAY при любой ошибке (например нет доступа к БД) платеж получит статус «не завершен». После устранения проблем повторите платеж в статистике.