Skonfiguruj płatności w trybie piaskownicy

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:

  1. W Centrum działań kliknij Konfiguracja > Funkcje.
  2. Na karcie Funkcje konta znajdź opcję Tryb płatności.
  3. Wybierz opcję Piaskownica i kliknij Zapisz zmiany.

Karta funkcji konta z wybranym trybem piaskownicy

Aby włączyć tryb płatności w trybie piaskownicy w środowisku szybkiego testowania, wykonaj następujące czynności:

  1. W Centrum działań kliknij Pliki danych > Szybki test.
  2. Zaznacz opcję Użyj piaskownicy dla GPay.

Wybrano Szybki test z trybem piaskownicy

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 na true 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;
  }
}