Konfigurowanie płatności w piaskownicy

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:

  1. W sekcji Centrum działań kliknij Konfiguracja > Funkcje.
  2. Na karcie Funkcje konta kliknij przycisk radiowy Tryb płatności.
  3. Wybierz opcję Placówka i kliknij Zapisz zmiany.

Karta funkcji konta z wybranym trybem piaskownicy

Aby włączyć tryb płatności w piaskownicy w środowisku szybkiego testowania:

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

Szybki test z wybranym trybem piaskownicy

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.
  • CheckoutRequestMessageSubmitOrderRequestMessage 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 PaymentOptionsCheckoutResponseMessage 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:

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