Sandbox-Zahlungen einrichten

Durch die Bestellung von End-to-End-Projekten kann der Sandbox-Zahlungsmodus konfiguriert werden, wenn entweder mit dem Schnelltest oder in der Sandbox-Umgebung. Beim Testen der Daten -Feed, kannst du zwischen Sandbox- und Produktionszahlungsmodi wechseln. Um Testzahlungen für Ihr End-to-End-Projekt "Ordering", ohne die Karten zu belasten, Sandbox als Zahlungsmodus. In der Produktionsumgebung Sandbox-Zahlungsmodus unterstützen.

Konfiguration

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

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

Karte „Kontofunktionen“ mit ausgewähltem Sandbox-Modus

So aktivieren Sie den Sandbox-Zahlungsmodus in der Schnelltestumgebung: Schritte:

  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 für Sandbox ausgewählt ist:

  • Bei End-to-End-Bestellungen wird Google Pay so konfiguriert, dass Zahlungsmitteltokens zurückgegeben werden, die Testkartendaten anstelle der tatsächlichen Kartendetails enthalten.
  • Das Feld isInSandbox ist in dertrue CheckoutRequestMessage und SubmitOrderRequestMessage.

Die verschiedenen Kombinationen von „Environment“, „Payment Mode“ und „isInSandbox“ sind:

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

Checkout-Antwortnachricht

Die CheckoutResponseMessage, die von Ihrem Webdienst für Food Ordering gesendet wurde, enthält PaymentOptions. Wenn Sie den Bezahlvorgang einrichten, stellen Sie mithilfe eines Beispiel-Zahlungs-Gateways einen Platzhalter für die Zahlungsoptionen bereit.

  • Achte darauf, die von deinem Web gesendeten CheckoutResponseMessage zu aktualisieren mit der entsprechenden Tokenisierungskonfiguration.
<ph type="x-smartling-placeholder">

Beispiele für Zahlungsoptionen

Hier sehen Sie Beispiele für JSON-PaymentOptions-Objekte aus einer CheckoutResponseMessage für verschiedene Zahlungs-Gateways mit Sandbox-Schlüsseln:

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

Sandbox-Transaktionen kennzeichnen

Wenn der Sandbox-Zahlungsmodus aktiviert ist, wird das Feld isInSandbox in der Anfrage enthalten und für eingehende Anfragen an Ihr Web auf true festgelegt. Dienstendpunkt (CheckoutRequestMessage und SubmitOrderRequestMessage) Gehen Sie so vor, wenn das Feld isInSandbox auf true festgelegt ist:

  • Bei der Tokenisierung Sandbox-Schlüssel anstelle von Produktionsschlüsseln verwenden Konfiguration Ihres Zahlungs-Gateways. Die meisten Zahlungsabwickler stellen API bereit Sandbox- und Produktionsschlüssel zu verwenden.
  • Lösen Sie keine Kommunikation mit dem Webdienstanbieter aus, in der Regel ein Restaurant, da sie nicht über Sandbox-Transaktionen informiert werden müssen.

Testkreditkarten werden nicht unterstützt, auch wenn die Transaktions-Sandbox aktiviert. Für eine Transaktion müssen Sie eine echte Kreditkarte verwenden. Sie können jedoch Sandbox-Token-Tokens enthalten Testkartendetails, die nicht kostenpflichtig sind.

<ph type="x-smartling-placeholder">

Zahlungen abwickeln

Wenn ein Kunde seine Bestellung einreicht, sendet die End-to-End-Bestellung SubmitOrderRequestMessage mit Ihrem Webdienstendpunkt. Die Google Pay App Token wird als base-64-codierter String im SubmitOrderRequestMessage-Element instrumentToken ein. Führe einen der folgenden Schritte aus, um die Zahlung des Kunden zu bearbeiten. Zahlungs-Gateway:

Zahlungs-Gateway
Streifen oder Braintree Decodieren Sie den base-64-codierten Tokenstring und senden Sie die entsprechenden Daten in der decodierten Tokennutzlast an Ihr Zahlungs-Gateway, um die Zahlung zu verarbeiten.
Alle anderen Zahlungsgateways (einschließlich Stripev2) Senden Sie den vollständigen base-64-codierten Tokenstring an Ihre Zahlungs-Gateway-API, um die Zahlung zu verarbeiten. Die Struktur von Google Pay-Tokens für Zahlungsmethoden enthält verschlüsselte Felder, die das Zahlungs-Gateway entschlüsseln kann, um die Zahlung zu verarbeiten.
<ph type="x-smartling-placeholder">

Beispiel für decodierte Nutzlast

Die folgenden Beispiele zeigen decodierte Nutzlasten, die im instrumentToken zurückgegeben werden. für verschiedene Zahlungs-Gateways:

<ph type="x-smartling-placeholder">

JSON

Dieses JSON-Beispiel stellt ein decodiertes Zahlungstoken bei der Verwendung von Braintree. Wert des Felds nonce extrahieren und senden den Wert 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-Steuerfeld nicht aktiviert ist, Das Feld instrumentToken wird in folgenden Fehler decodiert:

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

JSON

Dieses JSON-Beispiel stellt ein decodiertes Zahlungstoken bei Verwendung von Stripe dar. Extrahieren Sie den Wert des Felds id und senden Sie 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
}

JSON

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

JSON

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

Um die Zahlung mithilfe des Tokens zu verarbeiten, geben Sie den base-64-codierten Tokenstring mit Ihrer Anfrage an die Payment API von Square im Feld source_id mit dem Präfix gpay zurück:

  {
    "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 finden Sie ein Node.js-Beispiel, mit dem die base-64-codierte instrumentToken von Braintree:

Node.js

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