Структура уведомления

Запрос POST выполняется для каждого события на указанные вами адреса. Передаются 2 параметра:

  • data - кодированные данные о событии.
  • sign - кодированная подпись параметра data.

Чтобы обработать полученное уведомление, вам необходимо проверить действительность параметраsign, затем декодировать параметр data.

Оба параметра кодируется методом кодирования base64.

После кодировки символ + mзаменяется на - , символ / заменяется на _. Для декодирования параметров необходимо применить обратные действия:

  1. Символ - заменяется на +, символ _ заменяется на /;
  2. Декодирование производится методом base64.

Подпись параметра data осуществляется ключом RSA с помощью алгоритма хеширования SHA1. Сертификат, соответствующий ключу для подписи, можно скачать по этой ссылке:

https://www.paysera.com/download/public.key

Перед кодированием в формате base64 и заменой специальных символов данные о событии кодируются в формате "application/x-www-form-urlencoded". Для получения массива данных используйте декодирование формата "application/x-www-form-urlencoded".

Пример обработки уведомления на языке PHP:

<?php

$publicKey = loadFromWeb();
$sign = $_POST['sign'];
$data = $_POST['data'];

$signReplaced = strtr($sign, array('-' => '+', '_' => '/'));
$signDecoded = base64_decode($signReplaced);

if (openssl_verify($data, $signDecoded, $publicKey, OPENSSL_ALGO_SHA1) === 1) {
    $dataReplaced = strtr($data, array('-' => '+', '_' => '/'));
    $dataDecoded = base64_decode($dataReplaced);
    parse_str($dataDecoded, $params);

    // use $params

    echo 'OK';
}
Информация Если вы используете язык PHP, воспользуйтесь предоставленной библиотекой, которая выполняет декодирование а втоматически.
Информация В случае успешной обработки скрипт Callback должен начинаться или быть равным 'OK'.

Значения, использованные в примере

Parameter
Example
$sign
QRRnBKqW5agE8_xYxG-E-72lDj0q8M16Tcof-1LvzXCl_vY_rkCBkevy5y4V4UlwyC3vYwuPAVqZDzQtxvl6svlLpG7Lhl55MzOPNajOokzNza5LTiMLX77XuRyVd1JWxqIoWi9NmXrvJizoQwFJXSqDai7cULX0LSEHL5dSQIsZST27jBFVrRUbuGQO1d67eRuSh_s6ybqnbGH--Ti_xdhkhZNOVn2pHFvhNtSNp0iFdcHMEELIMpkCe-07ouO9cvGGmXUXSiMlLyrfJZ-kpaAvTC_GDzq5crE0hXFp-OkkAinAWun0-LmZOEZsYFUbBv8xQ8YuNI5-11wwS2W33g==
$signReplaced
QRRnBKqW5agE8/xYxG+E+72lDj0q8M16Tcof+1LvzXCl/vY/rkCBkevy5y4V4UlwyC3vYwuPAVqZDzQtxvl6svlLpG7Lhl55MzOPNajOokzNza5LTiMLX77XuRyVd1JWxqIoWi9NmXrvJizoQwFJXSqDai7cULX0LSEHL5dSQIsZST27jBFVrRUbuGQO1d67eRuSh/s6ybqnbGH++Ti/xdhkhZNOVn2pHFvhNtSNp0iFdcHMEELIMpkCe+07ouO9cvGGmXUXSiMlLyrfJZ+kpaAvTC/GDzq5crE0hXFp+OkkAinAWun0+LmZOEZsYFUbBv8xQ8YuNI5+11wwS2W33g==
$signDecoded
Agªâ€“å¨óüXÄo„û½¥=*ðÍzMÊûRïÍp¥þö?®@‘ëòç.áIpÈ-ïcZâ„¢4-Æùz²ùK¤nˆ^y335¨Î¢LÍÍ®KN#_¾×¹•wRVÆ¢(Z/Mâ„¢zï&,èCI]*Æ’j.ÜPµô-!/—R@‹I=»Å’U­¸dÕÞ»y’‡û:ɺ§laþù8¿ÅØd…“NV}©[á6ԍ§H…uÁÌBÈ2â„¢{í;¢ã½rñ†™uJ#%/*ß%Ÿ¤¥ /L/Æ:¹r±4…qiøé$)ÀZéôø¹â„¢8Fl`Uÿ1CÆ.4Ž~×Ke·Þ
$data
dHlwZT1NSyZjcmVkaXQ9MSZhY2NvdW50PUVWUDAwMDAwMDAwMDAwMDEmYW1vdW50PTIzLjA5JmN1cnJlbmN5PUVVUiZwYXllcl9hY2NvdW50PUVWUDAwMDAwMDAwMDAwMDImZGV0YWlscz1EZXRhaWxzJnRyYW5zZmVyX2lkPTk5OTk5OTk5JnN0YXRlbWVudF9pZD0xMjM0NTY3ODk=
$dataReplaced
dHlwZT1NSyZjcmVkaXQ9MSZhY2NvdW50PUVWUDAwMDAwMDAwMDAwMDEmYW1vdW50PTIzLjA5JmN1cnJlbmN5PUVVUiZwYXllcl9hY2NvdW50PUVWUDAwMDAwMDAwMDAwMDImZGV0YWlscz1EZXRhaWxzJnRyYW5zZmVyX2lkPTk5OTk5OTk5JnN0YXRlbWVudF9pZD0xMjM0NTY3ODk=
$dataDecoded
type=MK&credit=1&account=EVP0000000000001&amount=23.09&currency=EUR&payer_account=EVP0000000000002&details=Details&transfer_id=99999999&statement_id=123456789
$params
array(8) {
    ["type"]=>
    string(2) "MK"
    ["credit"]=>
    string(1) "1"
    ["account"]=>
    string(16) "EVP0000000000001"
    ["amount"]=>
    string(5) "23.09"
    ["currency"]=>
    string(3) "EUR"
    ["payer_account"]=>
    string(16) "EVP0000000000002"
    ["details"]=>
    string(7) "Details"
    ["transfer_id"]=>
    string(8) "99999999"
    ["statement_id"]=>
    string(9) "123456789"
}

