Спецификации
Структура уведомления
Запрос POST выполняется для каждого события на указанные вами адреса. Передаются 2 параметра:
- data - кодированные данные о событии.
- sign - кодированная подпись параметра data.
Чтобы обработать полученное уведомление, вам необходимо проверить действительность параметраsign, затем декодировать параметр data.
Оба параметра кодируется методом кодирования base64.
После кодировки символ + mзаменяется на - , символ / заменяется на
_. Для декодирования параметров необходимо применить обратные действия:
-
Символ
-заменяется на+, символ_заменяется на/; - Декодирование производится методом 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';
}
Значения, использованные в примере
QRRnBKqW5agE8_xYxG-E-72lDj0q8M16Tcof-1LvzXCl_vY_rkCBkevy5y4V4UlwyC3vYwuPAVqZDzQtxvl6svlLpG7Lhl55MzOPNajOokzNza5LTiMLX77XuRyVd1JWxqIoWi9NmXrvJizoQwFJXSqDai7cULX0LSEHL5dSQIsZST27jBFVrRUbuGQO1d67eRuSh_s6ybqnbGH--Ti_xdhkhZNOVn2pHFvhNtSNp0iFdcHMEELIMpkCe-07ouO9cvGGmXUXSiMlLyrfJZ-kpaAvTC_GDzq5crE0hXFp-OkkAinAWun0-LmZOEZsYFUbBv8xQ8YuNI5-11wwS2W33g==
QRRnBKqW5agE8/xYxG+E+72lDj0q8M16Tcof+1LvzXCl/vY/rkCBkevy5y4V4UlwyC3vYwuPAVqZDzQtxvl6svlLpG7Lhl55MzOPNajOokzNza5LTiMLX77XuRyVd1JWxqIoWi9NmXrvJizoQwFJXSqDai7cULX0LSEHL5dSQIsZST27jBFVrRUbuGQO1d67eRuSh/s6ybqnbGH++Ti/xdhkhZNOVn2pHFvhNtSNp0iFdcHMEELIMpkCe+07ouO9cvGGmXUXSiMlLyrfJZ+kpaAvTC/GDzq5crE0hXFp+OkkAinAWun0+LmZOEZsYFUbBv8xQ8YuNI5+11wwS2W33g==
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·Þ
dHlwZT1NSyZjcmVkaXQ9MSZhY2NvdW50PUVWUDAwMDAwMDAwMDAwMDEmYW1vdW50PTIzLjA5JmN1cnJlbmN5PUVVUiZwYXllcl9hY2NvdW50PUVWUDAwMDAwMDAwMDAwMDImZGV0YWlscz1EZXRhaWxzJnRyYW5zZmVyX2lkPTk5OTk5OTk5JnN0YXRlbWVudF9pZD0xMjM0NTY3ODk=
dHlwZT1NSyZjcmVkaXQ9MSZhY2NvdW50PUVWUDAwMDAwMDAwMDAwMDEmYW1vdW50PTIzLjA5JmN1cnJlbmN5PUVVUiZwYXllcl9hY2NvdW50PUVWUDAwMDAwMDAwMDAwMDImZGV0YWlscz1EZXRhaWxzJnRyYW5zZmVyX2lkPTk5OTk5OTk5JnN0YXRlbWVudF9pZD0xMjM0NTY3ODk=
type=MK&credit=1&account=EVP0000000000001&amount=23.09¤cy=EUR&payer_account=EVP0000000000002&details=Details&transfer_id=99999999&statement_id=123456789
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".
MK - Платеж
HO - Пополнение счета
FX - Конвертация валюты
MM - Другая операция
1 входящие средства, 0 исходящие. Не отображается при конвертации валюты
Bажно. Убедитесь, что сообщение не было получено до этого, сохраните этот номер