Спецификации
Структура уведомления
Запрос 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ажно. Убедитесь, что сообщение не было получено до этого, сохраните этот номер