Google Pay™
Общая информация
Google Pay™ это быстрый и безопасный способ для проведения оплаты в одно касание. Клиент Вашего магазина может произвести оплату любой картой, сохраненной в его Google аккаунте. Для Вас эта оплата пройдет, как обычный платёж банковской картой.
- Если оплата происходит с мобильного устройства, поддерживающего Google Pay, клиенту будет предложено подтвердить оплату с помощью пароля, отпечатка пальца или функции распознавания лица.
- При оплате с устройства без приложения Google Pay, покупатель может выбрать любую сохраненную карту в его Google аккаунте и подтвердить платеж, пройдя 3D Secure аутентификацию.
Важно
При использовании технологии Google Pay Вам необходимо соблюдать правила допустимого использования и условия использования Google Pay API.
3DS
Платежи, проходящие через Google Pay не требуют от покупателя ввода карточных данных. Но при оплате методом PAN_ONLY
система может потребовать от клиента пройти 3D Secure проверку.
Интеграция
Мобильные приложения
Ознакомьтесь с общими сведениями по Google Pay для Android. При завершении интеграции необходимо ознакомиться с контрольным списком интеграции и убедиться, что правила фирменного оформления Google Pay для Android были соблюдены.
Стандартная интеграция
Стандартная интеграция подразумевает самостоятельное размещение Google Pay на сайте. Для проведения оплаты Вам необходимо получить платежный токен от Google Pay и передать его в платежный шлюз ioka.
Перед началом интеграции убедитесь, что:
- Вы ознакомились с общими сведениями о Google Pay API;
- У вашей веб-страницы с протоколом HTTPS есть TLS-сертификат, утвержденный доменом;
- Используется один из следующих веб-браузеров: Google Chrome, Mozilla Firefox, Apple Safari, Microsoft Edge, Opera или UCWeb UC.
При завершении интеграции необходимо:
- Ознакомиться с контрольным списком интеграции;
- Убедиться, что правила фирменного оформления Google Pay для веб-сайтов были соблюдены.
Схема интеграции
- Отправьте запрос на проведение стандартной интеграции Google Pay аккаунт-менеджеру ioka и получите GATEWAY_MERCHANT_ID.
- Выполните интеграцию с Google Pay API на сайте по инструкции. При запросе платежных данных используйте следующие параметры:
{
"type": "CARD",
"parameters": {
"allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
"allowedCardNetworks": ["MASTERCARD", "VISA"]
},
"tokenizationSpecification": {
"type": "PAYMENT_GATEWAY",
"parameters": {
"gateway": "ioka",
"gatewayMerchantId": "GATEWAY_MERCHANT_ID"
}
}
}
Важно
В объект, содержащий информацию о параметрах карты, необходимо передавать "billingAddressRequired": false, т.к. данный параметр не является обязательным при проведение транзакции.
- Реализуйте запрос на проведение оплаты с Google Pay токеном.
- Проведите внутреннее тестирование интеграции с Goggle Pay API и ioka.
- Получите коммерческий доступ в Google Pay и merchantId от службы поддержки Google.
- Получите боевые доступы от аккаунт-менеджера ioka.
Платежный токен
PaymentMethodToken это подписанные и зашифрованные данные о способе оплаты, получаемые из Google Pay API. Данный токен хранит информацию о картах (PAN) или о токенизированных карточных данных (PAN устройства и криптограмма).
Payment Data Response представляет собой сериализованный объект JSON в кодировке UTF-8 со следующей структурой:
{
"protocolVersion":"ECv2",
"signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d",
"intermediateSigningKey":{
"signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}",
"signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"]
},
"signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}"
}
Дополнительно
Более подробная информация о структуре платежного токена доступна по ссылке.
Данный объект передается в поле "google_pay" при отправке запроса на оплату.
Запрос на оплату
Данный метод может использоваться для оплаты заранее созданного заказа
Пример запроса:
order_id
- id созданного заказа (e.g. ord_a1b2c3d4e5)
tool_type
- "GOOGLE_PAY"google_pay
- токен платежного средства, полученный от Google Pay API на сайте или в приложении
- HTTP
- cURL
- Python
- PHP
POST /v2/orders/{order_id}/payments/tool HTTP/1.1
Host: stage-api.ioka.kz
Content-Type: application/json
Content-Length: 547
{
"tool_type": "GOOGLE_PAY",
"google_pay": {
"signature": "ME...",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MF\...\",\"keyExpiration\":\"16...\"}",
"signatures": ["ME..."]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"oT...\",\"tag\":\"sm...\"}"
}
}
curl --location --request POST 'https://stage-api.ioka.kz/v2/orders/{order_id}/payments/tool' \
--header 'Content-Type: application/json' \
--data-raw '{
"tool_type": "GOOGLE_PAY",
"google_pay": {
"signature": "ME...",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MF\...\",\"keyExpiration\":\"16...\"}",
"signatures": ["ME..."]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"oT...\",\"tag\":\"sm...\"}"
}
}
'
import requests
import json
url = "https://stage-api.ioka.kz/v2/orders/{order_id}/payments/tool"
payload = json.dumps({
"tool_type": "GOOGLE_PAY",
"google_pay": {
"signature": "ME...",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MF\...\",\"keyExpiration\":\"16...\"}",
"signatures": ["ME..."]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"oT...\",\"tag\":\"sm...\"}"
}
})
headers = {
'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/tool');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"tool_type": "GOOGLE_PAY",
"google_pay": {
"signature": "ME...",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MF\...\",\"keyExpiration\":\"16...\"}",
"signatures": ["ME..."]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"oT...\",\"tag\":\"sm...\"}"
}
}
');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Примеры ответов:
Важно
Для завершения оплаты картой с 3D Secure аутентификацией, Вам необходимо перенаправить плательщика по ссылке, указанной в объекте action.
После завершения аутентификации плательщик будет перенаправлен на страницу оплаты, а вы получите webhook, содержащий подробную информацию о транзакции.
- С 3DS
- Без 3DS
- 400
- 404
- 409
{
"id": "pay_test",
"order_id": "ord_test",
"status": "REQUIRES_ACTION",
"created_at": "2022-06-20T00:00:00.000000",
"approved_amount": 0,
"captured_amount": 0,
"refunded_amount": 0,
"processing_fee": 0,
"tds": true,
"payer": {
"pan_masked": "411111******1111",
"expiry_date": "12/24",
"holder": "holder",
"payment_system": null,
"emitter": null,
"email": null,
"phone": null,
"customer_id": null,
"card_id": null,
"iin": null
},
"acquirer": null,
"error": null,
"action": {
"url": "https://api.ioka.kz/v2/pay_test/check3ds"
}
}
{
"id": "pay_test",
"order_id": "ord_test",
"status": "CAPTURED",
"created_at": "2022-06-20T00:00:00.000000",
"approved_amount": 500,
"captured_amount": 500,
"refunded_amount": 0,
"processing_fee": 12.5,
"tds": false,
"payer": {
"pan_masked": "559999******9999",
"expiry_date": "12/24",
"holder": "holder",
"payment_system": null,
"emitter": null,
"email": null,
"phone": null,
"customer_id": null,
"card_id": null,
"iin": null
},
"acquirer": {
"name": "epay_v2",
"reference": "111111111111"
},
"error": null,
"action": null
}
{
"code": "InvalidPaymentToken",
"message": "Неверный платежный токен."
}
{
"code": "ShopConfigNotFound",
"message": "Конфигурации магазина не найдены."
}
{
"code": "OrderExists",
"message": "Заказ с указанным external_id уже существует."
}