Перейти до основного вмісту
Версія: 1.0.0

GooglePay

Зручний спосіб оплати через Google

Google Pay™ – це простий та швидкий спосіб оплати покупок у магазинах та мільйонах онлайн-сервісів. Платити через Google Pay не тільки зручно, але й безпечно: дані банківських карток надійно захищені. Крім того, керувати обліковим записом можна і на сайті сервісу, і в самому додатку.

Підключення Google Pay через платіжну сторінку ProcardPay

Для підключення необхідно:

  1. Зареєструватися у системі та підписати договір з ProcardPay.
  2. Погодитись з умовами надання послуг Google Pay.

Опис

При такому способі підключення немає потреби проводити будь-яку додаткову інтеграцію. Кнопка Google Pay з'явиться на сторінці оплати ProcardPay.

Приклад форми оплати з увімкненим методом оплати через Google Pay. Моя картинка

Пряме підключення через Google Pay API

Опис

Цей спосіб найзручніший з погляду юзабіліті для клієнта. Він дозволяє підключитися безпосередньо, без переходу на платіжну форму ProcardPay і приймати платежі прямо у себе на сайті або в додатку.

Як підключитися?

Як це працює?

gpayDiagram

  1. Ви ініціюєте запит зі свого сайту або програми на отримання зашифрованих платіжних даних.
  2. Google Pay повертає зашифровані платіжні дані після автентифікації покупця.
  3. Ви надсилаєте зашифровані дані на сервер.
  4. Ваш сервер надсилає інформацію про платіж та зашифровані платіжні дані на сервер ProcardPay.
  5. Ми у відповідь надсилаємо статус платежу.
  6. Ви повідомляєте покупця про статус платежу.

Як інтегрувати метод Google Pay?

Для інтеграції використовуйте API Google Pay.

Параметри для налаштування

  1. allowPaymentMethods : CARD
  2. tokenizationSpecification = {"type": "PAYMENT_GATEWAY"}
  3. allowedCardNetworks = ['MASTERCARD', 'VISA'];
  4. allowedCardAuthMethods = ['PAN_ONLY', 'CRYPTOGRAM_3DS'];
  5. gateway = concordpay
  6. 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

Параметри запиту:

ПараметрТипОбов'язковийОпис
OperationString+Тип операції. Значення: GooglePayPurchase
merchant_idString+Ідентифікатор мерчанта
amountFloat+Сума платежу у форматі 1.00
order_idString+Унікальний номер операції на стороні мерчанта. Якщо операція дублюється – мерчант отримує помилку.
currency_isoString+Валюта платежу UAH
descriptionString+Опис платежу
callback_urlString+URL, на який прийде інформація про результат виконання платежу
gpApiVersionMinorInteger+apiVersionMinor з processPayment(paymentData)
gpApiVersionInteger+apiVersion з processPayment(paymentData)
gpPMDescriptionString+paymentMethodData.description з processPayment(paymentData)
gpPMTypeString+paymentMethodData.type з processPayment(paymentData)
gpPMICardNetworkString+paymentMethodData.info. cardNetwork з processPayment(paymentData)
gpPMICardDetailsString+paymentMethodData.info. cardDetails з processPayment(paymentData)
gpTokenTypeString+paymentMethodData. tokenizationData.type з processPayment(paymentData)
gpTokenStringpaymentMethodData.tokenizationData.token з processPayment(paymentData)
gpTokenDecryptedStringПараметр передається замість gpToken, якщо використовується оплата з розшифрованим токеном. paymentMethodData.tokenizationData.token з processPayment(paymentData)
secure_typeIntegerТип проходження безпеки транзакції. Перелік можливих значень можна переглянути у Довідник. Значення параметра secure_type
signatureString+З метою підтвердження валідності даних має бути згенерований та переданий у запиті 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"
}

Структура розшифрованого токена:

ПараметрТипОбов'язковийОпис
gatewayMerchantIdString+Унікальний ідентифікатор продавця в системі платіжного шлюзу
messageExpirationString+Часова мітка, що вказує, коли закінчується термін дії токена
messageIdString+Унікальний ідентифікатор для цього конкретного платіжного повідомлення
paymentMethodString+Тип використовуваного методу оплати
paymentMethodDetails
expirationYearString+Рік закінчення терміну дії картки
expirationMonthString+Місяць закінчення терміну дії картки
panString+Номер первинного рахунку (токенізований номер картки)
authMethodString+Використовуваний метод аутентифікації (CRYPTOGRAM_3DS вказує на 3D Secure)
cryptogramString+Унікальна криптограма, згенерована для цієї транзакції для забезпечення безпеки

Приклад розшифрованого токена:

{
"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.notificationUrlStringURL-адреса, на яку повернеться POST-повідомлення CRes від ACS, після перевірки власника картки по протоколу 3DS2 по схемі Challenge-Flow

У відповідь повертається JSON з результатами запиту.

Якщо запит виконано неуспішно, повертається відповідь з параметрами:

ПараметрТипОпис
codeIntegerКод відповіді, см. Довідник. Статуси платежу
messageStringПовідомлення з результатом запиту

Приклад відповіді

{
"code":-4,
"message":"Неверная подпись"
}

Якщо 3DS виконувати не потрібно, повертається результат операції оплати з параметрами:

ПараметрТипОпис
reasonCodeIntegerКод результату запиту
0 - успішна операція
12 - помилка операції
reasonString/IntegerПовідомлення з результатом запиту
Зверніть увагу, що message може бути як строкою так і числом!
transactionStatusStringСтатус операції (див. Статус Довідник. Статуси платежу)

Приклад відповіді успіху операції оплати

{
"reasonCode": 0,
"reason": "OK",
"transactionStatus": "APPROVED"
}

Приклад відповіді відмови операції оплати

{
"reasonCode": 12,
"reason": 55,
"transactionStatus": "DECLINED"
}

Якщо потрібно виконати 3DS, повертається відповідь з параметрами:

ПараметрТипОбов'язковийОпис
codeInteger+Код відповіді (див. Довідник. Коди відповідей)
statusString+Якщо значення 3ds - необхідно виконати 3DS
d3AcsUrlStringacs url для перевірки 3DS
d3MdStringУнікальний ідентифікатор передачі на хост 3DS
d3PareqStringPaReq повідомлення передачі на хост 3DS
d3CreqStringd3Creq повідомлення передачі на хост 3DS
transaction_keyString+Ключ транзакції для підтвердження 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 верифікації

Корисні посилання