Configurare i pagamenti nella sandbox

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:

  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 nella 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 sandbox per GPay.

Test rapido con la modalità sandbox selezionata

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 su true 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;
  }
}