Zamawianie kompleksowych projektów pozwala skonfigurować tryb płatności w trybie piaskownicy, gdy za pomocą środowiska szybkiego testu lub środowiska Sandbox. Podczas testowania danych możesz przełączać się między trybem piaskownicy a trybem płatności produkcji. Aby Sprawdź, czy Twój kompleksowy projekt Ordering nie obciąża karty, użyj Piaskownica jako tryb płatności. Środowisko produkcyjne nie obsługują tryb płatności piaskownicy.
Konfiguracja
Aby włączyć tryb płatności w trybie piaskownicy w środowisku piaskownicy, wykonaj te czynności: kroki:
- W Centrum działań kliknij Konfiguracja > Funkcje.
- Na karcie Funkcje konta znajdź opcję Tryb płatności.
- Wybierz opcję Piaskownica i kliknij Zapisz zmiany.
Aby włączyć tryb płatności w trybie piaskownicy w środowisku szybkiego testu, wykonaj te czynności: kroki:
- W Centrum działańprzejdź do sekcji Pliki danych > Szybki test.
- Zaznacz opcję Użyj piaskownicy w GPay.
Po wybraniu trybu płatności Piaskownica:
- Kompleksowe zamawianie powoduje, że Google Pay zwraca tokeny instrumentu, zawierają dane karty testowej zamiast jej rzeczywistych danych.
- Pole
isInSandbox
jest ustawione natrue
w CheckoutRequestMessage i SubmitOrderRequestMessage.
Różne kombinacje Środowisko, Tryb płatności i IsInSandbox są następujące:
Środowisko | Tryb płatności | isInSandbox |
---|---|---|
Szybki test | Tryb piaskownicy | prawda |
Szybki test | Produkcja | fałsz |
Tryb piaskownicy | Tryb piaskownicy | prawda |
Tryb piaskownicy | Produkcja | fałsz |
Produkcja | Produkcja | fałsz |
Wiadomość z odpowiedzią na proces płatności
Pole CheckoutResponseMessage
wysłane przez Twoją usługę sieciową zamawiania jedzenia zawiera
PaymentOptions
Gdy
skonfiguruj proces płatności,
podajesz zastępcze opcje płatności, używając przykładowej bramki płatności.
- Pamiętaj, aby zaktualizować
CheckoutResponseMessage
wysyłane przez Twoją sieć z odpowiednią konfiguracją tokenizacji.
Przykłady opcji płatności
Poniżej znajdziesz przykładowe obiekty PaymentOptions
JSON z
CheckoutResponseMessage
dla różnych bram płatności korzystających z kluczy piaskownicy:
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\"}} " } }
Oznaczanie transakcji w trybie piaskownicy
Po włączeniu trybu płatności w trybie piaskownicy pole isInSandbox
ma wartość
uwzględnione w żądaniu i ustawione na true
dla żądań przychodzących do Twojej sieci
punkt końcowy usługi (CheckoutRequestMessage
i SubmitOrderRequestMessage
).
Wykonaj te czynności, gdy pole isInSandbox
jest ustawione na true
:
- W tokenizacji używaj kluczy piaskownicy zamiast kluczy produkcyjnych konfiguracji bramy płatności. Większość firm obsługujących płatności udostępnia interfejs API zarówno dla piaskownicy, jak i do środowiska produkcyjnego.
- Nie komunikuj się z dostawcą usług internetowych, zwykle restauracji, ponieważ nie muszą być informowani o żadnych transakcjach w trybie piaskownicy.
Testowe karty kredytowe nie są obsługiwane, nawet gdy piaskownica transakcji jest . Do dokonania transakcji musisz użyć prawdziwej karty kredytowej. Pamiętaj jednak: Tokeny instrumentów w trybie piaskownicy zawierają dane karty testowej, której nie można obciążyć.
Przetwarzaj płatności
Gdy klient przesyła zamówienie, kompleksowa obsługa zamówienia wysyła
SubmitOrderRequestMessage
do punktu końcowego usługi sieciowej. Google Pay
token
jest uwzględniony jako ciąg zakodowany w formacie base-64 w funkcji SubmitOrderRequestMessage
instrumentToken
. Aby przetworzyć płatność klienta, wykonaj jedną z poniższych czynności w zależności od
Twoja bramka płatności:
Brama płatności | |
---|---|
Paski lub Braintree | Zdekoduj ciąg tokena zakodowany w standardzie base-64 i wyślij odpowiednie dane zawarte w zdekodowanym ładunku tokena do swojej bramy płatności, aby przetworzyć płatność. |
Wszystkie inne bramy płatności (w tym Stripev2) | Aby przetworzyć płatność, wyślij pełny ciąg tokena zakodowany w standardzie base-64 do swojego interfejsu API bramy płatności. Struktura tokena formy płatności Google Pay zawiera zaszyfrowane pola, które Twoja brama płatności może odszyfrować w celu przetworzenia płatności. |
Przykład ładunku zdekodowanego
W poniższych przykładach są pokazane ładunki zdekodowane zwrócone w instrumentToken
dla różnych bram płatności:
JSON
W tym przykładzie kodu JSON przedstawiamy zdekodowany token płatności z wykorzystaniem
Braintree. Wyodrębnij wartość pola nonce
i wysyła tę wartość do Braintree w celu przetworzenia płatności.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Jeśli usługa Google Pay nie jest włączona w panelu sterowania Braintree,
Pole instrumentToken
dekoduje taki błąd:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
Ten przykład JSON przedstawia zdekodowany token płatności używany w Stripe.
Wyodrębnij wartość z pola id
i wyślij ją do Stripe do
Przetwarzanie płatności.
{ "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
Ten przykładowy kod JSON przedstawia zdekodowany token płatności w przypadku używania 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
W tym przykładzie kodu JSON przedstawiamy zdekodowany token płatności używany w 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\"}" }
Aby przetworzyć płatność przy użyciu tokena, zwróć ciąg tokena zakodowany w standardzie base-64 wraz z żądaniem do interfejsu API płatności Square.source_id
{ "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" } }
Poniżej znajdziesz przykład środowiska Node.js dekodującego kod zakodowany w formacie base-64
instrumentToken
od Braintree:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }