Zamawianie kompleksowych projektów pozwala skonfigurować tryb płatności w trybie piaskownicy w przypadku szybkiego testu lub środowiska piaskownicy. Podczas testowania pliku danych możesz przełączać się między trybami płatności w trybie piaskownicy i produkcji. Jeśli chcesz przetestować płatności za projekt obejmujący kompleksowe zamawianie bez obciążania kart, użyj Piaskownicy jako trybu płatności. Środowisko produkcyjne nie obsługuje trybu płatności piaskownicy.
Konfiguracja
Aby włączyć tryb płatności w środowisku piaskownicy, wykonaj te czynności:
- 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 testowania, wykonaj następujące czynności:
- W Centrum działań kliknij Pliki danych > Szybki test.
- Zaznacz opcję Użyj piaskownicy dla GPay.
Po wybraniu trybu płatności Piaskownica:
- W ramach kompleksowego zamawiania Google Pay zwraca tokeny instrumentów, które zawierają dane karty testowej, a nie faktyczne dane karty.
- Pole
isInSandbox
jest ustawione natrue
w CheckoutRequestMessage i SubmitOrderRequestMessage.
Oto różne kombinacje środowiska, trybu płatności i isInSandbox:
Środowisko | Tryb płatności | isInSandbox |
---|---|---|
Szybki test | Tryb piaskownicy | prawda |
Szybki test | Produkcyjny | false |
Tryb piaskownicy | Tryb piaskownicy | prawda |
Tryb piaskownicy | Produkcyjny | false |
Produkcyjny | Produkcyjny | false |
Wiadomość z odpowiedzią dotyczącą płatności
CheckoutResponseMessage
wysłana przez Twoją usługę internetową do zamawiania jedzenia zawiera
PaymentOptions
. Podczas konfigurowania procesu płatności podajesz zastępcze opcje płatności za pomocą przykładowej bramy płatności.
- Pamiętaj, aby zaktualizować plik
CheckoutResponseMessage
wysyłany przez Twoją usługę internetową za pomocą odpowiedniej konfiguracji tokenizacji.
Przykłady opcji płatności
Poniżej znajdziesz przykładowe obiekty PaymentOptions
w formacie 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
Gdy włączony jest tryb płatności w trybie piaskownicy, pole isInSandbox
jest uwzględniane w żądaniu i ustawione na true
w przypadku żądań przychodzących do punktu końcowego usługi internetowej (CheckoutRequestMessage
i SubmitOrderRequestMessage
). Gdy pole isInSandbox
ma wartość true
, wykonaj te czynności:
- W konfiguracji tokenizacji bramy płatności użyj kluczy piaskownicy, a nie kluczy produkcyjnych. Większość firm obsługujących płatności udostępnia klucze interfejsu API zarówno na potrzeby piaskownicy, jak i środowiska produkcyjnego.
- Nie inicjuj żadnej komunikacji z dostawcą usług internetowych (zwykle jest to restauracja), ponieważ nie musi być informowany o żadnych transakcjach w piaskownicy.
Testowe karty kredytowe nie są obsługiwane, nawet jeśli włączona jest piaskownica transakcji. Dokonując transakcji, musisz użyć prawdziwej karty kredytowej. Tokeny instrumentów piaskownicy zawierają jednak dane karty testowej, której nie można obciążyć.
Przetwarzaj płatności
Gdy klient przesyła zamówienie, kompleksowa obsługa zamówień wysyła SubmitOrderRequestMessage do punktu końcowego usługi internetowej. token Google Pay jest zawarty w polu SubmitOrderRequestMessage
instrumentToken jako ciąg zakodowany w standardzie base-64. Aby przetworzyć płatność klienta, w zależności od bramy płatności wykonaj jedną z tych czynności:
Brama płatności | |
---|---|
Stripe lub Braintree | Zdekoduj ciąg tokena zakodowany w standardzie base-64 i wyślij odpowiednie dane zawarte w ładunku zdekodowanego tokena do bramy płatności w celu przetworzenia płatności. |
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 interfejsu API bramy płatności. Struktura tokena formy płatności w Google Pay zawiera zaszyfrowane pola, które brama płatności może odszyfrować w celu przetworzenia płatności. |
Przykład ładunku zdekodowanego
W przykładach poniżej pokazujemy zdekodowane ładunki zwrócone w polu instrumentToken
w przypadku różnych bram płatności:
JSON
Ten przykładowy kod JSON przedstawia zdekodowany token płatności podczas korzystania z Braintree. Wyodrębnij wartość z pola nonce
i wyślij 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
jest odkodowane do następującego błędu:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
Ten przykładowy kod JSON przedstawia zdekodowany token płatności podczas korzystania z Stripe.
Wyodrębnij wartość z pola id
i wyślij ją do Stripe, aby przetworzyć płatność.
{ "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 podczas korzystania z 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
Ten przykładowy kod JSON przedstawia zdekodowany token płatności podczas korzystania z kwadratu.
{ "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ść za pomocą tokena, zwróć ciąg tokena zakodowany w formacie base-64 z żądaniem do interfejsu API płatności Square w polu source_id
poprzedzonym prefiksem 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" } }
Poniżej znajdziesz przykład środowiska Node.js, który dekoduje instrumentToken
zakodowany w standardzie base-64 z Braintree:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }