API REFERENCE
Google Pay ™
Parâmetros
| Parameter | Type | Descrição | Obrigatório |
|---|---|---|---|
| data.pay_method | string | online | ✓ |
| data.sub_pay_method | string | Google Pay | ✓ |
| data.operation | string | 1. Sales; 2.Authorisation | ✓ |
| data.order_id | integer | 商户的订单ID | ✓ |
| data.amount | string | 金额数字。例如 € 24.99 应该写成24.99 | ✓ |
| data.currency | string | 货币代码,ISO 4217,例如EUR,CHF | ✓ |
| data.description | string | 订单描述 | ✓ |
| data.demo | string | 自定义字段 | — |
| data.payment_token_object | string | 从Google Pay拿到的“token”的字符串base64 | ✓ |
| data.cardinfo | string | 包括持卡人姓名和email | ✓ |
| data.timeout | string | 过期时间单位分钟(0-1440) | ✓ |
| data.redirect_url | string | 支付完成后跳转地址 | — |
| data.notify_url | string | 支付完成后异步通知地址 | ✓ |
| data.request_id | string | 请求id需保持唯一,建议24以上位数字+字母 | ✓ |
| data.3ds_initiate | string | 3ds设置。 01. 开启3ds验证; | ✓ |
Para fluxos de pagamento compatíveis com Google Pay
O Google Pay funciona em navegadores e Apps nos principais dispositivos desktop e móveis. Por meio do Google Pay, a YabandPay oferece suporte a cartões de débito e crédito das seguintes bandeiras:
-
Visa / VPay
-
Mastercard / Maestro
-
UnionPay
A conta de liquidação deve estar no Espaço Econômico Europeu (EEE) ou no Reino Unido.
Dica
Todos os estabelecimentos que usam Google Pay devem cumprir os seguintes termos:
- Google Pay APIs Acceptable Use Policy
- Google Pay API Terms of Service
Ao integrar Google Pay pela solução hospedada da YabandPay, os estabelecimentos aceitam e concordam em cumprir os termos acima.
1. Tipos de credenciais e requisitos 3DS
Google Pay é compatível com os dois tipos de credenciais a seguir:
-
PAN_ONLY: Retorna um invólucro criptografado com o número da conta principal em texto simples (cardInfo.cardDetails) e a bandeira do cartão (cardInfo.cardNetwork), sem criptograma.
-
CRYPTOGRAM_3DS: Retorna credenciais criptografadas baseadas em token, com um token de rede (DPAN) e um criptograma, para transações que exigem maior segurança.
Requisitos 3DS:
Ao receber credenciais PAN_ONLY pela API do Google Pay, você deve realizar a verificação 3D Secure (defina 3ds_initiate=01). A YabandPay rejeita transações sem verificação 3DS.
Para garantir compatibilidade e segurança, siga estas recomendações de integração:
-
Ative ["CRYPTOGRAM_3DS", "PAN_ONLY"] na configuração frontend do Google Pay.
-
Sempre defina 3ds_initiate=01 ao enviar uma solicitação de pagamento à YabandPay.
-
O backend da YabandPay determina se deve realizar 3D Secure com base no tipo de credencial.
2. Integração em aplicativo ou web (hospedagem própria)
Os estabelecimentos podem integrar a API do Google para iniciar o fluxo de pagamento no próprio site ou App. O processo e a configuração estão descritos abaixo:
Fluxo de pagamento:
O Google Pay usa credenciais de um cartão vinculado ao dispositivo (DPAN, token de rede) em vez do número real do cartão (PAN). O fluxo de pagamento é:
-
O cliente seleciona o botão Google Pay no site ou App do estabelecimento.
-
O cliente autoriza usando Face ID / Touch ID / uma senha.
-
O Google retorna um token criptografado.
-
O estabelecimento envia o token à YabandPay para processamento.
Observação: no modo com hospedagem própria, os estabelecimentos devem cadastrar uma conta própria de comerciante do Google Pay no Google Pay & Wallet Console e obter um Merchant ID. Esse Merchant ID é vinculado ao canal de pagamento da YabandPay.
Exemplo de configuração da API:
"tokenizationSpecification": {
"type": "PAYMENT_GATEWAY",
"parameters": {
"gateway": "yabandpay",
"gatewayMerchantId": "<Merchant ID assigned by YabandPay>"
}
}
-
Codifique o token recebido em Base64 e envie-o à API de pagamento da YabandPay em payment_token_object.
-
gateway: um valor fixo que deve ser "yabandpay".
-
Recomenda-se desativar a verificação de endereço, conforme a configuração abaixo:
billingAddressRequired: false
3. Hosted integration
A YabandPay oferece uma solução hospedada para Google Pay. Os estabelecimentos não precisam integrar um botão ou SDK do Google Pay. Envie um pedido pela API padrão e direcione o cliente à página hospedada da YabandPay em https://pay.yabandpay.com para concluir o pagamento.
No modo hospedado, Google Pay funciona na página da YabandPay, então os estabelecimentos não precisam configurar CSP, carregar scripts do Google ou definir uma versão do SDK.
Fluxo de integração:
-
O estabelecimento envia um pedido usando a Hosted Payment Solution (HPP) da YabandPay. A YabandPay retorna pay_url.
-
O cliente é redirecionado à página hospedada em pay_url.
-
O cliente conclui o pagamento com Google Pay nessa página.
-
Após o pagamento, o cliente é redirecionado a redirect_url, conforme configurado, e uma notificação assíncrona é enviada a notify_url.
Observações:
-
Os estabelecimentos não precisam carregar o JavaScript do Google Pay nem criar as próprias solicitações ao Google Pay.
-
A YabandPay trata de toda a descriptografia de backend e da verificação de transações do Google Pay.
-
Os estabelecimentos devem ativar Google Pay no portal de comerciantes da YabandPay.
-
A página hospedada exibe automaticamente o nome do estabelecimento, o valor do pedido e outras informações para o cliente identificar o pagamento.
-
Todas as transações são processadas usando o Google Merchant ID compartilhado da YabandPay.
4. Authorization methods
A YabandPay é compatível com os seguintes modos de autorização do Google Pay:
-
Há suporte para autorizações de transação única (DPAN + criptograma).
-
Não há suporte para Card-on-File (COF).
-
Não há suporte para autenticação biométrica FIDO.
5. Data submission requirements
-
Envie payment_token_object criptografado à YabandPay por HTTPS POST.
-
Todos os dados são criptografados em trânsito com TLS 1.2 ou posterior.
-
A YabandPay usa HSMs em conformidade com PCI DSS para descriptografia de backend.
6. Referências oficiais de integração do Google
Recursos gerais:
-
Registration and documentation: https://developers.google.com/
-
JS button example: https://jsfiddle.net/fw5t6caL/
Guias de integração de App:
-
Android integration overview: https://developers.google.com/pay/api/android/overview
-
Android integration checklist: https://developers.google.com/pay/api/android/guides/test-and-deploy/integration-checklist
-
Brand guidelines: https://developers.google.com/pay/api/android/guides/brand-guidelines
Guias de integração web:
-
Web integration overview: https://developers.google.com/pay/api/web/overview
-
Web integration checklist: https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist
-
Brand guidelines: https://developers.google.com/pay/api/web/guides/brand-guidelines
| Parâmetro | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| user | String | Conta de caixa UID | Obrigatório |
| sign | String | Signature | Obrigatório |
| method | String | v3.GooglePay | Obrigatório |
| time | Long | Timestamp | Obrigatório |
- Parâmetros
| Parâmetro | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| pay_method | String | online | Obrigatório |
| sub_pay_method | String | Google Pay | Obrigatório |
| operation | String | 1. Sales; 2.Authorisation | Obrigatório |
| order_id | String | ID do pedido do estabelecimento | Obrigatório |
| amount | String | Valor como cadeia numérica. Por exemplo, informe 24.99 for € 24.99. | Obrigatório |
| currency | String | Código da moeda ISO 4217 currency code, for example EUR or CHF | Obrigatório |
| description | String | Descrição do pedido | Obrigatório |
| demo | String | Campo personalizado | Opcional |
| 3ds_initiate | String | 3DS configuration. 01. Enable 3DS verification. | Obrigatório |
| payment_token_object | String | Cadeia "token" codificada em Base64, obtida do Google Pay | Obrigatório |
| cardinfo | String | Inclui o nome e o e-mail do titular do cartão | Obrigatório |
| cardinfo.card_holder | string | Nome do titular do cartão | Obrigatório |
| cardinfo.email | string | E-mail do titular do cartão | Obrigatório |
| timeout | String | Tempo de expiração em minutos (0-1440) | Obrigatório |
| redirect_url | String | URL de redirecionamento após o pagamento | Opcional |
| notify_url | String | URL de notificação assíncrona após o pagamento | Obrigatório |
| request_id | String | ID de solicitação exclusivo; recomenda-se uma combinação de letras e números com pelo menos 24 characters is recommended | Obrigatório |
Obtaining payment_token_object:
Exemplo de token retornado pelo Google Pay:
{
"signature": "MEUCIC+XtiYdlmjL2/1wEn33qnya8G4POk5jYkRNY5+MkdBlAiEAwoRYQu26ZopwpcOWlwUe/E+i4FKzpunCFZf44mS0cxQ\u003d",
"intermediateSigningKey": {
"signedKey": "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUJW8LjUtTV7esDMJLtCe8hYjlcQih8g7HP5bgO4ysma4/CwGq0CnZ5G0t0o44D92d9L3SfXS2GyK2PJMtE/NBg\\u003d\\u003d\",\"keyExpiration\":\"1724120515000\"}",
"signatures": ["MEYCIQC1ZWgFEaSR1pNbwTW6liQL7WXZQZExx1Idj7oQzHvoPQIhAOx1b+9CamfDeZUcHXpU01xTfa6EaaH3TgKaTBnrsuuG"]
},
"protocolVersion": "ECv2",
"signedMessage": "{\"encryptedMessage\":\"y+XA1ltwldTcmVSZwfVayP7b0hPNLODGyi2UgCCJcSSs0iBj73HML5eWcYBiT+T+ZP8SmV54U9E2AmuRwVeVYHai8Z/ajrxE7fM+Fv/e9IXt36WjC4SWhAHM8T/DkOlE6BcuoKAMz6iLkJJ40g0zAkUKijln5YEbhLXHRoh/5l/8wGNDxErI7JdNZ4cA9vh8go/gR2YXKxVngFH4PFHcGyKa4MKnYDATMBDdx/F+MI4vVtPLXruTPpG0HBgLlJct95LZl9T686sOWuwg4pWLLSqcbuqd+MAZZihy2FW+9cdKNXsebL91rRbq7dahtET1K90YzyWzM9CfntcjHf5YqhnssApnE+Jb7OZ+mn5hO27Z93by7G3Fgi7YxJqcW4o/4D+NIANe0BqwbFyhw5Un8rIKkXg//WD9TlFHl2oIgyOKnZLO8NrnfEffoxstvRft1enafD0DadUk2IL5+Q\\u003d\\u003d\",\"ephemeralPublicKey\":\"BFzys/8Oy4iBu0ZYlLcy5SNZUOKFQhTx/985qiMFKGssVm4Fk9hweWlemyClMbI216lbsPS4Sy15ab/75gW1v08\\u003d\",\"tag\":\"jpHUeHrZuI1y77wRisFznOadAzlP2je8RFpT9PFpmHs\\u003d\"}"
}
O campo payment_token_object é a cadeia base64_encode dos dados do token obtidos na integração com o Google Pay.
Exemplo de assinatura:
Parâmetros ordenados concatenados em uma cadeia de consulta no formato de URL
"3ds_initiate=01&amount=0.1&cardinfo={"card_holder":"John Smith","email":"JohnSmith@gmail.com"}¤cy=EUR&description=test&method=v3.GooglePayment¬ify_url=https://www.yabandpay.com/notify&operation=1&order_id=1723517503&pay_method=online&payment_token_object=eyJzaWduYXR1cmUiOiJNRVVDSUMrWHRpWWRsbWpMMi8xd0VuMzNxbnlhOEc0UE9rNWpZa1JOWTUrTWtkQmxBaUVBd29SWVF1MjZab3B3cGNPV2x3VWUvRStpNEZLenB1bkNGWmY0NG1TMGN4UVx1MDAzZCIsImludGVybWVkaWF0ZVNpZ25pbmdLZXkiOnsic2lnbmVkS2V5Ijoie1wia2V5VmFsdWVcIjpcIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVVKVzhMalV0VFY3ZXNETUpMdENlOGhZamxjUWloOGc3SFA1YmdPNHlzbWE0L0N3R3EwQ25aNUcwdDBvNDREOTJkOUwzU2ZYUzJHeUsyUEpNdEUvTkJnXHUwMDNkXHUwMDNkXCIsXCJrZXlFeHBpcmF0aW9uXCI6XCIxNzI0MTIwNTE1MDAwXCJ9Iiwic2lnbmF0dXJlcyI6WyJNRVlDSVFDMVpXZ0ZFYVNSMXBOYndUVzZsaVFMN1dYWlFaRXh4MUlkajdvUXpIdm9QUUloQU94MWIrOUNhbWZEZVpVY0hYcFUwMXhUZmE2RWFhSDNUZ0thVEJucnN1dUciXX0sInByb3RvY29sVmVyc2lvbiI6IkVDdjIiLCJzaWduZWRNZXNzYWdlIjoie1wiZW5jcnlwdGVkTWVzc2FnZVwiOlwieStYQTFsdHdsZFRjbVZTWndmVmF5UDdiMGhQTkxPREd5aTJVZ0NDSmNTU3MwaUJqNzNITUw1ZVdjWUJpVCtUK1pQOFNtVjU0VTlFMkFtdVJ3VmVWWUhhaThaL2FqcnhFN2ZNK0Z2L2U5SVh0MzZXakM0U1doQUhNOFQvRGtPbEU2QmN1b0tBTXo2aUxrSko0MGcwekFrVUtpamxuNVlFYmhMWEhSb2gvNWwvOHdHTkR4RXJJN0pkTlo0Y0E5dmg4Z28vZ1IyWVhLeFZuZ0ZINFBGSGNHeUthNE1LbllEQVRNQkRkeC9GK01JNHZWdFBMWHJ1VFBwRzBIQmdMbEpjdDk1TFpsOVQ2ODZzT1d1d2c0cFdMTFNxY2J1cWQrTUFaWmloeTJGVys5Y2RLTlhzZWJMOTFyUmJxN2RhaHRFVDFLOTBZenlXek05Q2ZudGNqSGY1WXFobnNzQXBuRStKYjdPWittbjVoTzI3WjkzYnk3RzNGZ2k3WXhKcWNXNG8vNEQrTklBTmUwQnF3YkZ5aHc1VW44cklLa1hnLy9XRDlUbEZIbDJvSWd5T0tuWkxPOE5ybmZFZmZveHN0dlJmdDFlbmFmRDBEYWRVazJJTDUrUVx1MDAzZFx1MDAzZFwiLFwiZXBoZW1lcmFsUHVibGljS2V5XCI6XCJCRnp5cy84T3k0aUJ1MFpZbExjeTVTTlpVT0tGUWhUeC85ODVxaU1GS0dzc1ZtNEZrOWh3ZVdsZW15Q2xNYkkyMTZsYnNQUzRTeTE1YWIvNzVnVzF2MDhcdTAwM2RcIixcInRhZ1wiOlwianBIVWVIclp1STF5Nzd3UmlzRnpuT2FkQXpsUDJqZThSRnBUOVBGcG1Ic1x1MDAzZFwifSJ9&redirect_url=https://www.yabandpay.com/redirect_url&request_id=g77ur3oqhkqd348iljrb04pbj412rka3&sub_pay_method=Google Pay&time=1723517503&timeout=0&user=YOUR_CASHIER_UID"
Assine a stringA usando secret_key
A assinatura resultante é:
"YOUR_SIGNATURE"
Request example (operation=1 Sales):
{
"user": "YOUR_CASHIER_UID",
"sign": "YOUR_SIGNATURE",
"method": "v3.GooglePay",
"time": 1721979693,
"data": {
"description": "test",
"timeout": "0",
"pay_method": "online",
"sub_pay_method": "Google Pay",
"order_id": 1721979693,
"amount": "0.1",
"currency": "EUR",
"operation": "1",
"redirect_url": "https://www.yabandpay.com/redirect_url",
"notify_url": "https://www.yabandpay.com/notify",
"3ds_initiate": "01",
"payment_token_object": "eyJzaWduYXR1cmUiOiJNRVVDSVFDOEJmbDJrSkttUjVvOUxNc3RCYnA0MGtBRW9FQnh4SlQ4VTl2UVgyc1JMd0lnTUJTOWpidDFxR0NoVmxmeElDUTdYOHBKM3VYN1lkY0M5UFd1eEVubmo5b1x1MDAzZCIsImludGVybWVkaWF0ZVNpZ25pbmdLZXkiOnsic2lnbmVkS2V5Ijoie1wia2V5VmFsdWVcIjpcIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVdabXZVODU3SnlOV2ZEbFFuVzBaRG1MUEpoSG91dlpsT09aZk5ORm9nWElJVlRVTnNYNGJ0MEZFakdpVEs4QTNGb094a0d5NStrQ0ZCWDUyL0hhcS93XHUwMDNkXHUwMDNkXCIsXCJrZXlFeHBpcmF0aW9uXCI6XCIxNzIwNTg5NjI3MTk5XCJ9Iiwic2lnbmF0dXJlcyI6WyJNRVVDSVFDbWpKSmFMYzUxWEo3T3dEaUY5QVVIVloyVytGMFJSVWdnNmI5YUc0S2hiUUlnVDBKeVdjRHNlcEpyc2ZyM0xzekdtTUpUNkxZSitzRmZ5YWtmYlIweHg1c1x1MDAzZCJdfSwicHJvdG9jb2xWZXJzaW9uIjoiRUN2MiIsInNpZ25lZE1lc3NhZ2UiOiJ7XCJlbmNyeXB0ZWRNZXNzYWdlXCI6XCJBaVhPT3BJYitNdGxSWnV3MW9nL3ZLVVdvT3FmVEcwZndMcG14WCtuSkFPRXJPQkFYa3dWWG8zd01DaVpQaEppZVN3dHZBNnFaVXpWVTBOVWJaWTVSdE1qZWxUWnVHV3dKcjdRVU9Ob3NXRzFXSmd4bjRHVVRPL2g2Nzdpd2ROajgzbVRDdWNPZnNHeDVMcTZCdXZXT1F0a21Gdk9qSnVSN1daQ2k3QTl4S2tWckxvVEsyWEpBNmNxb0pZMERpa1NMOU1WQW5JWVNyenpCakFwWVc0SGxXTm14ZnJYUUUzYTFKTW95UlRDWWR4azZwUGVzNi9xOG5zN2Fid1RHUGNicmNVZndaN0hiSnFWRVd1aFZxTWpxZW50RHgvRXd3SHFYd0s0YUhMc0hvOGVkc09jbEdMTXBNeFVVOHc0MHJ2ZFNxc3NyUEFmN0RnSGoydkNBNUt2amMrcnBaaGY0Wnl1UkFacHpHSmNvYXNTV3JVeXNqUG5FcFNyVnpzbWV3ejB1K2JyYmNFOTlFNnd0cHhnWVZwUVl0d3FmY2FRY3ZJWUZaT3FXaEJGNFpXcUZoUmdGSkZlQVJSQU1ndnlURmhDaVhObExqcFZcIixcImVwaGVtZXJhbFB1YmxpY0tleVwiOlwiQk83SUpTMVNBanlqWG9EUTVOblBqZmk3dWJ3UVB0Mkx1OFZVQm9SVlh0Q2pWV3h4UUNLWm9sbmc0cnBmUEdaVlRyQzNwOWRUMEtveWhBc2NsR0Z5ZFhFXHUwMDNkXCIsXCJ0YWdcIjpcImtoT1dIRUlSSzBuWVBiWU1OdnhkZVNUTzlsYWJRdlBYZWQrQ1NLZTFyZ1FcdTAwM2RcIn0ifQ==",
"cardinfo": "{\"card_holder\":\"John Smith\",\"email\":\"JohnSmith@gmail.com\"}",
"request_id": "2cwmm7wubqkgtzbtzjhvhkaubev81a0r"
}
}
Response example (PAN_ONLY):
Observação: para PAN_ONLY, redirecione para o url retornado para concluir a verificação 3DS. Após o 3DS, o cliente será redirecionado para redirect_url:
{
"status": true,
"code": "200",
"data": {
"order_id": "YOUR_ORDER_ID",
"trade_id": "e684679e-658b-ac70-fd9e-e4959e147e00",
"amount": "0.10",
"currency": "EUR",
"sub_pay_method": "Google Pay",
"state": "processing",
"url": "https://pay.yabandpay.com/dispose_shift4_googlepay_3ds?data=eyJwc3QiOiJlNjg0Njc5ZS02NThiLWFjNzAtZmQ5ZS1lNDk1OWUxNDdlMDAiLCJzaWduX3RyYWRlX2lkIjoiNWZkNzc5Zjg0MmY1ZTc2ZjVmNGQzNGQyNGQ5MGZkMzYyZWMyZGY5ZjU0ODk5ZjBlZDgxYTRkYWUxODM2MmEwNCIsInVzZXIiOiIwMTY2ODMifQ=="
},
"message": "",
"response_id": "202408131051432400124088"
}
Response example (CRYPTOGRAM_3DS):
Observação: para CRYPTOGRAM_3DS, não é necessária outra verificação 3DS e state é retornado diretamente:
{
"status": true,
"code": "200",
"data": {
"order_id": "YOUR_ORDER_ID",
"trade_id": "e684679e-658b-ac70-fd9e-e4959e147e00",
"amount": "0.10",
"currency": "EUR",
"sub_pay_method": "Google Pay",
"state": "paid"
},
"message": "",
"response_id": "202408131051432400124088"
}
Informações adicionais:
Resultado da resposta:
-
Uma solicitação bem-sucedida retorna "status": true.
-
Uma solicitação malsucedida retorna "status": false.
Avalie as informações retornadas: se contiverem url, redirecione para esse endereço; se não contiverem url, leia state diretamente.
Para PAN_ONLY, depois que o usuário conclui a verificação 3DS em url, ele é redirecionado de volta a redirect_url de forma síncrona. Recomendamos fortemente usar Order Query e Asynchronous Notifications para sincronizar e atualizar o status do pagamento e manter as informações corretas em tempo real. a) Se o status do pedido state for paid, o pagamento foi bem-sucedido; b) se o status do pedido state for authorized, a autorização foi bem-sucedida. Para capturar os fundos após a autorização bem-sucedida, chame a API de captura de autorização.
Códigos de resposta:
| Status | Code | Message |
|---|---|---|
| true | 200 | |
| false | -1000 | Internal error |
| false | -403 | The signature Error |
| false | -2001 | The user not exist |
| false | -3001 | Required field is missing |
| false | -4118 | Incorrect request ID |
