Wallet One Merchant Recurring Payments API
Дополнительные поля в уведомлении
Шаг 2. Проведение рекуррентных платежей
Подтверждение списания средств
Wallet One Merchant Recurring Payments API — это веб-сервис, который реализует методы, позволяющие интернет-магазину производить списание средств с банковских карт своих плательщиков без повторного запроса ввода реквизитов карты (рекуррентные платежи).
Для использование данного API необходимо согласовать c Wallet One процедуру оповещения плательщиков о проведении рекуррентных платежей и добавить необходимые параметры в платежную форму.
Внимание:
для работы с привязками необходимо наличие цифровой подписи у магазина в настройках кассы.
Для работы рекуррентных платежей, плательщику необходимо на платежных страницах Wallet One указать реквизиты карты, согласиться с офертой мерчанта и разрешить проведение рекуррентных платежей.
Для того, чтобы плательщику было предложено сохранить реквизиты карты для выполнения рекуррентных платежей, интернет-магазину при формировании платежной формы необходимо дополнительно передавать следующие параметры:
Название параметра | Описание |
WMI_CUSTOMER_ID | Уникальный идентификатор плательщика в системе учета интернет магазина (обязательный параметр). Используется для привязки карт, к пользователю интернет-магазина. |
WMI_RECURRING_AGREEMENT_URL | Ссылка на страницу сайта мерчанта, на которой опубликована оферта с условиями проведения рекуррентных платежей. Условия должны в обязательном порядке включать: суммы платежей, период платежей, а также информацию о порядке отказа от подписки. |
WMI_CUSTOMER_PHONE | Номер телефона плательщика (необязательный параметр). Если не будет передан, на платежной странице появится обязательное поле “Номер телефона”. |
WMI_CUSTOMER_EMAIL | E-mail плательщика (необязательный параметр). Если не будет передан, на платежной странице появится обязательное поле “Email”. |
WMI_BINDING_CARD_ENABLED | Признак допустимости привязки карт в интерфейсе, необходимо передавать значение "1" |
WMI_ALLOW_UNCONFIRMED_PAYMENT | Необходимо передавать "1" для появления галочки на форме "Разрешить выполнять рекуррентные платежи" |
В случае успешной привязки, в уведомлении об оплате счета поступит дополнительный параметр WMI_RECURRING_PAYMENTS_APPROVED = 1. Это значит, что в будущем, мерчант может списывать средства с клиента, без его присутствия, через вызовы API. Если уведомление не содержит данный параметр, то это означает что что пользователь отказал в привязке карты. Рекуррентные списания по этому клиенту будут недоступны.
Проведение рекуррентных платежей выполняется в два этапа. Сначала создается счет на необходимую сумму, затем выполняется его оплата списанием средств с привязанной карты пользователя. При этом, подтверждением оплаты служит уведомление об оплате счета, отправляемое на ResultUrl вашего интернет-магазина, как при оплате других счетов.
Название параметра | Описание |
Загловок “X-Wallet-UserId” | Идентификатор (номер кошелька) интернет-магазина, полученный при регистрации. Эквивалент WMI_MERCHANT_ID |
Загловок “X-Wallet-Timestamp” | Дата и время формирования запроса в формате YYYY-MM-DDTHH:MM:SS и часовом поясе UTC+0. Должен совпадать с значением используемым при формировании заголовка X-Wallet-Signature и не отличаться более чем на 5 минут от текущего времени на сервере Wallet One. |
Загловок “X-Wallet-Signature” | Цифровая подпись запроса формируется путем конкатенации URL, на который отправляется запрос, значения заголовка X-Wallet-UserId, значения заголовка X-Wallet-Timestamp, тела запроса и секретного ключа магазина. Полученная строка, представленная в кодировке UTF-8, подписывается с помощью выбранного алгоритма ЭЦП, после чего байтовое представление подписи кодируется в Base64: Signature = Base64(SignatureMethod(UTF8( URL + X-Wallet-UserId + X-Wallet-Timestamp + RequestBody + SecretKey))); |
Параметр “Amount” | Сумма заказа — число округленное до 2-х знаков после «запятой», в качестве разделителя используется «точка». Наличие 2-х знаков после «запятой» обязательно. |
Параметр “CurrencyId” | Идентификатор валюты (ISO 4217). |
Параметр “PaymentTypeId” | Идентификатор способа оплаты, для банковских карт должен иметь значение “CreditCardRUB”. |
Параметр “OrderId” | Идентификатор заказа в системе учета интернет-магазина. Значение данного параметра должно быть уникальным для каждого заказа. Эквивалент WMI_PAYMENT_NO. |
Параметр “InvoiceStateId” | Сосотяние выставленного счета в ответе на создание счета. Может принимать одно из следующих значений:
|
Параметр "PaymentState" | Состояние платежа в ответе на запрос подтверждения списания средств. Может принимать одно из следующих состояний:
|
Параметр “UseSavedAuthData” | Использовать ли последнюю сохраненную карту, для рекурентных платежей, следует передавать всегда “true”. |
Параметр “CreditCardTerminal” | Идентификатор используемого термнала, для рекурентных платежей, средует передавать всегда “Non3Ds” |
Пример запроса:
POST https://wl.walletone.com/checkout/invoicingapi/invoices Content-Type: application/json; charset=utf-8 X-Wallet-UserId: 119973638979 X-Wallet-Signature: 0J7Qv9C70LDRgtCwINC30LDQutCw0LfQsA== X-Wallet-Timestamp: 2015-01-07T21:45:33 |
{ "Amount":2.91, "CurrencyId":643, "PaymentTypeId":"CreditCardRUB", "OrderId":"GQYOE-MJNPO-49623", "InvoiceAdditionalParams": { //Дополнительные параметры заказа, которые будут //переданы в callback уведомлении "MyShopParam1":"Value1" } } |
Ответ:
{ "Invoice": { "InvoiceId":341234567891 "Amount":2.19, "CurrencyId":643, "InvoiceStateId":"Created", "CreateDate":"2014-06-10T09:54:05.033", "UpdateDate":"2014-06-10T09:54:05.033", "Payment": { "PaymentId":123456, "PaymentCode":"341234567891, "PaymentCodeType":"InvoiceId" "CreateDate":"2014-06-10T09:54:05.033", "UpdateDate":"2014-06-10T09:54:05.033", "PaymentState":"Created" "PaymentTypeId":"CreditCardRUB", } } "CanSaveAsExternalAccount":true } |
POST https://wl.walletone.com/checkout/invoicingapi/payments Content-type: application/json; charset=utf-8 X-Wallet-UserId: 119973638979 X-Wallet-Signature: 0J7Qv9C70LDRgtCwINC30LDQutCw0LfQsA== X-Wallet-Timestamp: 2015-01-07T21:45:33 |
{ "CustomerId":"123456", "UseSavedAuthData":true, "CreditCardTerminal":Non3Ds, } |
Пример ответа:
{ "Payment": { "PaymentId":123456, "Amount":2.91, "CurrencyId":643, "PaymentState":"Paid", "CreateDate":"2014-06-10T09:54:05.033", "UpdateDate":"2014-06-10T09:54:05.033", "PaymentTypeId":"CreditCardRUB", "PaymentCode":"341234567891, "PaymentCodeType":"InvoiceId" "ExternalAccountId":245498 } } |
Ошибки возвращаются в HTTP-статусе кодом 4xx и 5xx, согласно RFC 2616.
Ответ с ошибкой может включать тело со следующими полями:
Поле | Описание |
Error | Код ошибки. |
ErrorDescription | Описание ошибки. |
HTTP/1.1 401 Unauthorized |
{"Error":"AUTHORIZATION_ERROR","ErrorDescription":"expected X-Wallet-Signature header"} |
HTTP/1.1 500 InternalServerError X-Wallet-Timestamp: 2016-05-16T03:12:44 X-Wallet-Signature: 8UkhDaIi3s+JHPhAOss80A== |
{"Error":"INSUFFICIENT_BALANCE_ERROR","ErrorDescription":"На карте недостаточно средств для проведения платежа"} |
Код ошибки | Описание | Комментарий |
INTERNAL_SERVER_ERROR | Внутренняя ошибка сервера. | При возникновении ошибки данного типа подробности нужно уточнять у технической поддержки WalletOne |
SERVER_ERROR | Внешняя ошибка | Возникает при взаимодействии с платежным шлюзом. Пример - сетевая ошибка |
ARGUMENT_ERROR | Неверные параметры запроса | Пример - выбранный способ оплаты требует наличия Email, который не был передан. |
ERROR_OF_PAYMENT_TOOL | Ошибка платежного инструмента | Пример - неверный номер карты или номер телефона. |
SUSPECTED_FRAUD | Подозрение на мошеничество | |
INSUFFICIENT_BALANCE_ERROR | Недостаточно средств | На балансе плательщика отсутствует достаточное количество средств для оплаты счета |
OPERATION_LIMIT_EXCEED | Лимит операции | Может возникать при превышении допустимого количества операций, суммы операций либо некоторых внутренних ограничений. |
AUTHORIZATION_ERROR | Ошибка авторизации |