Перейти к основному содержимому
Версия: 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=="
}
}

Для поддержки завершения 3DS авторизации на стороне мерчанта, в 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, возвращается ответ с параметрами:

ПараметрТипОбязательныйОписание
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 верификации

Полезные ссылки