Zamawianie projektów kompleksowych umożliwia konfigurowanie trybu płatności w piaskownicy podczas korzystania z szybkiego testu lub środowiska piaskownicy. Podczas testowania pliku danych możesz przełączać się między trybem płatności w piaskownicy a trybem płatności w produkcji. Aby przetestować płatności w ramach projektu kompleksowego zamawiania bez obciążania kart, w trybie płatności wybierz piaskownicę. Środowisko produkcyjne nie obsługuje trybu płatności w piaskownicy.
Konfiguracja
Aby włączyć tryb płatności w środowisku piaskownicy:
- W sekcji Centrum działań kliknij Konfiguracja > Funkcje.
- Na karcie Funkcje konta kliknij przycisk radiowy Tryb płatności.
- Wybierz opcję Placówka i kliknij Zapisz zmiany.
Aby włączyć tryb płatności w piaskownicy w środowisku szybkiego testowania:
- W Centrum działań kliknij Pliki danych > Szybki test.
- Zaznacz opcję Użyj piaskownicy dla GPay.
Gdy wybrany jest tryb płatności sandboksa:
- Zamawianie kompleksowych usług konfiguruje Google Pay tak, aby zwracał tokeny instrumentu, które zawierają dane karty testowej zamiast rzeczywistych danych karty.
- W CheckoutRequestMessage i SubmitOrderRequestMessage pole
isInSandbox
ma wartośćtrue
.
Różne kombinacje wartości parametrów Środowisko, Tryb płatności i isInSandbox:
Ś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
CheckoutResponseMessage
wysłany przez Twoją usługę internetową Zamawianie jedzenia zawiera PaymentOptions
. Podczas konfigurowania płatności podajesz zastępcze opcje płatności, korzystając z przykładowej bramki płatności.
- Pamiętaj, aby zaktualizować
CheckoutResponseMessage
wysyłane przez Twoją usługę internetową, stosując odpowiednią konfigurację tokenizacji.
Przykłady opcji płatności
Oto przykładowe obiekty JSON PaymentOptions
z CheckoutResponseMessage
dla różnych bram płatności, które używają kluczy z piaskownicy:
"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\"}} " } }
Oznaczanie transakcji w piaskownicy
Gdy włączony jest tryb płatności w piaskownicy, pole isInSandbox
jest uwzględniane w żądaniu i ma wartość true
w przypadku przychodzących żądań do punktu końcowego usługi internetowej (CheckoutRequestMessage
i SubmitOrderRequestMessage
). Gdy pole isInSandbox
ma wartość true
:
- W konfiguracji tokenizacji bramki płatności użyj kluczy z piaskownicy zamiast kluczy produkcyjnych. Większość procesorów płatności udostępnia klucze API zarówno w piaskownicy, jak i w środowisku produkcyjnym.
- Nie inicjuj żadnej komunikacji z dostawcą usług internetowych, zazwyczaj restauracją, ponieważ nie musi on wiedzieć o żadnych transakcjach w piaskownicy.
Testowe karty kredytowe nie są obsługiwane, nawet jeśli włączono piaskownicę transakcji. Podczas dokonywania transakcji musisz użyć prawdziwej karty kredytowej. Tokeny instrumentów w piaskownicy zawierają jednak dane karty testowej, które nie są obciążane opłatami.
Przetwarzanie płatności
Gdy klient przesyła zamówienie, usługa kompleksowego zamawiania przesyła wiadomość SubmitOrderRequestMessage do punktu końcowego usługi internetowej. Token Google Pay jest dołączany jako ciąg zakodowany w formacie Base64 w polu SubmitOrderRequestMessage
instrumentToken. Aby przetworzyć płatność klienta, wykonaj jedną z tych czynności w zależności od bramki płatności:
Bramka płatności | |
---|---|
Stripe lub Braintree | Odkoduj ciąg znaków tokena zakodowanego w base64 i prześlij odpowiednie dane zawarte w zdekodowanym ładunku tokena do bramy płatności, aby przetworzyć płatność. |
wszystkie inne bramki płatnicze (w tym stripev2). | Aby przetworzyć płatność, wyślij do interfejsu API bramki płatności pełny ciąg znaków tokena zakodowany w formacie base64. Struktura tokenu formy płatności w Google Pay zawiera zaszyfrowane pola, które bramka płatności może odszyfrować, aby przetworzyć płatność. |
Przykład odszyfrowanego ładunku
W poniższych przykładach pokazano odkodowane ładunki zwrócone w polu instrumentToken
dla różnych bram płatności:
Ten przykładowy dokument JSON reprezentuje odkodowany token płatności w przypadku korzystania z Braintree. Wyodrębnij wartość pola nonce
i wyślij ją do Braintree, aby przetworzyć płatność.
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Jeśli Google Pay nie jest włączone w panelu sterowania Braintree, pole
instrumentToken
dekoduje się do tego błędu:
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
Ten przykładowy kod JSON reprezentuje odkodowany token płatności w przypadku korzystania z usługi Stripe.
Wyodrębnij wartość pola id
i wyślij ją do Stripe w celu przetworzenia 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 }
Ten przykładowy kod JSON reprezentuje odkodowany token płatności przy użyciu wersji 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\"}" }
Ten przykładowy kod JSON reprezentuje odkodowany token płatności w przypadku korzystania z 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ść za pomocą tokena, zwracaj zakodowany w formacie base-64 ciąg znaków tokena w prośbie do interfejsu API płatności Square w polu source_id
z 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" } }
Oto przykład kodu Node.js, który dekoduje dane instrumentToken
zakodowane w standardzie Base64 z Braintree:
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }