API REFERENCE
Google Pay ™
Paramètres
| Parameter | Type | Description | Obligatoire |
|---|---|---|---|
| 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验证; | ✓ |
S’applique aux parcours de paiement compatibles avec Google Pay
Google Pay fonctionne dans les navigateurs Web et les applications des principaux appareils de bureau et mobiles. Via Google Pay, YabandPay prend en charge les cartes de débit et de crédit des réseaux suivants :
-
Visa / VPay
-
Mastercard / Maestro
-
UnionPay
Le compte de règlement doit être situé dans l’Espace économique européen (EEE) ou au Royaume-Uni.
Conseil
Tous les marchands qui utilisent Google Pay doivent respecter les conditions suivantes :
- Google Pay APIs Acceptable Use Policy
- Google Pay API Terms of Service
En intégrant Google Pay via la solution hébergée de YabandPay, les marchands acceptent les conditions ci-dessus et s’engagent à les respecter.
1. Types d’identifiants et exigences 3DS
Google Pay prend en charge les deux types d’identifiants suivants :
-
PAN_ONLY: Renvoie une enveloppe chiffrée contenant le numéro de compte principal en clair (cardInfo.cardDetails) et le réseau de carte (cardInfo.cardNetwork), sans cryptogramme.
-
CRYPTOGRAM_3DS: Renvoie des identifiants chiffrés basés sur un jeton, contenant un jeton réseau (DPAN) et un cryptogramme, pour les transactions nécessitant un niveau de sécurité supérieur.
3DS requirements:
Lorsque vous recevez PAN_ONLY des identifiants via l’API Google Pay, vous devez effectuer la vérification 3D Secure (définissez 3ds_initiate=01). YabandPay rejette les transactions sans vérification 3DS.
Pour assurer la compatibilité et la sécurité, suivez ces recommandations d’intégration :
-
Activez les deux ["CRYPTOGRAM_3DS", "PAN_ONLY"] dans la configuration frontend de Google Pay.
-
Définissez toujours 3ds_initiate=01 lors de l’envoi d’une demande de paiement à YabandPay.
-
Le backend de YabandPay détermine s’il faut effectuer une vérification 3D Secure en fonction du type d’identifiant.
2. Intégration dans une application ou sur le Web (hébergement autonome)
Les marchands peuvent intégrer l’API Google pour lancer le parcours de paiement sur leur propre site Web ou application. La procédure et la configuration sont décrites ci-dessous :
Parcours de paiement :
Google Pay utilise les identifiants d’une carte liée à l’appareil (DPAN, jeton réseau) plutôt que le numéro réel de la carte (PAN). Le parcours de paiement est le suivant :
-
Le client sélectionne le bouton Google Pay sur le site Web ou dans l’application du marchand.
-
Le client autorise le paiement avec Face ID, Touch ID ou un mot de passe.
-
Google renvoie un jeton chiffré.
-
Le marchand transmet le jeton à YabandPay pour traitement.
Remarque : en mode autonome, les marchands doivent enregistrer leur propre compte marchand Google Pay dans Google Pay & Wallet Console et obtenir un Merchant ID. Cet identifiant est associé au canal de paiement YabandPay.
API configuration example:
"tokenizationSpecification": {
"type": "PAYMENT_GATEWAY",
"parameters": {
"gateway": "yabandpay",
"gatewayMerchantId": "<Merchant ID assigned by YabandPay>"
}
}
-
Encodez le jeton reçu en Base64 et transmettez-le à l’API de paiement YabandPay dans payment_token_object.
-
gateway: une valeur fixe qui doit être "yabandpay".
-
Il est recommandé de désactiver la vérification de l’adresse, comme indiqué ci-dessous :
billingAddressRequired: false
3. Intégration hébergée
YabandPay propose une solution Google Pay hébergée. Les marchands n’ont pas besoin d’intégrer de bouton Google Pay ni de SDK. Soumettez une commande via l’API standard et redirigez le client vers la page hébergée de YabandPay à https://pay.yabandpay.com to complete the Google Pay payment.
En mode hébergé, Google Pay s’exécute sur la page de YabandPay ; les marchands n’ont donc pas à configurer CSP, charger les scripts Google ni définir une version du SDK.
Integration flow:
-
Le marchand soumet une commande à l’aide de Solution de paiement hébergée (HPP). YabandPay renvoie pay_url.
-
Le client est redirigé vers la page hébergée à pay_url.
-
Le client effectue son paiement Google Pay sur cette page.
-
Après le paiement, le client est redirigé vers le redirect_url, configuré, et une notification asynchrone est envoyée à notify_url.
Notes:
-
Les marchands n’ont pas besoin de charger JavaScript Google Pay ni de construire eux-mêmes les requêtes Google Pay.
-
YabandPay prend en charge le déchiffrement backend et la vérification des transactions Google Pay.
-
Les marchands doivent activer Google Pay dans le portail marchand YabandPay.
-
La page de paiement hébergée affiche automatiquement le nom du marchand, le montant de la commande et d’autres informations afin que le client puisse identifier le paiement.
-
Toutes les transactions sont traitées à l’aide du Google Merchant ID partagé de YabandPay.
4. Modes d’autorisation
YabandPay prend en charge les modes d’autorisation Google Pay suivants :
-
Les autorisations de transactions ponctuelles (DPAN + cryptogramme) sont prises en charge.
-
Card-on-File (COF) n’est pas pris en charge.
-
L’authentification biométrique FIDO n’est pas prise en charge.
5. Exigences de transmission des données
-
Transmettez le payment_token_object chiffré à YabandPay via HTTPS POST.
-
Toutes les données sont chiffrées en transit avec TLS 1.2 ou une version ultérieure.
-
YabandPay utilise des HSM conformes à PCI DSS pour le déchiffrement backend.
6. Références officielles d’intégration Google
Ressources générales :
-
Inscription et documentation : https://developers.google.com/
-
Exemple de bouton JS : https://jsfiddle.net/fw5t6caL/
Guides d’intégration pour applications :
-
Présentation de l’intégration Android : https://developers.google.com/pay/api/android/overview
-
Liste de vérification de l’intégration Android : https://developers.google.com/pay/api/android/guides/test-and-deploy/integration-checklist
-
Consignes de marque : https://developers.google.com/pay/api/android/guides/brand-guidelines
Guides d’intégration Web :
-
Présentation de l’intégration Web : https://developers.google.com/pay/api/web/overview
-
Liste de vérification de l’intégration Web : https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist
-
Consignes de marque : https://developers.google.com/pay/api/web/guides/brand-guidelines
| Paramètre | Type | Description | Obligatoire |
|---|---|---|---|
| user | String | Cashier account UID | Obligatoire |
| sign | String | Signature | Obligatoire |
| method | String | v3.GooglePay | Obligatoire |
| time | Long | Timestamp | Obligatoire |
- Parameters
| Paramètre | Type | Description | Obligatoire |
|---|---|---|---|
| pay_method | String | online | Obligatoire |
| sub_pay_method | String | Google Pay | Obligatoire |
| operation | String | 1. Sales; 2.Authorisation | Obligatoire |
| order_id | String | Merchant order ID | Obligatoire |
| amount | String | Amount as a numeric string. For example, enter 24.99 for € 24.99. | Obligatoire |
| currency | String | ISO 4217 currency code, for example EUR or CHF | Obligatoire |
| description | String | Order description | Obligatoire |
| demo | String | Custom field | Facultatif |
| 3ds_initiate | String | 3DS configuration. 01. Enable 3DS verification. | Obligatoire |
| payment_token_object | String | Base64-encoded "token" string obtained from Google Pay | Obligatoire |
| cardinfo | String | Includes the cardholder name and email | Obligatoire |
| cardinfo.card_holder | string | Cardholder name | Obligatoire |
| cardinfo.email | string | Cardholder email | Obligatoire |
| timeout | String | Expiration time in minutes (0-1440) | Obligatoire |
| redirect_url | String | Redirect URL after payment | Facultatif |
| notify_url | String | Asynchronous notification URL after payment | Obligatoire |
| request_id | String | Unique request ID; a combination of digits and letters at least 24 characters is recommended | Obligatoire |
Obtention de payment_token_object:
Exemple de jeton renvoyé par 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\"}"
}
Le champ payment_token_object est la chaîne base64_encode des données de jeton obtenues via l’intégration Google Pay.
Signature example:
Sorted parameters concatenated into a URL-style query string
"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"
Sign stringA using secret_key
Le champ resulting signature is:
"YOUR_SIGNATURE"
Exemple de requête (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"
}
}
Exemple de réponse (PAN_ONLY):
Note: for PAN_ONLY, redirect to the returned url to complete 3DS verification. After 3DS, the customer is redirected to 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"
}
Exemple de réponse (CRYPTOGRAM_3DS):
Note: for CRYPTOGRAM_3DS, no further 3DS verification is required, and state is returned directly:
{
"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"
}
Informations complémentaires:
Résultat de la réponse:
-
Une requête réussie renvoie "status": true.
-
Une requête échouée renvoie "status": false.
Evaluate the returned information: if it contains url, redirect to it; if it does not contain url, read state directly.
For PAN_ONLY, after the user completes 3DS verification at url, they are redirected back to redirect_url synchronously. Nous recommandons vivement d’utiliser à la fois Order Query and Asynchronous Notifications afin de synchroniser et mettre à jour le statut du paiement et de maintenir les informations exactes en temps réel. a) If the order status state is paid, payment succeeded; b) if the order status state is authorized, authorization succeeded. To capture funds after successful authorization, call the authorization capture API.
Response codes:
| 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 |
