Уведомление о входящем переводе
Уведомление отправляется, если:
  • пользователю пришел перевод от другого пользователя ЮMoney;
  • пользователю пришло пополнение с банковской карты через универсальную форму или кнопку.
 
Формат запроса
Уведомление отправляется как HTTP-запрос на адрес, указанный в настройках счета, в следующем формате:
  • метод — POST;
  • каждый параметр уведомления указывается парой ключ/значение в виде параметра POST-запроса;
  • MIME-тип — application/x-www-form-urlencoded;
  • кодировка символов — UTF‑8.
ЮMoney делают три попытки доставить уведомление: сразу при получении перевода, затем — через 10 минут, последняя — через час.
Для приема уведомлений рекомендуется использовать протокол HTTPS. Обратите внимание, что получение контактной информации об отправителе в уведомлениях возможно только при использовании этого протокола. При использовании протокола HTTP контактные данные в уведомлении передаваться не будут.
Если уведомления не приходят, проверьте настройки: правильно ли указан адрес вашего сервера и доступен ли сервер сейчас (используйте кнопку Протестировать). При этом запись о входящем переводе сохранится в истории кошелька (при отправке тестовых уведомлений запись в истории не сохраняется).
Параметры уведомления
ПараметрТипОписание
notification_typestring
Для переводов из кошелька —
p2p-incoming
Для переводов с произвольной карты —
card-incoming
.
operation_idstringИдентификатор операции в истории счета получателя.
amountamountСумма операции.
withdraw_amountamountСумма, которая списана со счета отправителя.
currencystringКод валюты счета пользователя. Всегда
643
(рубль РФ согласно ISO 4217).
datetimedatetimeДата и время совершения перевода.
senderstring
Для переводов из кошелька — номер счета отправителя.
Для переводов с произвольной карты — параметр содержит пустую строку.
codeproboolean
Для переводов из кошелька — перевод защищен кодом протекции.
Для переводов с произвольной карты — всегда
false
.
labelstringМетка платежа. Если метки у платежа нет, параметр содержит пустую строку.
sha1_hashstringSHA-1 hash параметров уведомления.
test_notificationbooleanФлаг означает, что уведомление тестовое. По умолчанию параметр отсутствует.
unacceptedbooleanФлаг означает, что пользователь не получил перевод. Возможные причины: Перевод заморожен, так как на счете получателя достигнут лимит доступного остатка. Отображается в поле
hold
ответа метода account-info. Перевод защищен кодом протекции. В этом случае
codepro=true
.
Только HTTPS
lastnamestringФИО отправителя перевода. Если не запрашивались, параметры содержат пустую строку.
firstnamestring
fathersnamestring
emailstringАдрес электронной почты отправителя перевода. Если email не запрашивался, параметр содержит пустую строку.
phonestringТелефон отправителя перевода. Если телефон не запрашивался, параметр содержит пустую строку.
citystringАдрес, указанный отправителем перевода для доставки. Если адрес не запрашивался, параметры содержат пустую строку.
streetstring
buildingstring
suitestring
flatstring
zipstring
Пример уведомления о переводе с карты с запросом ФИО, адреса отправителя, телефона, электронного адреса и передачей скрытого поля label по протоколу HTTPS
operation_id = 904035776918098009
notification_type = p2p-incoming
datetime = 2014-04-28T16:31:28Z
sha1_hash = 8693ddf402fe5dcc4c4744d466cabada2628148c
sender = 41003188981230
codepro = false
currency = 643
amount = 0.99
withdraw_amount = 1.00
label = YM.label.12345
lastname = Иванов
firstname = Иван
fathersname = Иванович
zip = 125075
city = Москва
street = Тверская
building = 12
suite = 10
flat = 10
phone = +79253332211
email = address@example.ru
Пример того же уведомления при использовании протокола HTTP
operation_id = 904035776918098009
notification_type = p2p-incoming
datetime = 2014-04-28T16:31:28Z
sha1_hash = 8693ddf402fe5dcc4c4744d466cabada2628148c
sender = 41003188981230
codepro = false
currency = 643
amount = 0.99
withdraw_amount = 1.00
label = YM.label.12345
 
Формат ответа
Уведомление считается принятым, если получатель ответил на запрос кодом HTTP 200 OK.
При получении уведомления всегда проверяйте статус входящего перевода по значениям полей
unaccepted
и 
codepro
:
  • Если
    unaccepted=true
    , то перевод еще не зачислен на счет получателя. Чтобы его принять, получателю нужно совершить дополнительные действия. Например, освободить место на счете, если достигнут лимит доступного остатка. Или указать код протекции, если он необходим для получения перевода.
  • Если
    codepro=true
    , то перевод защищен кодом протекции. Чтобы получить такой перевод, пользователю необходимо ввести код протекции.
Чтобы получить остальные параметры платежа, включая «Комментарий к платежу», сделайте вызов operation-details и укажите параметр
operation_id
, который вы получили в уведомлении.
 
Удостоверение подлинности и целостности уведомления
Один из параметров уведомления,
sha1_hash
, содержит значение хэш-функции SHA-1 от свертки параметров уведомления совместно с секретным словом.
Секретное слово для проверки уведомлений используется как разделяемый секрет между ЮMoney и разработчиком приложения. Благодаря этому подделать уведомление невозможно. Секретное слово можно получить в настройках счета.
Всегда проверяйте значение параметра
sha1_hash
. Это нужно, чтобы удостовериться:
  • в целостности данных уведомления;
  • в том, что уведомление отправлено ЮMoney.
Чтобы проверить целостность и подлинность уведомления, рассчитайте хэш по алгоритму, приведенному ниже. Сравните полученные данные со значением параметра
sha1_hash
в уведомлении.
 
Расчет хэша
Шаг 1. Сформировать строку из параметров уведомления в кодировке UTF‑8 (где
notification_secret
— это секретное слово для проверки уведомлений).
Формат строки
notification_type&operation_id&amount&currency&datetime&sender&codepro&notification_secret&label
Пример строки параметров
p2p-incoming&1234567&300.00&643&2011-07-01T09:00:00.000+04:00&41001XXXXXXXX&false&01234567890ABCDEF01234567890&
Пример строки параметров с меткой платежа
p2p-incoming&1234567&300.00&643&2011-07-01T09:00:00.000+04:00&41001XXXXXXXX&false&01234567890ABCDEF01234567890&YM.label.12345
Шаг 2. Вычислить значение хэш-функции SHA-1 от полученной строки.
Шаг 3. Отформатировать полученный результат в HEX-кодированном виде.
Пример рассчитанного значения параметра sha1_hash для последнего примера
a2ee4a9195f4a90e893cff4f62eeba0b662321f9