# Токенизация
Токенизация используется для целей списания/зачисления на карту без участия пользователя, а также для проверки того, что пользователь имеет доступ к данной карте (списание контрольной суммы, проверка через 3-D Secure).
Для токенизации карты необходимо отправить POST
запрос на отдельный адрес: https://secure.mandarinpay.com/api/card-bindings
.
# Токенизация полных карточных данных
Суть данной операции - авторизация (preauth
) суммы на банковской карте в размере 1 рубля с последующей разблокировкой. Операция проводится с применением технологии 3-D Secure.
После получения успешного callback
-уведомления, токен можно использовать для выплат на сохраненную карту и рекуррентных платежей.
Транзакция осуществляется в асинхронном режиме. В результате запроса вам синхронно придет токен в поле id
, а затем асинхронно придет callback-уведомление со статусом токена.
Полученные в синхронном ответе userWebLink
используйте для работы с платежной страницей, а jsOperationId
для работы через Mandarin Custom Pay.
Параметр | Обязателен | Параметр | Обязателен | |
---|---|---|---|---|
customerInfo | Да | metadata | Нет | |
customerInfo.email | Да | urls | Нет | |
customerInfo.phone | Да | urls.return | Нет | |
urls.callback | Нет |
Синхронный ответ и асинхронное callback-уведомление могут содержать более широкий набор параметров по сравнению с примером.
Запрос
POST https://secure.mandarinpay.com/api/card-bindings
{
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"metadata": {
"first_parameter_to_callback_and_not_to_show": "p1",
"second_parameter_to_callback_and_not_to_show": "p2"
},
"urls": {
"callback": "http://...",
"return": "http://..."
}
}
Ответ в случае успешной токенизации (200 ОК
)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/CardBindings/New?id=4c9932c6-5e57-4807-9103-8c4083a06d23",
"jsOperationId": "binding_4c9932c6-5e57-4807-9103-8c4083a06d23"
}
}
Ответ в случае, если токенизация не создана (400 Bad request
)
{
"error": "Invalid request"
}
# Статус "payout-only"
Возможна ситуация, при которой токен полных карточных данных принудительно переводится в статус payout-only
. Это происходит в случаях, когда от платежной системы приходит ответ с кодом, при котором дальнейшее проведение автосписаний невозможно. Такой токен в дальнейшем может быть использован только для выплат на карту или для платежа по сохраненной карте в интерактивном режиме.
Рассмотрим эту ситуацию подробнее. В соответствии с требованиями международных платежных систем, введено ограничение на проведение рекуррентных платежей в случае получения следующих отказов многократно (более 4 раз за 16 календарных дней - для карт Visa, более 3 раз за 30 календарных дней - для карт MasterCard, более 2 раз за 14 календарных дней - для карт МИР):
- с кодом "05" (отказать без указания причины).
- с кодом "51" (отказать, на счете недостаточно средств).
- с кодом "61" (отказать, превышение максимальной суммы операции для данной карты).
- с кодом "65" (отказать, превышение максимального количества операций для данной карты).
В случае превышения лимитов, операция завершается с кодом "66" (отказать, обратиться в службу безопасности). Повторное проведение рекуррентного платежа становится возможным по истечении некоторого срока (16 календарных дней - для карт Visa, 30 календарных дней - для карт MasterCard, 14 календарных дней - для карт МИР) с момента последней неуспешной попытки запроса на проведение рекуррентного платежа.
Если количество отказов не превышает допустимое количество раз, то одна успешная операция по карте сразу же приводит к обнулению счетчика отказов с кодами "05", "51", "61", "65".
Кроме того, при получении отказов из списка ниже необходимо прекратить попытки рекуррентных платежей:
- с кодом "14" (неверный номер карты).
- с кодом "54" (срок действия карты истек).
- с кодом "57" (недопустимый тип операции для данной карты).
- с кодами "04", "07", "33", "35", "36", "37", "38", "41", "43", "67" (изъять карту, различные причины).
# Токенизация с нулевым балансом
Существует два способа токенизации карты с нулевым балансом:
новый: с использованием параметра
checkCard
(для платежей и выплат);прежний: с присвоением статуса payout-only (для выплат).
# Токенизация с нулевым балансом при помощи "checkCard"
При использовании терминала ecom none3ds
, служба поддержки может включить использование параметра checkCard
.
В этом сценарии процедура 3-D Secure не проводится, но возвращается токен полных карточных данных. Таким образом, наличие на карте клиента 1 рубля не обязательно.
Параметр | Обязателен | Параметр | Обязателен | |
---|---|---|---|---|
customerInfo | Да | metadata | Нет | |
customerInfo.email | Да | urls | Нет | |
customerInfo.phone | Нет | urls.return | Нет | |
checkCard | Нет | urls.callback | Нет |
СЛУЖБА ПОДДЕРЖКИ
Использование параметра checkCard
возможно только после настроек со стороны службы поддержки!
Кроме того, поддержка может настроить, чтобы все привязки выполнялись по сценарию без "3-D Secure", даже если параметр checkCard
не передан (исключая только те случаи, где в запросе явно указан checkCard: false
).
Синхронный ответ и асинхронное callback-уведомление могут содержать более широкий набор параметров по сравнению с примером.
Запрос
POST https://secure.mandarinpay.com/api/card-bindings
{
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"checkCard": true,
"metadata": {
"first_parameter_to_callback_and_not_to_show": "p1",
"second_parameter_to_callback_and_not_to_show": "p2"
},
"urls": {
"callback": "http://...",
"return": "http://..."
}
}
Ответ в случае успешной токенизации (200 ОК
)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/CardBindings/New?id=4c9932c6-5e57-4807-9103-8c4083a06d23",
"jsOperationId": "binding_4c9932c6-5e57-4807-9103-8c4083a06d23"
}
Ответ в случае, если токенизация не создана (400 Bad request
)
{
"error": "Invalid request"
}
# Токенизация с нулевым балансом со статусом "payout-only"
Возможна настройка, при которой, в случае, если у пользователя отсутствуют денежные средства на карте (например, после прохождения 3-D Secure получена ошибка с кодом 51), карта токенизируется и переходит в статус payout-only (status=payout-only
в callback
-уведомлении). Токен полных карточных данных в статусе payout-only
может быть использован так же, как токен только номера карты. То есть для выплат на карту, а также для платежей с участием плательщика (потребуется ввод CVV/CVC и прохождение процедуры 3-D Secure).
# Токенизация номера карты
Данный вызов по сути представляет из себя токенизацию номера карты и используется для того, чтобы не хранить в вашей системе номер карты. Данная операция осуществляется в синхронном режиме - в ответ вы получите токен (в поле id
).
В отличие от токенизации полных карточных данных, токенизация номера карты может быть использована исключительно для зачисления (action=payout
) денежных средств на карту.
Параметр | Обязателен | Параметр | Обязателен | |
---|---|---|---|---|
customerInfo | Да | target | Да | |
customerInfo.email | Да | target.knownCardNumber | Да | |
customerInfo.phone | Нет | metadata | Нет |
Синхронный ответ и асинхронное callback-уведомление могут содержать более широкий набор параметров по сравнению с примером.
Запрос
POST https://secure.mandarinpay.com/api/card-bindings
{
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"target": {
"knownCardNumber": "4012888888881881"
},
"metadata": {
"first_parameter_to_callback_and_not_to_show": "p1",
"second_parameter_to_callback_and_not_to_show": "p2"
}
}
Ответ в случае успешной токенизации (200 ОК
)
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если токенизация не создана (400 Bad request
)
{
"error": "Invalid request"
}
# Использование токенов
Токен полных карточных данных может быть использован в дальнейшем для:
- Рекуррентных платежей (автосписаний) с использованием токена карты.
- Платежей по сохраненной карте в интерактивном режиме. В этом случае пользователю необходимо заполнить только поле
CVV
. - Платежей по сохраненной карте без ввода CVV/CVC-кода и без прохождения 3-D Secure. В этом случае произойдет автосписание. Если оно невозможно, то пользователю необходимо будет заполнить только поле
CVV
. - Авторизации с использованием токена карты (активируется по запросу клиента).
- Автоматических выплат на карту.
- card2card операции.
# Получение статуса токенизации
Метод API дает возможность по идентификатору операции получить её статус, а также информацию о карте.
Авторизация - XAuth (opens new window).
Запрос:
operationId
- id
платежа (opens new window).
GET https://secure.mandarinpay.com/api/operations/{operationId}
Пример ответа:
{
"operationType": "Transaction",
"state": "Success",
"card": {
"cardNumber": "519261XXXXXX3242",
"cardHolder": "CARD HOLDER",
"expireDate": "25/01",
"cardId": "a3a5c49e1385e5096d05075d636f7baf",
"country": "TUR",
"productName": "Standard Mastercard Card",
"productCode": "MCS",
"brand": "mastercard",
"bank": "ODEA BANK A.S.",
"cardType": "Credit"
}
}
Параметры ответа:
Параметр | Описание |
---|---|
operationType | тип операции, транзакция/привязка |
state | Статус операции: success, failed, payout-only, pendingExecution/none/unknown - операция не завершена и находится в обработке (может потребоваться сверка с банком-эквайером). Только статус success однозначно указывает на успешность операции! |
cardNumber | маскированный номер карты |
cardHolder | держатель карты |
expireDate | срок действия карты |
cardId | уникальный хэш полного номера карты |
country | страна выпуска карты |
productName | карточный продукт/категория карты |
productCode | код карточного продукта/категории карт |
brand | платежная система карты |
bank | банк, выпустивший карту |
cardType | тип карты (дебетовая/кредитная) |