I progetti di ordini end-to-end consentono di configurare la modalità di pagamento della sandbox quando si utilizzano il test rapido o l'ambiente sandbox. Mentre testi il feed di dati, puoi passare dalla modalità di pagamento sandbox a quella di produzione e viceversa. Per testare i pagamenti per il tuo progetto Ordering End-to-End senza addebitare le carte, utilizza Sandbox come Modalità di pagamento. L'ambiente di produzione non supporta la modalità di pagamento sandbox.
Configurazione
Per attivare la modalità di pagamento sandbox nell'ambiente sandbox, segui questi passaggi:
- Nel Centro azioni, vai a Configurazione > Funzionalità.
- Nella scheda Funzionalità dell'account, individua il pulsante di opzione Modalità di pagamento.
- Seleziona l'opzione Sandbox e fai clic su Salva modifiche.
Per attivare la modalità di pagamento sandbox nell'ambiente di test rapido, segui questi passaggi:
- Nel Centro azioni, vai a Feed > Test rapido.
- Seleziona il pulsante di opzione Utilizza la sandbox per GPay.
Quando è selezionata la modalità di pagamento Sandbox:
- L'ordine end-to-end configura Google Pay in modo da restituire token dello strumento che contengono i dati della carta di prova anziché i dettagli effettivi della carta.
- Il campo
isInSandbox
è impostato sutrue
in CheckoutRequestMessage e SubmitOrderRequestMessage.
Le diverse combinazioni di Environment, Payment Mode e isInSandbox sono le seguenti:
Ambiente | Modalità di pagamento | isInSandbox |
---|---|---|
Test rapido | Sandbox | true |
Test rapido | Produzione | falso |
Sandbox | Sandbox | true |
Sandbox | Produzione | falso |
Produzione | Produzione | falso |
Messaggio di risposta al pagamento
Il CheckoutResponseMessage
inviato dal tuo servizio web di ordinazione di cibo contiene
PaymentOptions
. Quando
configuri il pagamento,
fornisci opzioni di pagamento segnaposto utilizzando un gateway di pagamento di esempio.
- Assicurati di aggiornare il valore
CheckoutResponseMessage
inviato dal tuo servizio web con la configurazione di tokenizzazione appropriata.
Esempi di opzioni di pagamento
Di seguito sono riportati esempi di oggetti JSON PaymentOptions
di un
CheckoutResponseMessage
per vari gateway di pagamento che utilizzano chiavi sandbox:
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"braintree\",\"braintree:apiVersion\":\"v1\",\"braintree:sdkVersion\":\"1.4.0\",\"braintree:merchantId\":\"YOUR_MERCHANT_ID\",\"braintree:clientKey\":\"YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripe\",\"stripe:version\":\"2018-10-31\",\"stripe:publishableKey\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripev2\",\"gatewayMerchantId\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
Segnalare le transazioni sandbox
Quando la modalità di pagamento sandbox è attivata, il campo isInSandbox
viene incluso nella richiesta e impostato su true
per le richieste in arrivo all'endpoint del servizio web (CheckoutRequestMessage
e SubmitOrderRequestMessage
).
Esegui le seguenti operazioni quando il campo isInSandbox
è impostato su true
:
- Utilizza le chiavi della sandbox anziché quelle di produzione nella configurazione della tokenizzazione per il tuo gateway di pagamento. La maggior parte dei sistemi di elaborazione dei pagamenti fornisce chiavi API sia per la sandbox sia per la produzione.
- Non attivare alcuna comunicazione con il fornitore di servizi web, in genere un Ristorante, in quanto non deve essere informato di eventuali transazioni nella sandbox.
Le carte di credito di prova non sono supportate, anche se la sandbox delle transazioni è attivata. Devi utilizzare una carta di credito reale quando effettui una transazione. Tuttavia, i token degli strumenti sandbox contengono i dettagli della carta di test che non sono addebitati.
Elaborare i pagamenti
Quando un cliente invia l'ordine, Ordering End-to-End invia il messaggio SubmitOrderRequestMessage al tuo endpoint del servizio web. Il token di Google Pay è incluso come stringa con codifica base64 nel campo SubmitOrderRequestMessage
instrumentToken. Per elaborare il pagamento del cliente, esegui una delle seguenti operazioni in base al tuo gateway di pagamento:
Gateway di pagamento | |
---|---|
Stripe o Braintree | Decodifica la stringa del token codificata in base64 e invia i dati appropriati contenuti nel payload del token decodificato al tuo gateway di pagamento per elaborare il pagamento. |
Tutti gli altri gateway di pagamento (incluso stripev2) | Invia la stringa completa del token con codifica base64 all'API del tuo gateway di pagamento per elaborare il pagamento. La struttura del token del metodo di pagamento di Google Pay contiene campi criptati che il tuo gateway di pagamento può decriptare per elaborare il pagamento. |
Esempio di payload decodificato
Gli esempi seguenti mostrano i payload decodificati restituiti nel campo instrumentToken
per vari gateway di pagamento:
Questo esempio JSON rappresenta un token di pagamento decodificato quando si utilizza Braintree. Estrai il valore del campo nonce
e invialo a Braintree per l'elaborazione del pagamento.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Se Google Pay non è attivo nel pannello di controllo di Braintree, il
instrumentToken
campo decodifica il seguente errore:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
Questo esempio JSON rappresenta un token di pagamento decodificato quando utilizzi Stripe.
Estrai il valore del campo id
e invialo a Stripe per elaborare il pagamento.
{ "id": "tok_abcdefg1234...", "object": "token", "card": { "id": "card_abcde...", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "cvc_check": null, "dynamic_last4": "1234", "exp_month": 1, "exp_year": 2019, "funding": "credit", "last4": "1234", "metadata": {}, "name": null, "tokenization_method": "android_pay" }, "client_ip": "74.125.177.36", "created": 1500483670, "livemode": false, "type": "card", "used": false }
Questo esempio JSON rappresenta un token di pagamento decodificato quando utilizzi stripev2.
{ "protocolVersion":"ECv2", "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d", "intermediateSigningKey":{ "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}", "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"] }, "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}" }
Questo esempio JSON rappresenta un token di pagamento decodificato quando utilizzi Square.
{ "signature": "MEYCIQCMAsWCrY2GfHM/gMAKiK3QCKJJOIkjZeTQGzcdWgvrhwIhAJ3mXwe+wmU9z+Apv1rTDsCVQBzayvWzT4ywxytrSPla", "protocolVersion": "ECv1", "signedMessage": "{\"encryptedMessage\":\"WkYz21EYxojwTqWh6A3oYXtmctu1PlqF+tNYPA4cq017nqj16Ge7kaVR7MI1XG1OrCmcMwP20u5Zb5E28XYan8UI8M4L120orvE9XU1ivZuO4Myq2O3ue8v0lY1MDx8Mnk+5mkAv1kLmzJc91gEQ2leIwrPuMDYqsQUHzTR3Jikh5/v+iWRkyQPKKxgj5c6Erdu/pkg1xV6fQJcHNdq9Jw11zl95x6eQurxw2Uy8v811azGr+noKJbw0uye72MkhmzMS5QKOzwGT9nBfO+zPLYSEewsdOcPbNZF94zk/KU9nxom/gQ+eYEMIZvOj9lO4gQqDqR6DyWyStk7MjeXQTvXWZBI1JpqvOrlTHL0Ct18RpbfOio7hAtafzb0NnqEKlsun+SSpJmvI7U6n6Cnu1JUMUGfT/Jsi6RJ3N6pRw2BubeR1925Xl3jXQnlz5io6X1YRlAcnshZyf6CjBpKES32aTf1m1IHRhZ2Jj6i/g7Y\\u003d\",\"ephemeralPublicKey\":\"BDQA0Cf//BHPcnB0R/GRrWa2g7T1QF97eOhAYy7l45M+kJnsoeL9OaUQV/KIMLvcgbmKkZIm2FQeL7ftd6S4q4c\\u003d\",\"tag\":\"DHtVyXNo+PDr7Thi/EjBBbsr2k7y1SwGIn0D9mmPTJc\\u003d\"}" }
Per elaborare il pagamento utilizzando il token, restituisci la stringa del token codificata in base64 con la tua richiesta all'API di pagamento di Square nel campo source_id
con prefisso gpay:
{ "idempotency_key": "ID", "source_id": "gpay:GOOGLE_PAY_BASE64_ENCODED_TOKEN", "amount_money": { "amount": 50, "currency": "USD" }, "location_id": "LOCATION_ID", "billing_address": { "postal_code": "11111" } }
Di seguito è riportato un esempio di Node.js che decodifica il valore instrumentToken
codificato in base 64 di Braintree:
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }