Wallet One Merchant Recurring Payments API

Введение

Шаг 1. Привязка карты

Дополнительные поля в уведомлении

Шаг 2. Проведение рекуррентных платежей

Параметры запросов

Создание счета

Подтверждение списания средств

Обработка ошибок

Примеры ответа с ошибкой

Коды ошибок

Введение

Wallet One Merchant Recurring Payments API — это веб-сервис, который реализует методы, позволяющие интернет-магазину производить списание средств с банковских карт своих плательщиков без повторного запроса ввода реквизитов карты (рекуррентные платежи).

Для использование данного API необходимо согласовать c Wallet One процедуру оповещения плательщиков о проведении рекуррентных платежей и добавить необходимые параметры в платежную форму.

Внимание:

для работы с привязками необходимо наличие цифровой подписи у магазина в настройках кассы.

Шаг 1. Привязка карты

Для работы рекуррентных платежей, плательщику необходимо на платежных страницах 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. Если уведомление не содержит данный параметр, то это означает что что пользователь отказал в привязке карты. Рекуррентные списания по этому клиенту будут недоступны.

Шаг 2. Проведение рекуррентных платежей

Проведение рекуррентных платежей выполняется в два этапа. Сначала создается счет на необходимую сумму, затем выполняется его оплата списанием средств с привязанной карты пользователя. При этом, подтверждением оплаты служит уведомление об оплате счета, отправляемое на 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”

Сосотяние выставленного счета в ответе на создание счета. Может принимать одно из следующих значений:

  • Created — счет успешно создан.
  • Canceled — отменен
  • Accepted — оплачен
  • Expired — вышел срок действия
  • Processing — в процессе подтверждения
  • Received — получен, ожидает принятия
  • Rejected — отвергнут
  • PartiallyPaid — частично оплачен
  • OverPaid — переплачен

Параметр "PaymentState"

Состояние платежа в ответе на запрос подтверждения списания средств. Может принимать одно из следующих состояний:

  • Paid — списание произошло успешно.
  • Error — произошла ошибка
  • Created — создан, оплата не поступала
  • Processing — в обработке

Параметр “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
/{paymentId}/process

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

Ошибка авторизации