Перейти до основного вмісту
Версія: 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

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

ПараметрОписОбов'язковийТип
OperationТип операції. Значення: GooglePayPurchaseТакString
merchant_idІдентифікатор мерчантаТакString
amountСума платежу у форматі 1.00ТакFloat
order_idУнікальний номер операції на стороні мерчанта. Якщо операція дублюється – мерчант отримує помилку.ТакString
currency_isoВалюта платежу UAHТакString
descriptionОпис платежуТакString
callback_urlURL, на який прийде інформація про результат виконання платежуТакString
gpApiVersionMinorapiVersionMinor з processPayment(paymentData)ТакInteger
gpApiVersionapiVersion з processPayment(paymentData)ТакInteger
gpPMDescriptionpaymentMethodData.description з processPayment(paymentData)ТакString
gpPMTypepaymentMethodData.type з processPayment(paymentData)ТакString
gpPMICardNetworkpaymentMethodData.info. cardNetwork з processPayment(paymentData)ТакString
gpPMICardDetailspaymentMethodData.info. cardDetails з processPayment(paymentData)ТакString
gpTokenTypepaymentMethodData. tokenizationData.type з processPayment(paymentData)ТакString
gpTokenpaymentMethodData.tokenizationData.token з processPayment(paymentData)НіString
gpTokenDecryptedПараметр передається замість gpToken, якщо використовується оплата з розшифрованим токеном. paymentMethodData.tokenizationData.token з processPayment(paymentData)НіString
secure_typeТип проходження безпеки транзакції. Перелік можливих значень можна переглянути у Довідник. Значення параметра secure_typeНіInteger
signatureЗ метою підтвердження валідності даних має бути згенерований та переданий у запиті HMAC_SHA512 контрольний підпис з використанням PrivateKey торговця.ТакString
Рядок, що підлягає 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Використовуваний метод аутентифікації (CRYPTOGRAM_3DS вказує на 3D Secure)ТакString
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.notificationUrlStringНетURL-адреса, на яку повернеться 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, повертається відповідь з параметрами:

ПараметрОписаниеОбязательныйТип
codeКод відповіді (див. Довідник. Коди відповідей)ДаInteger
statusЯкщо значення 3ds - необхідно виконати 3DSДаString
d3AcsUrlacs url для перевірки 3DSНетString
d3MdУнікальний ідентифікатор передачі на хост 3DSНетString
d3PareqPaReq повідомлення передачі на хост 3DSНетString
d3Creqd3Creq повідомлення передачі на хост 3DSНетString
transaction_keyКлюч транзакції для підтвердження 3DSДаString

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

{
"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 верифікації

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