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