L'ordine di progetti end-to-end consente di configurare la modalità di pagamento sandbox quando si utilizza l'ambiente di test rapido o l'ambiente sandbox. Durante il test del feed di dati, puoi passare dalla modalità di pagamento sandbox alla modalità di produzione e viceversa. Per testare i pagamenti del tuo progetto end-to-end degli ordini senza addebitare il costo delle 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 nella sandbox nell'ambiente sandbox:
- 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 nella sandbox nell'ambiente di test rapido, segui questi passaggi:
- Nel Centro azioni, vai a Feed > Test rapido.
- Seleziona il pulsante di opzione Utilizza sandbox per GPay.
Quando è selezionata la modalità di pagamento Sandbox:
- L'ordine end-to-end consente di configurare Google Pay in modo che restituisca token degli strumenti 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 Ambiente, Modalità di pagamento e isInSandbox sono le seguenti:
Ambiente | Modalità di pagamento | isInSandbox |
---|---|---|
Test rapido | Sandbox | true |
Test rapido | Produzione | false |
Sandbox | Sandbox | true |
Sandbox | Produzione | false |
Produzione | Produzione | false |
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
CheckoutResponseMessage
inviato dal tuo servizio web con la configurazione di tokenizzazione appropriata.
Esempi di opzioni di pagamento
Di seguito sono riportati alcuni oggetti JSON PaymentOptions
di esempio di un CheckoutResponseMessage
per vari gateway di pagamento che utilizzano chiavi sandbox:
JSON
"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\"}} " } }
JSON
"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\"}} " } }
JSON
"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\"}} " } }
JSON
"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\"}} " } }
Segnala transazioni sandbox
Quando la modalità di pagamento sandbox è attivata, il campo isInSandbox
viene incluso nella richiesta e impostato su true
per le richieste in entrata al tuo endpoint del servizio web (CheckoutRequestMessage
e SubmitOrderRequestMessage
). Procedi nel seguente modo quando il campo isInSandbox
è impostato su true
:
- Utilizza le chiavi sandbox anziché le chiavi di produzione nella configurazione della tokenizzazione per il gateway di pagamento. La maggior parte degli elaboratori dei pagamenti fornisce chiavi API sia per la sandbox che per la produzione.
- Non attivare alcuna comunicazione con il provider di servizi web, di solito un ristorante, perché non è necessario che sia informato di eventuali transazioni sandbox.
Le carte di credito di prova non sono supportate, anche quando è attiva la sandbox delle transazioni. 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 addebitabili.
Elabora i pagamenti
Quando un cliente invia l'ordine, l'ordine end-to-end invia il messaggio
SubmitOrderRequestMessage
al tuo endpoint del servizio web. Il token di Google Pay è incluso come stringa codificata in base 64 nel campo SubmitOrderRequestMessage
instrumentToken. Per elaborare il pagamento del cliente, esegui una delle seguenti operazioni a seconda del gateway di pagamento:
Gateway di pagamento | |
---|---|
Stripe o Braintree | Decodifica la stringa token codificata in Base64 e invia i dati appropriati contenuti nel payload del token decodificato al tuo gateway di pagamento affinché elabori il pagamento. |
Tutti gli altri gateway di pagamento (incluso Stripev2) | Invia la stringa del token completa con codifica Base64 all'API del gateway di pagamento affinché elabori il pagamento. La struttura del token del metodo di pagamento di Google Pay contiene campi criptati che il gateway per i pagamenti può decriptare per elaborare il pagamento. |
Esempio di payload decodificato
I seguenti esempi mostrano i payload decodificati restituiti nel campo instrumentToken
per vari gateway di pagamento:
JSON
Questo esempio JSON rappresenta un token di pagamento decodificato quando si utilizza Braintree. Estrai il valore del campo nonce
e invialo a Braintree affinché elabori il pagamento.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Se Google Pay non è abilitato nel pannello di controllo di Braintree, il campo
instrumentToken
decodifica il seguente errore:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
Questo esempio JSON rappresenta un token di pagamento decodificato quando si utilizza 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 }
JSON
Questo esempio JSON rappresenta un token di pagamento decodificato quando si utilizza 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\"}" }
JSON
Questo esempio JSON rappresenta un token di pagamento decodificato quando si utilizza 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 dei pagamenti di Square nel campo source_id
preceduto dal 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 Node.js che decodifica il valore instrumentToken
codificato in base 64 da Braintree:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }