API REFERENCE
Google Pay ™
Voor betaalstromen die Google Pay ondersteunen
Google Pay werkt in webbrowsers en apps op gangbare desktop- en mobiele apparaten. Via Google Pay ondersteunt YabandPay debet- en creditcards van de volgende kaartnetwerken:
- Visa / VPay
- Mastercard / Maestro
- UnionPay
De vereffeningsrekening moet zich in de Europese Economische Ruimte (EER) of het Verenigd Koninkrijk bevinden.
Tip
Alle handelaren die Google Pay gebruiken, moeten aan de volgende voorwaarden voldoen:
- Beleid voor aanvaardbaar gebruik van Google Pay-API's
- Servicevoorwaarden voor de Google Pay-API Door Google Pay via de gehoste oplossing van YabandPay te integreren, aanvaarden handelaren deze voorwaarden en stemmen zij ermee in deze na te leven.
1. Credentialtypen en 3DS-vereisten
Google Pay ondersteunt de volgende twee credentialtypen:
- PAN_ONLY: Retourneert een versleutelde wrapper met het leesbare primaire rekeningnummer (cardInfo.cardDetails) en het kaartnetwerk (cardInfo.cardNetwork), zonder cryptogram.
- CRYPTOGRAM_3DS: Retourneert tokengebaseerde, versleutelde credentials met een netwerktoken (DPAN) en cryptogram, voor transacties die een hoger beveiligingsniveau vereisen.
3DS-vereisten:
Wanneer u via de Google Pay-API PAN_ONLY-credentials ontvangt, moet u 3D Secure-verificatie uitvoeren (stel 3ds_initiate=01 in). YabandPay weigert transacties zonder 3DS-verificatie.
Volg voor compatibiliteit en beveiliging deze integratieaanbevelingen:
- Schakel zowel ["CRYPTOGRAM_3DS", "PAN_ONLY"] in de frontendconfiguratie van Google Pay in.
- Stel altijd 3ds_initiate=01 in wanneer u een betalingsverzoek naar YabandPay verzendt.
- De backend van YabandPay bepaalt op basis van het credentialtype of 3D Secure moet worden uitgevoerd.
2. Integratie in app of website (zelf gehost)
Handelaren kunnen de Google-API integreren om de betaalstroom op hun eigen website of in hun app te starten. Hieronder staan het proces en de configuratie beschreven:
Betaalstroom:
Google Pay gebruikt credentials voor een aan het apparaat gekoppelde kaart (DPAN, netwerktoken) in plaats van het werkelijke kaartnummer (PAN). De betaalstroom verloopt als volgt:
- De klant kiest de Google Pay-knop op de website of in de app van de handelaar.
- De klant autoriseert met Face ID, Touch ID of een wachtwoord.
- Google retourneert een versleuteld token.
- De handelaar stuurt het token ter verwerking naar YabandPay.
Opmerking: in de zelf gehoste modus moeten handelaren hun eigen Google Pay-verkopersaccount registreren in de Google Pay & Wallet Console en een Merchant ID verkrijgen. Deze Merchant ID wordt gekoppeld aan het betaalkanaal van YabandPay.
Voorbeeld van API-configuratie:
"tokenizationSpecification": {
"type": "PAYMENT_GATEWAY",
"parameters": {
"gateway": "yabandpay",
"gatewayMerchantId": "<Merchant ID assigned by YabandPay>"
}
}
- Codeer het ontvangen token met Base64 en stuur het via payment_token_object naar de betalings-API van YabandPay.
- gateway: een vaste waarde die "yabandpay" moet zijn.
- Het uitschakelen van adresverificatie wordt aanbevolen, zoals hieronder geconfigureerd:
billingAddressRequired: false
3. Gehoste integratie
YabandPay biedt een gehoste Google Pay-oplossing. Handelaren hoeven geen Google Pay-knop of SDK te integreren. Dien een bestelling in via de standaard-API en stuur de klant naar de gehoste pagina van YabandPay op https://pay.yabandpay.com om met Google Pay te betalen.
In de gehoste modus wordt Google Pay uitgevoerd op de pagina van YabandPay. Handelaren hoeven daarom geen CSP te configureren, Google-scripts te laden of een SDK-versie in te stellen.
Integratiestroom:
- De handelaar dient een bestelling in via de Hosted Payment Solution (HPP) van YabandPay. YabandPay retourneert pay_url.
- De klant wordt doorgestuurd naar de gehoste pagina op pay_url.
- De klant voltooit de Google Pay-betaling op die pagina.
- Na de betaling wordt de klant doorgestuurd naar de geconfigureerde redirect_url en wordt een asynchrone melding verzonden naar notify_url.
Opmerkingen:
- Handelaren hoeven zelf geen Google Pay-JavaScript te laden of Google Pay-verzoeken samen te stellen.
- YabandPay verzorgt alle ontsleuteling aan de backend en de transactiecontrole voor Google Pay.
- Handelaren moeten Google Pay inschakelen in het YabandPay-verkopersportaal.
- De gehoste betaalpagina toont automatisch de naam van de handelaar, het bestelbedrag en andere informatie, zodat de klant de betaling kan herkennen.
- Alle transacties worden verwerkt met de gedeelde Google Merchant ID van YabandPay.
4. Autorisatiemethoden
YabandPay ondersteunt de volgende Google Pay-autorisatiemethoden:
- Autorisaties voor eenmalige transacties (DPAN + cryptogram) worden ondersteund.
- Card-on-File (COF) wordt niet ondersteund.
- FIDO-biometrische verificatie wordt niet ondersteund.
5. Vereisten voor gegevensoverdracht
- Verzend de versleutelde payment_token_object via HTTPS POST naar YabandPay.
- Alle gegevens worden tijdens de overdracht versleuteld met TLS 1.2 of hoger.
- YabandPay gebruikt PCI DSS-conforme HSM's voor ontsleuteling aan de backend.
6. Officiële Google-referenties voor integratie
Algemene informatiebronnen:
- Registratie en documentatie: https://developers.google.com/
- Voorbeeld van een JS-knop: https://jsfiddle.net/fw5t6caL/
Integratiehandleidingen voor apps:
- Overzicht van Android-integratie: https://developers.google.com/pay/api/android/overview
- Controlelijst voor Android-integratie: https://developers.google.com/pay/api/android/guides/test-and-deploy/integration-checklist
- Merkrichtlijnen: https://developers.google.com/pay/api/android/guides/brand-guidelines
Integratiehandleidingen voor het web:
- Overzicht van webintegratie: https://developers.google.com/pay/api/web/overview
- Controlelijst voor webintegratie: https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist
- Merkrichtlijnen: https://developers.google.com/pay/api/web/guides/brand-guidelines
API-URL:https://mapi.yabandpay.com/Payments
Methode:POST
POST gegevenstype:Json
| Parameter | Type | Beschrijving | Verplicht |
|---|---|---|---|
| user | String | Kassiersaccount UID | Verplicht |
| sign | String | Signature | Verplicht |
| method | String | v3.GooglePay | Verplicht |
| time | Long | Timestamp | Verplicht |
- Parameters
| Parameter | Type | Beschrijving | Verplicht |
|---|---|---|---|
| pay_method | String | online | Verplicht |
| sub_pay_method | String | Google Pay | Verplicht |
| operation | String | 1. Verkoop; 2. Autorisatie | Verplicht |
| order_id | String | Bestel-ID van de handelaar | Verplicht |
| amount | String | Bedrag als numerieke tekenreeks. Voer bijvoorbeeld 24.99 in voor € 24.99. | Verplicht |
| currency | String | ISO-valutacode 4217, bijvoorbeeld EUR of CHF | Verplicht |
| description | String | Bestelomschrijving | Verplicht |
| demo | String | Aangepast veld | Optioneel |
| 3ds_initiate | String | 3DS-configuratie. 01. Schakel 3DS-verificatie in. | Verplicht |
| payment_token_object | String | Met Base64 gecodeerde tekenreeks met het "token" dat via Google Pay is verkregen | Verplicht |
| cardinfo | String | Bevat de naam en het e-mailadres van de kaarthouder | Verplicht |
| cardinfo.card_holder | string | Naam van de kaarthouder | Verplicht |
| cardinfo.email | string | E-mailadres van de kaarthouder | Verplicht |
| timeout | String | Vervaltijd in minuten (0-1440) | Verplicht |
| redirect_url | String | Omleidings-URL na betaling | Optioneel |
| notify_url | String | URL voor asynchrone melding na betaling | Verplicht |
| request_id | String | Unieke aanvraag-ID; aanbevolen wordt een combinatie van cijfers en letters van ten minste 24 tekens | Verplicht |
payment_token_object ophalen:
Voorbeeld van een token dat door Google Pay wordt geretourneerd:
{
"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\"}"
}
Het veld payment_token_object is de base64_encode-tekenreeks van de tokengegevens die via de Google Pay-integratie zijn verkregen.
Handtekeningvoorbeeld:
Gesorteerde parameters aaneengevoegd tot een queryreeks in URL-stijl
"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"
Onderteken stringA met secret_key
De resulterende handtekening is:
"YOUR_SIGNATURE"
Aanvraagvoorbeeld (operation=1 Verkoop):
{
"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"
}
}
Antwoordvoorbeeld (PAN_ONLY):
Opmerking: stuur voor PAN_ONLY de klant door naar de geretourneerde url om de 3DS-verificatie te voltooien. Daarna wordt de klant doorgestuurd naar 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"
}
Antwoordvoorbeeld (CRYPTOGRAM_3DS):
Opmerking: voor CRYPTOGRAM_3DS is geen verdere 3DS-verificatie nodig en wordt state rechtstreeks geretourneerd:
{
"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"
}
Aanvullende informatie:
Resultaat van het antwoord:
-
Een geslaagde aanvraag retourneert "status": true.
-
Een mislukte aanvraag retourneert "status": false.
Beoordeel de geretourneerde gegevens: als deze url bevatten, stuur de klant er dan naartoe; als ze geen url bevatten, lees dan state rechtstreeks uit.
Voor PAN_ONLY wordt de klant, nadat deze de 3DS-verificatie op url heeft voltooid, synchroon teruggestuurd naar redirect_url. We raden sterk aan zowel Bestelling opvragen als Asynchrone meldingen te gebruiken om de betalingsstatus actueel en nauwkeurig te houden. a) Als de bestelstatus state op paid staat, is de betaling geslaagd; b) als de bestelstatus state op authorized staat, is de autorisatie geslaagd. Roep na een geslaagde autorisatie de API voor het incasseren van de autorisatie aan om het bedrag te incasseren.
Antwoordcodes:
| Status | Code | Bericht |
|---|---|---|
| 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 |
