Sandbox-Zahlungen einrichten

Wenn Sie End-to-End-Projekte bestellen, können Sie den Sandbox-Zahlungsmodus konfigurieren, wenn Sie entweder den Schnelltest oder die Sandbox-Umgebung verwenden. Während Sie Ihren Datenfeed testen, können Sie zwischen dem Sandbox- und dem Produktionszahlungsmodus wechseln. Wenn Sie Zahlungen für Ihr End-to-End-Bestellprojekt testen möchten, ohne die Karten zu belasten, verwenden Sie Sandbox als Zahlungsmodus. Der Sandbox-Zahlungsmodus wird in der Produktionsumgebung nicht unterstützt.

Konfiguration

So aktivieren Sie den Sandbox-Zahlungsmodus in der Sandbox-Umgebung:

  1. Gehen Sie im Steuerfeld zu Konfiguration > Funktionen.
  2. Suchen Sie auf der Karte Kontofunktionen nach dem Optionsschalter Zahlungsmodus.
  3. Wählen Sie die Option Sandbox aus und klicken Sie auf Änderungen speichern.

Karte mit Kontofunktionen, auf der der Sandbox-Modus ausgewählt ist

So aktivieren Sie den Sandbox-Zahlungsmodus in der Schnelltestumgebung:

  1. Gehen Sie im Aktionscenter zu Feeds  > Schnelltest.
  2. Wählen Sie das Optionsfeld Sandbox für GPay verwenden aus.

Schnelltest mit ausgewähltem Sandbox-Modus

Wenn die Zahlungsart Sandbox ausgewählt ist:

  • Wenn Sie die End-to-End-Bestellung auswählen, wird Google Pay so konfiguriert, dass Zahlungsmittel-Tokens mit Testkartendaten anstelle der tatsächlichen Kartendetails zurückgegeben werden.
  • Das Feld isInSandbox ist in den Nachrichten CheckoutRequestMessage und SubmitOrderRequestMessage auf true gesetzt.

Die verschiedenen Kombinationen von Umgebung, Zahlungsart und isInSandbox sind:

Umgebung Zahlungsart isInSandbox
Kurztest Sandbox wahr
Kurztest Produktion falsch
Sandbox Sandbox wahr
Sandbox Produktion falsch
Produktion Produktion falsch

Antwortnachricht für den Bezahlvorgang

Die von Ihrem Webdienst für die Essensbestellung gesendete CheckoutResponseMessage enthält PaymentOptions. Wenn Sie den Bezahlvorgang einrichten, geben Sie Platzhalter für Zahlungsoptionen mit einem Beispiel für ein Zahlungsgateway an.

  • Aktualisieren Sie das von Ihrem Webdienst gesendete CheckoutResponseMessage mit der entsprechenden Tokenisierungskonfiguration.

Beispiele für Zahlungsoptionen

Im Folgenden finden Sie Beispiele für JSON-PaymentOptions-Objekte aus einem CheckoutResponseMessage für verschiedene Zahlungsgateways mit Sandbox-Schlüsseln:

"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\"}} "
    }
}

Sandbox-Transaktionen melden

Wenn der Sandbox-Zahlungsmodus aktiviert ist, wird das Feld isInSandbox in die Anfrage aufgenommen und für eingehende Anfragen an den Endpunkt Ihres Webdienstes (CheckoutRequestMessage und SubmitOrderRequestMessage) auf true gesetzt. Gehen Sie so vor, wenn das Feld isInSandbox auf true gesetzt ist:

  • Verwenden Sie in der Tokenisierungskonfiguration für Ihr Zahlungsgateway Sandbox-Schlüssel anstelle von Produktionsschlüsseln. Die meisten Zahlungsabwickler stellen API-Schlüssel sowohl für die Sandbox als auch für die Produktion bereit.
  • Lösen Sie keine Kommunikation mit dem Webdienstanbieter aus, in der Regel ein Restaurant, da dieser nicht über Sandbox-Transaktionen informiert werden muss.

Testkreditkarten werden nicht unterstützt, auch wenn die Transaktions-Sandbox aktiviert ist. Für Transaktionen muss eine echte Kreditkarte verwendet werden. Sandbox-Instrumenten-Tokens enthalten jedoch Testkartendetails, die nicht in Rechnung gestellt werden.

Zahlungen abwickeln

Wenn ein Kunde eine Bestellung aufgibt, sendet die End-to-End-Bestellung die SubmitOrderRequestMessage an den Endpunkt Ihres Webdienstes. Das Google Pay-Token ist als base64-codierter String im Feld SubmitOrderRequestMessage instrumentToken enthalten. Führen Sie je nach Zahlungsgateway einen der folgenden Schritte aus, um die Zahlung des Kunden zu verarbeiten:

Zahlungs-Gateway
Stripe oder Braintree Decodiere den Base64-codierten Token-String und sende die entsprechenden Daten in der decodierten Token-Nutzlast an dein Zahlungsgateway, um die Zahlung zu verarbeiten.
Alle anderen Zahlungsgateways (einschließlich stripev2) Senden Sie den vollständigen base64-codierten Token-String an die API Ihres Zahlungsgateways, um die Zahlung zu verarbeiten. Die Tokenstruktur der Zahlungsmethode von Google Pay enthält verschlüsselte Felder, die Ihr Zahlungs-Gateway entschlüsseln kann, um die Zahlung zu verarbeiten.

Beispiel für eine decodierte Nutzlast

Die folgenden Beispiele zeigen decodierte Nutzlasten, die für verschiedene Zahlungsgateways im Feld instrumentToken zurückgegeben wurden:

Dieses JSON-Beispiel stellt ein decodiertes Zahlungstoken bei Verwendung von Braintree dar. Extrahieren Sie den Wert des Felds nonce und senden Sie ihn an Braintree, um die Zahlung zu verarbeiten.

{
  "androidPayCards": [{
    "type": "AndroidPayCard",
    "nonce": "aeeb8297-4242...",
    "description": "AndroidPay",
    "consumed": false,
    "details": {
      "cardType": "Visa",
      "lastTwo": "29"
    }
  }]
}

Wenn Google Pay im Braintree-Kontrollfeld nicht aktiviert ist, wird das Feld instrumentToken in den folgenden Fehler decodiert:

{
  "error": {
    "message": "Record not found"
  },
  "fieldErrors": []
}

Dieses JSON-Beispiel stellt ein decodiertes Zahlungstoken bei Verwendung von Stripe dar. Extrahiere den Wert des Felds id und sende ihn an Stripe, um die Zahlung zu verarbeiten.

{
  "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
}

Dieses JSON-Beispiel stellt ein decodiertes Zahlungstoken bei Verwendung von stripev2 dar.

  {
  "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\"}"
}
  

Dieses JSON-Beispiel stellt ein decodiertes Zahlungstoken bei Verwendung von Square dar.

  {
    "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\"}"
  }
    

Wenn du die Zahlung mit dem Token verarbeiten möchtest, gib den base64-codierten Token-String mit deiner Anfrage an die Zahlungs-API von Square im Feld source_id zurück. Das Präfix muss gpay: sein.

  {
    "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"
    }
  }

Im folgenden Node.js-Beispiel wird die Base64-codierte instrumentToken von Braintree decodiert:

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