Masterpass™
Общая информация
Masterpass — простой, удобный и надежный цифровой кошелек от Mastercard для более быстрых и безопасных покупок в интернет-магазинах. Все платежные детали хранятся в одном месте, а платить можно во всех магазинах, где принимается Masterpass, что позволяет клиенту избегать повторного ввода карточных данных, что значительно повышает конверсию.
Преимущества использования Masterpass:
- Универсальность. Сервис работает с дебетовыми и кредитными картами платёжных систем MasterCard, Visa.
- Безопасность. Многоуровневая система защиты практически исключает возможность кражи средств.
- Удобство. Для клиента оплата проходит в один клик - нет необходимости повторно вводить номер и срок действия карты.
- Оплаты по сохраненным в Masterpass картам будут приниматься во всех магазинах, где подключен данный сервис.
Клиент может сохранить до 5 карт для одного номера мобильного телефона, а также управлять ими через личный кабинет в Masterpass.
Важно
Данные плательщика не привязываются к мерчанту, т.е. сохранив карту один раз, в дальнейшем покупатель будет выбирать её из списка для оплаты во всех магазинах и приложениях, где есть Masterpass.
Интеграция по API
Если у вас уже реализована интеграция по созданию плательщика, сохранению карт и оплате по сохраненным картам в ioka, то для интеграции Masterpass вам необходимо внести изменения по описанным ниже шагам в методы CreateCustomer и CreateCardPayment, а также запросить по почте support@ioka.kz подключение сервиса Masterpass к вашему магазину.
1. Создание плательщика
Для проведения платежей по картам из Masterpass необходимо создать плательщика, используя метод CreateCustomer.
Важно
Для получения данных их Masterpass необходимо передать fingerprint
, phone_check_date
, channel
fingerprint
(цифровой отпечаток устройства) — это уникальный идентификатор конфигураций мобильного устройства или браузера пользователя. Формирование
fingerprint зависит от используемого устройства. При проведении платежей через web-браузер собирается Web Fingerprint,
а при использовании мобильного приложения собирается Android/iOS Fingerprint.
У одного плательщика может быть несколько fingerprint, в случае использования нескольких устройств или браузеров.
info
Для получения SDK (Web, Android, iOS) и подробной инструкции по формированию fingerprint необходимо написать на почту support@ioka.kz.
phone_check_date
- дата последней успешной верификации номера телефона плательщика в системе мерчанта
channel
- тип устройства плательщика (WEB
, APP iOS
или APP Android
)
Пример запроса:
- HTTP
- cURL
- Python
- PHP
POST /v2/customers HTTP/1.1
Host: stage-api.ioka.kz
API-KEY: eyJ0eXAiOiJKV1..
Content-Type: application/json
{
"email": "test@ioka.kz",
"phone": "+77771112233",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
}
curl --location --request POST 'https://stage-api.ioka.kz/v2/customers' \
--header 'API-KEY: eyJ0eXAiOiJKV1..' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "test@ioka.kz",
"phone": "+77771112233",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
}'
import requests
import json
url = "https://stage-api.ioka.kz/v2/customers"
payload = json.dumps({
"email": "test@ioka.kz",
"phone": "+77771112233",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
})
headers = {
'API-KEY': 'eyJ0eXAiOiJKV1..',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://stage-api.ioka.kz/v2/customers');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"email": "test@ioka.kz",
"phone": "+77771112233",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
}');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'API-KEY' => 'eyJ0eXAiOiJKV..',
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Пример ответа:
- 200
{
"customer":
{
"id": "string",
"created_at": "string",
"status": "PENDING",
"external_id": "string",
"email": "user@example.com",
"phone": "string",
"accounts": [
{
"id": "string",
"shop_id": "string",
"customer_id": "string",
"status": "PENDING",
"name": "string",
"amount": "string",
"currency": "KZT",
"resources": [],
"created_at": "2019-08-24T14:15:22Z",
"external_id": "string"
}
],
"checkout_url": "http://example.com",
"access_token": "string"
},
"customer_access_token": "string"
}
2. Получение и отображение карт плательщика
Если по введенному номеру телефона у клиента были сохранены карты в Masterpass, то они автоматически будут доступны после создания плательщика.
Для получения информации о сохраненных картах по customer_id
воспользуйтесь методом GetCards.
Пример запроса:
- HTTP
- cURL
- Python
- PHP
GET /v2/customers/{{customer_id}}/cards HTTP/1.1
Host: stage-api.ioka.kz
API-KEY: eyJ0eXAiOiJKV1..
curl --location --request GET 'https://stage-api.ioka.kz/v2/customers/{{customer_id}}/cards' \
--header 'API-KEY: eyJ0eXAiOiJKV1..'
import requests
url = "https://stage-api.ioka.kz/v2/customers/{{customer_id}}/cards"
payload={}
headers = {
'API-KEY': 'eyJ0eXAiOiJKV1..'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://stage-api.ioka.kz/v2/customers/{{customer_id}}/cards');
$request->setRequestMethod('GET');
$request->setOptions(array());
$request->setHeaders(array(
'API-KEY' => 'eyJ0eXAiOiJKV1..'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Пример ответа:
- 200
[
{
"id": "card_id",
"customer_id": "customer_id",
"created_at": "2023-02-14T06:35:16.689023",
"pan_masked": "411111******1111",
"expiry_date": "12/24",
"holder": "HOLDER",
"payment_system": "VISA",
"emitter": "Bank",
"cvc_required": true,
"masterpass_card": true,
"error": null,
"action": null
},
{
"id": "card_id",
"customer_id": "customer_id",
"created_at": "2023-02-14T06:35:16.696876",
"pan_masked": "5555******5599",
"expiry_date": "12/24",
"holder": "HOLDER",
"payment_system": "MASTERCARD",
"emitter": "Bank",
"cvc_required": true,
"masterpass_card": true,
"error": null,
"action": null
}
]
3. Проведение оплаты по карте из Masterpass
Вам необходимо:
- создать заказ
- отобразить список доступных карт для оплаты клиенту
- инициировать оплату методом CreateCardPayment по выбранной клиентом картой
Если выбранная карта была получена из хранилища Masterpass, то в ответе на запрос GetCards придет флаг "masterpass_card": true
.
В таком случае, в тело запроса CreateCardPayment необходимо передать card_id
, fingerprint
, phone_check_date
, channel
.
После успешной оплаты карта плательщика будет подтверждена и во все последующие запросы на CreateCardPayment необходимо передавать только card_id
,
т.е. параметры fingerprint
, phone_check_date
, channel
собираются и передаются только при первой попытке оплаты.
Важно
При первой оплате по карте из Masterpass плательщику необходимо ввести CVC и, если на карте установлена 3D Secure проверка, пройти аутентификацию для подтверждения принадлежности карты её держателю.
Для этого необходимо перенаправить плательщика на action.url (ссылка на форму оплаты ioka с предзаполненным номером и сроком действия карты).
Пример запроса:
- HTTP
- cURL
- Python
- PHP
POST /v2/orders/{{order_id}}/payments/card HTTP/1.1
Host: stage-api.ioka.kz
API-KEY: eyJ0eXAiOiJKV1..
Content-Type: application/json
{
"card_id": "card_id",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
}
curl --location --request POST 'https://stage-api.ioka.kz/v2/orders/{{order_id}}/payments/card' \
--header 'API-KEY: eyJ0eXAiOiJKV1..' \
--header 'Content-Type: application/json' \
--data-raw '{
"card_id": "card_id",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
}'
import requests
import json
url = "https://stage-api.ioka.kz/v2/orders/{{order_id}}/payments/card"
payload = json.dumps({
"card_id": "card_id",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
})
headers = {
'API-KEY': 'eyJ0eXAiOiJKV1..',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://stage-api.ioka.kz/v2/orders/{{order_id}}/payments/card');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"card_id": "card_id",
"fingerprint": "RGV2a...",
"phone_check_date": "2022-01-01 09:00:00",
"channel": "WEB"
}');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'API-KEY' => 'eyJ0eXAiOiJKV..',
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Пример ответа:
- 200
{
"id": "pay_test",
"order_id": "ord_test",
"status": "REQUIRES_ACTION",
"created_at": "2023-02-14T06:36:22.511992",
"approved_amount": 0,
"captured_amount": 0,
"refunded_amount": 0,
"processing_fee": 0.0,
"tds": false,
"payer": null,
"acquirer": null,
"error": null,
"action": {
"url": "https://test.ioka.kz/orders/ord_w8qkzciAjI"
}
}
4. Проверка статуса платежа
Доступны несколько способов для проверки статуса платежа:
- Настроить получение уведомлений (webhook-ов) от ioka на события
PAYMENT_APPROVED
,PAYMENT_CAPTURED
,PAYMENT_DECLINED
. - Периодически запрашивать информацию о заказе методом GetOrderByID.
- Проверять статус в Личном Кабинете Мерчанта.
В случае успешной оплаты карта плательщика будет подтверждена и card_id
будет доступен для проведения платежей по сохраненной карте.