GooglePay
Зручний спосіб оплати через Google
Google Pay™ – це простий та швидкий спосіб оплати покупок у магазинах та мільйонах онлайн-сервісів. Платити через Google Pay не тільки зручно, але й безпечно: дані банківських карток надійно захищені. Крім того, керувати обліковим записом можна і на сайті сервісу, і в самому додатку.
Підключення Google Pay через платіжну сторінку ProcardPay
Для підключення необхідно:
- Зареєструватися у системі та підписати договір з ProcardPay.
- Погодитись з умовами надання послуг Google Pay.
Опис
При такому способі підключення немає потреби проводити будь-яку додаткову інтеграцію. Кнопка Google Pay з'явиться на сторінці оплати ProcardPay.
Приклад форми оплати з увімкненим методом оплати через Google Pay.
Пряме підключення через Google Pay API
Опис
Цей спосіб найзручніший з погляду юзабіліті для клієнта. Він дозволяє підключитися безпосередньо, без переходу на платіжну форму ProcardPay і приймати платежі прямо у себе на сайті або в додатку.
Як підключитися?
Виконати вимоги щодо брендування (для мобільних додатків або для веб-сайтів).
Перевірити відповідність контрольному списку для інтеграції.
Пройти перевірку - відправити збірку мобільного додатку або посилання на сайт зі сторінкою оплати.
Як це працює?
- Ви ініціюєте запит зі свого сайту або програми на отримання зашифрованих платіжних даних.
- Google Pay повертає зашифровані платіжні дані після автентифікації покупця.
- Ви надсилаєте зашифровані дані на сервер.
- Ваш сервер надсилає інформацію про платіж та зашифровані платіжні дані на сервер ProcardPay.
- Ми у відповідь надсилаємо статус платежу.
- Ви повідомляєте покупця про статус платежу.
Як інтегрувати метод Google Pay?
Для інтеграції використовуйте API Google Pay.
Параметри для налаштування
- allowPaymentMethods : CARD
- tokenizationSpecification = {"type": "PAYMENT_GATEWAY"}
- allowedCardNetworks = ['MASTERCARD', 'VISA'];
- allowedCardAuthMethods = ['PAN_ONLY', 'CRYPTOGRAM_3DS'];
- gateway = concordpay
- GatewayMerchantId - унікальний ідентифікатор мерчанта. Видається кожному партнеру під час підключення до системи ProcardPay.
У разі підтвердження платником оплати колбек поверне у функцію processPayment дані, які необхідно буде надіслати в запиті платіжного методу GooglePayPurchase, для проведення оплати.
Приклад:
{
"apiVersionMinor":0,
"apiVersion":2,
"paymentMethodData":{
"description":"Mastercard •••• 6812",
"tokenizationData":{
"type":"PAYMENT_GATEWAY",
"token":{"signature":"MEYCIQC+IHxUu9Wwra2Vu6tBa2wJ1VphLGYtNVLLwIhAOkdbNje//eLrXVc+n6LOlc4PqxWOUcqwPCMT3pWtNrmki/CNA1ur","intermediateSigningKey":{"signedKey":"{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzyGFjQuzGSVij0DAQcDQgAEwhRrvGB0kZ1248MEJAPwX0YfrQInhyyRM7nZG3QC9NMvXR9Zd6uVcVzAz+6K/+NEGIWbX8zbk6A\\u003d\\u003d\",\"keyExpiration\":\"1571328568000\"}","signatures":["MEUCIQCR6vhCBHeFPvDJlCIo4/tLd7W8CIGrZDJlCI48IEiyHB8qmlCBHeFPvQIgLZJIe4cZv6pYtYYa56QCI/vvg1GqXTP3bTBjO49r5mI\u003d"]},"protocolVersion":"ECv2","signedMessage":"{\"encryptedMessage\":\"O4wTPip6RruraT6vO9MS+9stjkU/kT5EibKB3O1bbxyybKcGQ5vxBOtNOBKKd/NuqNmN2eEK3UbSKb1M3gv45gT9cCeEvlzO7Wg0N100vUBp9RPDN9TH4tj4w578sWFKfTi6FsSrZB27SGWcU0k85CGUMmd5PaGmQlHFqHc0HrDZmjM1yG82rFB/p31ZyUleN5nihzjOZif/BKXwg3XA2oLXqBSSWcAdfZwXxCEOqvAQE+kpTC7qVO4wTPip6RruraT6vO9M9FtPJXP9bPxzMVk/ozEZSfhSzVTT5EibKB3O1bbxyybKcGQ5vxBOtNOBKKd/NuqNmN2eEK3UbSKb1M3gv45gT9cCeEvlzO7Wg0N100vUBp9RPDN9TH4tj4w578sWFKfTi6FsSrZB27SGWcU0k85CGUMmd5PaGmQlHFqHc0HrDZmjM1yG82rFB/p31ZyUleN5nihzjOZif/BKXJXP9bPxzMVk/ozEZSfhSzVTT5EibKB3O1bbxyybKcGQ5vxBOtNOBKKd/NuqNmN2eEK3UbSKb1M3gv45gT9cCeEvlzO7Wg0N100vwg3XA2oLXqBSSWcAdfZwXxCEOqvAQE+kpTC7qVO4wTPip6RruraT6vO9MS+9stjkU/kT5EibKB3O1bbxyybKcGQ5vxBOtNOBKKd/NuqNmN2eEK3UbSKb1M3gv45gT9cCeEvlzO7Wg0N100vUBp9RPDN9TH4tj4w578sWFKfTi6FsSrZB27SGWcU0k85CGUMmd5PaGmQlHFqHc0HrDZmjM1yG82rFB/p31ZyUleN5nihzjOZif/BKXwg3XA2oLXqBSSWcAdfZwXxCEOqvAQE+kpTC7qVO4wTPip6RruraT6vO9M9FtIf0kcqzYSAN7pl1SUA5jC9rHrqucPoh0/FSspup78SWBt8TnmVKC9O3sQhIZ3SMoGOG4mdjtIrgCwWH2cbrxUH0dHAqOe5ANGOY/mII4nTEp7xaKu41hK/kFE15zVyqgEaKHO9buo94mRBY5yqffF3bKg5mAMPzjDhyHSujqWKAs9C5fBzMEuEr2z7A23kfLqBceH5uS9LJMiZ/yVKCwfpY9u2XyCjKdp7I\\u003d\",\"ephemeralPublicKey\":\"BAMDAtfgcPNuzItrwGLigGj3rtxmyHhZLwx1B4RJZ2oo11jpFf3SA6a3utryCMmlCEcqLfLn6WDH2ArrNBGn+Ew\\u003d\",\"tag\":\"T/qhZ/XY5/3Fe4QBKazwVeiKfm6NqS6EXhRlp8NeWrA\\u003d\"}"}
},
"type":"CARD",
"info":{
"cardNetwork":"MASTERCARD",
"cardDetails":"6812"
}
}
}
Платіжний метод GooglePayPurchase
Production url: https://****.procard-ltd.com/api/
POST multipart/form-data
Параметри запиту:
Параметр | Тип | Обов'язковий | Опис |
---|---|---|---|
Operation | String | + | Тип операції. Значення: GooglePayPurchase |
merchant_id | String | + | Ідентифікатор мерчанта |
amount | Float | + | Сума платежу у форматі 1.00 |
order_id | String | + | Унікальний номер операції на стороні мерчанта. Якщо операція дублюється – мерчант отримує помилку. |
currency_iso | String | + | Валюта платежу UAH |
description | String | + | Опис платежу |
callback_url | String | + | URL, на який прийде інформація про результат виконання платежу |
gpApiVersionMinor | Integer | + | apiVersionMinor з processPayment(paymentData) |
gpApiVersion | Integer | + | apiVersion з processPayment(paymentData) |
gpPMDescription | String | + | paymentMethodData.description з processPayment(paymentData) |
gpPMType | String | + | paymentMethodData.type з processPayment(paymentData) |
gpPMICardNetwork | String | + | paymentMethodData.info. cardNetwork з processPayment(paymentData) |
gpPMICardDetails | String | + | paymentMethodData.info. cardDetails з processPayment(paymentData) |
gpTokenType | String | + | paymentMethodData. tokenizationData.type з processPayment(paymentData) |
gpToken | String | paymentMethodData.tokenizationData.token з processPayment(paymentData) | |
gpTokenDecrypted | String | Параметр передається замість gpToken , якщо використовується оплата з розшифрованим токеном. paymentMethodData.tokenizationData.token з processPayment(paymentData) | |
secure_type | Integer | Тип проходження безпеки транзакції. Перелік можливих значень можна переглянути у Довідник. Значення параметра secure_type | |
signature | String | + | З метою підтвердження валідності даних має бути згенерований та переданий у запиті HMAC_SHA512 контрольний підпис з використанням PrivateKey торговця. |
Рядок, що підлягає HMAC_SHA512, генерується шляхом конкатенації параметрів merchant_id, order_id, amount, currency_iso, description розділених “;” (крапка з комою) у кодуванні UTF-8. | |||
Порядок параметрів під час конкатенації важливий! |
Приклад запиту на оплату з розшифрованим токеном:
{
"operation": "GooglePayPurchase",
"merchant_id": "BO_c544cc5a6be9f77",
"amount": 1,
"order_id": "1725460766155-908",
"currency_iso": "UAH",
"description": "Платеж GooglePayPurchase",
"callback_url": "http://merchant.dev/callback.php",
"gpApiVersionMinor": 0,
"gpApiVersion": 2,
"gpPMDescription": "Visa •••• 3119",
"gpPMType": "CRYPTOGRAM_3DS",
"gpPMICardNetwork": "VISA",
"gpPMICardDetails": "3119",
"gpTokenType": "PAYMENT_GATEWAY",
"gpTokenDecrypted": "ewoiZ2F0ZXdheU1lcmNoYW50SWQiOiAiQk9fZGM1NWI4MmJhMmJhNTNhIiwKIm1lc3NhZ2VFeHBpcmF0aW9uIjogIjE3MDg5ODc1MzMiLAoibWVzc2FnZUlkIjogIkFIMkVqdGRaaEZpc3NGdXZpaDdRbU9aeF9DLUp4akx4dW9yeGd6ekZxb2ZOcVdOZ2lOZ2hwOVNoVnVTemVaamxMVUFSZE1XUm8wZ2k5YzNPbllaREQ1ck9HRGhET2NwbkcyNVpmRU1CM2o5aFhpX3Q0UVlKRzN1UGV4eHdQOUZWaDhFb0RUUEg0a0o0IiwKInBheW1lbnRNZXRob2QiOiAiQ0FSRCIsCiJwYXltZW50TWV0aG9kRGV0YWlscyI6IHsKImV4cGlyYXRpb25ZZWFyIjogMjAyNSwKImV4cGlyYXRpb25Nb250aCI6IDEyLAoicGFuIjogIjQwMTIwMDAwMDAwMDMxMTkiLAoiYXV0aE1ldGhvZCI6ICJDUllQVE9HUkFNXzNEUyIsCiJjcnlwdG9ncmFtIjogIkFJSkJ2U2hRNkRtckFCS1AzL0F3R2dBREZBPT0iCn0KfQo=",
"add_params": {
"BrowserIP": "10.1.2.3",
"UserAccountID": "00000000-ABCD-1234-A1B2-123456789876-12345654-ABCD-1234-A1B2-333",
"Fingerprint": "12345654-ABCD-1234-A1B2-123456789876-12345654-ABCD-1234-A1B2-111",
"AReqDetails.notificationUrl": "https://merchant.dev/3ds/result"
},
"signature": "5d0ec7237a1e856a5a2c27f2680736cf"
}
Структура розшифрованого токена:
Параметр | Тип | Обов'язковий | Опис |
---|---|---|---|
gatewayMerchantId | String | + | Унікальний ідентифікатор продавця в системі платіжного шлюзу |
messageExpiration | String | + | Часова мітка, що вказує, коли закінчується термін дії токена |
messageId | String | + | Унікальний ідентифікатор для цього конкретного платіжного повідомлення |
paymentMethod | String | + | Тип використовуваного методу оплати |
paymentMethodDetails | |||
expirationYear | String | + | Рік закінчення терміну дії картки |
expirationMonth | String | + | Місяць закінчення терміну дії картки |
pan | String | + | Номер первинного рахунку (токенізований номер картки) |
authMethod | String | + | Використовуваний метод аутентифікації (CRYPTOGRAM_3DS вказує на 3D Secure) |
cryptogram | String | + | Унікальна криптограма, згенерована для цієї транзакції для забезпечення безпеки |
Приклад розшифрованого токена:
{
"gatewayMerchantId": "BO_dc55b82ba2ba53a",
"messageExpiration": "1708987533",
"messageId": "AH2EjtdZhFissFuvih7QmOZx_C-JxjLxuorxgzzFqofNqWNgiNghp9ShVuSzeZjlLUARdMWRo0gi9c3OnYZDD5rOGDhDOcpnG25ZfEMB3j9hXi_t4QYJG3uPexxwP9FVh8EoDTPH4kJ4",
"paymentMethod": "CARD",
"paymentMethodDetails": {
"expirationYear": 2025,
"expirationMonth": 12,
"pan": "4012000000003119",
"authMethod": "CRYPTOGRAM_3DS",
"cryptogram": "AIJBvShQ6DmrABKP3/AwGgADFA=="
}
}
Для підтримки можливості виконання авторизації за протоколом 3DS2, в add_params необхідно додатково передати такі параметри:
Параметр | Тип | Обов'язковий | Значення |
---|---|---|---|
AReqDetails.notificationUrl | String | URL-адреса, на яку повернеться POST-повідомлення CRes від ACS, після перевірки власника картки по протоколу 3DS2 по схемі Challenge-Flow |
У відповідь повертається JSON з результатами запиту.
Якщо запит виконано неуспішно, повертається відповідь з параметрами:
Параметр | Тип | Опис |
---|---|---|
code | Integer | Код відповіді, см. Довідник. Статуси платежу |
message | String | Повідомлення з результатом запиту |
Приклад відповіді
{
"code":-4,
"message":"Неверная подпись"
}
Якщо 3DS виконувати не потрібно, повертається результат операції оплати з параметрами:
Параметр | Тип | Опис |
---|---|---|
reasonCode | Integer | Код результату запиту 0 - успішна операція 12 - помилка операції |
reason | String/Integer | Повідомлення з результатом запиту Зверніть увагу, що message може бути як строкою так і числом! |
transactionStatus | String | Статус операції (див. Статус Довідник. Статуси платежу) |
Приклад відповіді успіху операції оплати
{
"reasonCode": 0,
"reason": "OK",
"transactionStatus": "APPROVED"
}
Приклад відповіді відмови операції оплати
{
"reasonCode": 12,
"reason": 55,
"transactionStatus": "DECLINED"
}
Якщо потрібно виконати 3DS, повертається відповідь з параметрами:
Параметр | Тип | Обов'язковий | Опис |
---|---|---|---|
code | Integer | + | Код відповіді (див. Довідник. Коди відповідей) |
status | String | + | Якщо значення 3ds - необхідно виконати 3DS |
d3AcsUrl | String | acs url для перевірки 3DS | |
d3Md | String | Унікальний ідентифікатор передачі на хост 3DS | |
d3Pareq | String | PaReq повідомлення передачі на хост 3DS | |
d3Creq | String | d3Creq повідомлення передачі на хост 3DS | |
transaction_key | String | + | Ключ транзакції для підтвердження 3DS |
Приклад відповіді
{
"code": 2002,
"status": "3ds",
"d3AcsUrl": "https://bank.com/acs/94",
"d3Creq": "eyJhY3NUcmFuc0lEIjoiMjczNzlhNWYtMGVlMi00MzcxLWEwMDYtNTExOTdlMzVhMjI3IiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJmMjIyY2VlZi1kMWJjLTRjZjEtYWYxMy01MGM5ZjExODJhN2YiLCJjaGFsbGVuZ2VXaW5kb3dTaXplIjoiMDMiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIn0",
"d3Md": "",
"d3Pareq": "",
"transaction_key": "b701ff08d09206ef89cc8178aee0e8ef3a765d7042368b545cf55acf8b5707e164c7adf64d66a"
}
Перевірка 3DS
Якщо у відповіді на запит GooglePayPurchase в полі status повернеться значення 3ds
, необхідно виконати перевірку 3D Secure.
Якщо у відповіді code
прийшло значення 2001
- необхідно виконати перевірку по протоколу 3DS1
Якщо у відповіді code
прийшло значення 2002
- необхідно виконати перевірку по протоколу 3DS2
Перевірка по протоколу 3DS1
Необхідно передати d3AcsUr
методом POST параметри d3Pareq
та d3Md
в наступній формі:
<form name="MPIform" action='${d3AcsUrl}' method="POST">
<input type="hidden" name="PaReq" value='${d3Pareq}'>
<input type="hidden" name="MD" value='${d3Md}'>
<input type="hidden" name="TermUrl" value='${TempUrl}'>
</form>
TempUrl
- url переданий мерчантом, на який ємітент поверне відповідь після аутентифікації клієнта.
Перевірка по протоколу 3DS2
Необхідно методом POST відправити форму с параметром d3Creq
на d3AcsUrl
.
<form name="MPIform" action='${d3AcsUrl}' method="POST">
<input type="hidden" name="creq" value='${d3Creq}'>
</form>
Для завершення процесу оплати необхідно виконати підтвердження 3DS верифікації
Підтвердження 3DS верифікації
Детальний опис див. Підтвердження 3DS верифікації
Корисні посилання
- Демо
- API Google Pay
- При використанні Google Pay необхідно дотримання наступних умов від Google.