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

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

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

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