Configurare i pagamenti nella sandbox

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:

  1. Nel Centro azioni, vai a Configurazione > Funzionalità.
  2. Nella scheda Funzionalità dell'account, individua il pulsante di opzione Modalità di pagamento.
  3. Seleziona l'opzione Sandbox e fai clic su Salva modifiche.

Scheda Funzionalità dell'account con la modalità sandbox selezionata

Per attivare la modalità di pagamento sandbox nell'ambiente di test rapido, segui questi passaggi:

  1. Nel Centro azioni, vai a Feed > Test rapido.
  2. Seleziona il pulsante di opzione Utilizza la sandbox per GPay.

Test rapido con la modalità sandbox selezionata

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 su true 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:

Node.js
function decodeToken(instrumentToken) {
  let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii')
  if (decodedString.androidPayCards) {
    return decodedString.androidPayCards[0].nonce;
  }
}