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

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

CHECK: проверка возможности оказания услуги абоненту, запрос отправляется до прохождения оплаты. Вы должны подтвердить готовность системы (проверить корректность суммы платежа, существование счета в БД и т. д.)
PAY: уведомление об успешном списании, вы должны оказать услугу абоненту. При любой ошибке на данном этапе (например, не доступна БД) платеж получает статус «Незавершен». После устранения проблем вы можете повторно провести платеж в интерфейсе статистики. Деньги зачисляются на баланс партнера независимо от ответа обработчика
ERROR: ошибка платежа на любом из этапов. Если ошибка вызвана пустым/ошибочным ответом сервера партнера, то запрос отправлен не будет. Следует учесть, что данный статус не конечный и возможны ситуации, когда после запроса ERROR может последовать запрос PAY
http://адрес_вашего_обработчика?
     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 число Идентификатор подписки, возвращается после успешной оплаты установочного платежа по подписке. Присутствует при 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:

function getSignature($method, array $params, $secretKey) {
    ksort($params);
    unset($params['sign']);
    unset($params['signature']);
    array_push($params, $secretKey);
    array_unshift($params, $method);
    return hash('sha256', join('{up}', $params));
}
	

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

sub getSignature {
    my ($method, $params, $secretKey) = @_;
    delete $params->{sign};
    delete $params->{signature};
    my $s = $method;
    foreach my $key (sort keys %{$params}) {
        $s .= '{up}' . $params->{$key};
    }
    $s .= '{up}' . $secretKey;
    use Digest::SHA qw(sha256_hex);
    return sha256_hex($s);
}
	
Всегда проверяйте IP адреса, с которых приходят запросы к обработчику платежей
ВАЖНО: в системе партнера не должно быть двух разных платежей с одним unitpayId. При получении повторного запроса CHECK или PAY необходимо вернуть результат выполнения предыдущего запроса, ничего не пополняя/зачисляя

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

{"result": {
	"message": "Запрос успешно обработан"
}}
	
  Значение Описание
message строка Текстовый статус выполнения запроса.

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

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

Нужна помощь? Свяжитесь с нами Свяжитесь с нами