Метод request-payment
Создание платежа, проверка параметров и возможности приема платежа магазином или перевода средств на счет пользователя ЮMoney.
- для платежа в магазин:
payment.to-pattern(«шаблон платежа») илиpayment-shop. - для перевода средств на счета других пользователей:
payment.to-account(«идентификатор получателя», «тип идентификатора») илиpayment-p2p.
Запрос
Платеж в магазин
Параметры для платежа в магазин уточняются контрагентом при подключении через ЮKassa. Дополнительная информация о параметрах платежа описана в протоколе приема платежей для магазинов.
| Параметр | Тип | Описание |
|---|---|---|
| pattern_id | string | Идентификатор шаблона платежа. Соответствует номеру витрины scid магазина. |
* | string | Параметры шаблона платежа, требуемые магазином. |
Перевод средств на счета других пользователей
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
| pattern_id | string | Фиксированное значение: p2p. |
| to | string | Идентификатор получателя перевода (номер счета, номер телефона или email). |
| amount | amount | Сумма к оплате (столько заплатит отправитель). |
| amount_due | amount | Сумма к получению (придет на счет получателя после оплаты). |
| comment | string | Комментарий к переводу, отображается в истории отправителя. |
| message | string | Комментарий к переводу, отображается получателю. |
| label | string | Метка платежа. Необязательный параметр. |
Пример запроса при переводе средств на счет другого пользователя
POST /api/request-payment HTTP/1.1 Host: yoomoney.ru Authorization: Bearer 410012345678901.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123 Content-Type: application/x-www-form-urlencoded Content-Length: 234 pattern_id=p2p&to=41001101140&amount=1000.00&message=%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%B0&comment=%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8E
Пример запроса при переводе средств на счет другого пользователя по номеру привязанного телефона
POST /api/request-payment HTTP/1.1 Host: yoomoney.ru Authorization: Bearer 410012345678901.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123 Content-Type: application/x-www-form-urlencoded Content-Length: 256 pattern_id=p2p&to=79219990099&identifier_type=phone&amount=1000.00&message=%d0%97%d0%b0+%d0%b2%d0%ba%d1%83%d1%81%d0%bd%d1%8b%d0%b9+%d0%b1%d1%83%d0%b1%d0%bb%d0%b8%d0%ba&comment=%d0%ba%d1%83%d0%bf%d0%b8%d1%82%d0%b5+%d0%b1%d1%83%d0%b1%d0%bb%d0%b8%d0%ba%d0%b8!
Комиссия за перевод
Сумма перевода зачисляется получателю за вычетом комиссии за перевод. Отправитель перевода может указать только один из параметров:
amount— сумма, которую заплатит отправитель (с учетом комиссии сервиса);amount_due— сумма к получению, которая будет зачислена на счет получателя.
После отправки
request-payment можно показывать пользователю комиссию за платеж. В ответе на запрос придет contract_amount, для расчета комиссии подставьте его в формулу:Комиссия = contract_amount - amount_due
Комиссия округляется математически до копеек (2 знака после запятой). Комиссия меньше копейки всегда округляется в большую сторону — до 1 копейки.
Метка платежа
Любому переводу можно присвоить метку платежа —
label. Метка платежа — это некоторый идентификатор, присваиваемый приложением.Впоследствии можно выбрать из истории переводы по указанной метке. Например, в качестве метки платежа можно указывать код или идентификатор некой сущности в приложении. Допустимо использовать значения длиной до 64 символов. Значение метки чувствительно к регистру символов.
Ответ
Метод возвращает следующие параметры:
| Параметр | Тип | Описание |
|---|---|---|
status | string | Код результата выполнения операции. Возможные значения:
|
| error | string | Код ошибки при проведении платежа (пояснение к полю status). Присутствует только при ошибках. |
| money_source | object | Доступные для приложения методы проведения платежа, см. Доступные методы платежа. Присутствует только при успешном выполнении метода. |
| request_id | string | Идентификатор запроса платежа. Присутствует только при успешном выполнении метода. |
| contract_amount | amount | Сумма к списанию со счета в валюте счета плательщика (столько заплатит пользователь вместе с комиссией). Присутствует при успешном выполнении метода или ошибке not_enough_funds. |
balance | amount | Текущий баланс счета пользователя. Присутствует при выполнении следующих условий:
|
recipient_account_status | string | Статус пользователя. Возможные значения:
|
| recipient_account_type | string | Тип счета получателя. Параметр присутствует при успешном выполнении метода в случае перевода средств на счет в ЮMoney другого пользователя. |
| account_unblock_uri | string | Адрес, на который необходимо отправить пользователя для разблокировки счета. Поле присутствует в случае ошибки account_blocked. |
| ext_action_uri | string | Адрес, на который необходимо отправить пользователя для совершения необходимых действий в случае ошибки ext_action_required. |
При выполнении запроса ЮMoney, как правило, связываются с сервером магазина, поэтому время ответа метода может составлять до 30 секунд. Во время работы метода
request-payment приложение должно показывать пользователю сообщение о том, что приложение ожидает ответа от магазина.Успешное выполнение метода
request-payment не является гарантией успешного завершения процесса платежа, так как авторизация платежа выполняется при вызове метода process-payment.Доступные методы платежа
Поле ответа
money_source содержит список доступных методов для проведения данного платежа. Каждый метод содержит набор атрибутов.Если для данного платежа невозможен ни один из нижеописанных методов, поле
money_source будет пустым.Возможные методы проведения платежа:
wallet— платеж со счета пользователя;cards— платеж с банковских карт, привязанных к счету.
Атрибуты метода платежа со счета пользователя:
| Атрибут | Тип | Описание |
|---|---|---|
| allowed | boolean | Признак того, что данный метод платежа разрешен пользователем. |
Атрибуты метода платежа с банковской карты:
| Атрибут | Тип | Описание |
|---|---|---|
| allowed | boolean | Признак того, что данный метод платежа разрешен пользователем. |
| csc_required | boolean | Признак необходимости требования CVV2/CVC2 кода для авторизации оплаты по банковской карте. |
| item | object | Описание банковской карты, привязанной к счету. |
Параметры описания банковской карты:
| Атрибут | Тип | Описание |
|---|---|---|
| id | string | Идентификатор привязанной к счету банковской карты. Его необходимо указать в методе process-payment для совершения платежа выбранной картой. |
| pan_fragment | string | Фрагмент номера банковской карты. Поле присутствует только для привязанной банковской карты. Может отсутствовать, если неизвестен. |
type | string | Тип карты. Может отсутствовать, если неизвестен. Возможные значения:
|
Если метод платежа доступен для данного магазина и разрешен пользователем, то в ответе будет присутствовать и название метода, и признак разрешения пользователем. Например:
"wallet": {
"allowed": true
},
"cards": {
"allowed": true,
"csc_required": true,
"items": [
{
"id": "card-385244400",
"pan_fragment": "5280****7918",
"type": "MasterCard"
},
{
"id": "card-385244401",
"pan_fragment": "4008****7919",
"type": "Visa"
}
]
}
Если метод доступен, но не разрешен пользователем, то в ответе будет присутствовать название метода и признак отсутствия разрешения пользователя. Например:
"wallet": {
"allowed": false
},
"cards": {
"allowed": false
}
Приложение может запросить дополнительные права для осуществления платежей. Запрос дополнительных прав производится как повторная авторизация приложения пользователем.
Данные о получателе перевода
При запросе перевода на счет другого пользователя метод
request-payment возвращает следующие поля:| Код | Описание |
|---|---|
recipient_account_status | Статус пользователя. Возможные значения:
|
recipient_account_type | Тип счета получателя. Возможные значения:
|
Пример ответа при успешном выполнении
JSON
{ "status": "success", "wallet": { "allowed": true }, "cards": { "allowed": true, "csc_required": true, "items": [ { "id": "card-385244400", "pan_fragment": "5280****7918", "type": "MasterCard" }, { "id": "card-385244401", "pan_fragment": "4008****7919", "type": "Visa" } ] }, "request_id": "1234567", "contract": "Оплата услуг ОАО Суперфон Поволжъе, номер +7-9xx-xxx-xx-xx, сумма 300.00 руб.", "balance": 1000.00 }
Коды ошибок
В случае ошибки выполнения операции возвращается ее код:
| Код | Описание |
|---|---|
| illegal_params | Обязательные параметры платежа отсутствуют или имеют недопустимые значения. |
| illegal_param_label | Недопустимое значение параметра label. |
| illegal_param_to | Недопустимое значение параметра to. |
| illegal_param_amount | Недопустимое значение параметра amount. |
| illegal_param_amount_due | Недопустимое значение параметра amount_due. |
| illegal_param_comment | Недопустимое значение параметра comment. |
| illegal_param_message | Недопустимое значение параметра message. |
| not_enough_funds | На счете плательщика недостаточно средств. Необходимо пополнить счет и провести новый платеж. |
| payment_refused | Магазин отказал в приеме платежа (например, пользователь попробовал заплатить за товар, которого нет в магазине). |
| payee_not_found | Получатель перевода не найден. Указанный счет не существует или указан номер телефона/email, не связанный со счетом пользователя или получателя платежа. |
authorization_reject | В авторизации платежа отказано. Возможные причины:
|
limit_exceeded | Превышен один из лимитов на операции:
|
| account_blocked | Счет пользователя заблокирован. Для разблокировки счета необходимо отправить пользователя по адресу, указанному в поле account_unblock_uri. |
| account_closed | Счет пользователя закрыт. |
ext_action_required | В настоящее время данный тип платежа не может быть проведен. Для получения возможности проведения таких платежей пользователю необходимо перейти на страницу по адресу ext_action_uri и следовать инструкции на данной странице. Это могут быть следующие действия:
|
| все прочие значения | Техническая ошибка, повторите вызов операции позднее. |
Пример ответа при отказе
JSON
{ "status": "refused", "error": "payment_refused", "error_description": "Абонент не существует" }
Что почитать еще