Параметры события

После проверки подписи и декодирования параметра data, вы получите информацию о событии. Если хотя бы один из параметров пуст, он не будет включен в ряд символов, кодированных в формате "application/x-www-form-urlencoded".

Название параметра
Значение
Пример
type
Идентификаторы типов:
MK - Платеж
HO - Пополнение счета
FX - Конвертация валюты
MM - Другая операция
MK
credit
1 входящие средства, 0 исходящие. Не отображается при конвертации валюты
1
account
Номер счета. Является предметом события
EVP0000000000001
amount
Сумма входящих/исходящих средств. Всегда положительное значение. Десятая часть отделяется точкой (“.”) Не отображается в случае конвертации валюты
29.99
currency
Валюта перевода. Всегда отображается с параметром amount
EUR
from_amount
Отображается только в случае конвертации валюты. Сумма исходящих средств
10.00
from_currency
Всегда отображается с параметром from_amount
EUR
to_amount
Отображается при конвертации валюты. Сумма входящих средств
34.54
to_currency
Всегда отображается с параметром to_amount
EUR
beneficiary_name
Только для исходящих переводов. Имя получателя средств. Не отображается, если неизвестно
John Smith
beneficiary_code
Только для исходящих переводов. Код получателя средств (физического или юридического лица). Не отображается, если неизвестен
38001010000
beneficiary_account
Только для исходящих переводов. Номер счета получателя средств
LT001100000111100000
payer_name
Только для входящих платежей. Имя плательщика. Не отображается, если неизвестно
John Smith
payer_code
Только для входящих платежей. Код плательщика (физического или юридического лица). Не отображается, если неизвестен
38001010000
payer_account
Только для входящих платежей. Номер счета плательщика. Не отображается, если неизвестен
LT001100000111100000
details
Информация перевода
Payment for request no. 123456
transfer_id
Уникальный идентификатор перевода в нашей системе
123456
reference_number
Код платежа. Не отображается, если неизвестен
AB12345
reference_to_beneficiary
Код клиента в информационной системе получателя. Не отображается, если неизвестен
AB12345
reference_to_payer
Код клиента в информационной системе плательщика. Не отображается, если неизвестен
AB12345
statement_id
Уникальный идентификатор уведомлений перевода в нашей системе.
Bажно. Убедитесь, что сообщение не было получено до этого, сохраните этот номер
123456789
created_at
Дата создания перевода
1448615390