W sierpniu 2018 r. wprowadziliśmy w Google Pay API nowe biblioteki klienta Androida. Umożliwiają one utworzenie IsReadyToPayRequest
lub
PaymentDataRequest
na podstawie obiektu JSON zserializowanego jako ciąg znaków. Z tego przewodnika dowiesz się, jak zaktualizować kod na Androida używający obiektu Builder
do odpowiadającego mu ciągu znaków w formacie JSON, który jest przekazywany do metody fromJson()
w IsReadyToPayRequest
i PaymentDataRequest
.
Formy płatności
W poprzednich wersjach Google Pay API używany przez nas obiekt Builder
obsługiwał tylko karty jako formę płatności w przypadku IsReadyToPayRequest
lub PaymentDataRequest
. W najnowszej wersji Google Pay API forma płatności CARD
jest tylko jedną z wielu dostępnych form płatności w IsReadyToPayRequest
lub PaymentDataRequest
.
Wartości stałe nie są już używane. Używany w poprzedniej wersji obiekt Builder
odwoływał się do stałych liczb całkowitych. Nowy ciąg znaków w formacie JSON ustawia odpowiadające mu wartości w tablicy właściwości allowedAuthMethods
w CardParameters
. Aby zaktualizować kod, wybierz przypadek, który odpowiada Twojej sytuacji, i wykonaj poniższe instrukcje:
- Jeśli Twoja aplikacja obsługiwała
PAYMENT_METHOD_CARD
:- Dodaj
"PAN_ONLY"
do tablicyallowedAuthMethods
.
- Dodaj
- Jeśli Twoja aplikacja obsługiwała
PAYMENT_METHOD_TOKENIZED_CARD
:- Dodaj
"CRYPTOGRAM_3DS"
do tablicyallowedAuthMethods
.
- Dodaj
Wcześniej, jeśli nie wybrano sieci kart, do aplikacji był przypisywany domyślny zestaw dozwolonych sieci. Teraz aplikacje muszą udostępniać listę dozwolonych sieci kart.
Builder
IsReadyToPayRequest.newBuilder() .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_CARD) .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD);
PaymentDataRequest.newBuilder() .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_CARD) .addAllowedPaymentMethod( WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD);
fromJson
{ "apiVersion": 2, "apiVersionMinor": 0, "allowedPaymentMethods": [ { "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY", "CRYPTOGRAM_3DS" ], "allowedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA" ] } } ] }
Tokenizacja danych płatności kartą
Google Pay API zwraca zaszyfrowane dane karty, które są używane przez podaną bramę lub odszyfrowane na Twoich serwerach. Informacje, które wcześniej były przekazywane do kreatora PaymentMethodTokenizationParameters
, powinny być zdefiniowane w PaymentMethodTokenizationSpecification
formy płatności CARD
.
Builder
PaymentMethodTokenizationParameters.newBuilder() .setPaymentMethodTokenizationType( WalletConstants.PAYMENT_GATEWAY) .addParameter( "gateway", "example") .addParameter( "gatewayMerchantId", "exampleGatewayMerchantId")
fromJson
{ "allowedPaymentMethods": [{ "type": "CARD", "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "example", "gatewayMerchantId": "exampleGatewayMerchantId" } } }] }
Adres rozliczeniowy
Możesz wymagać podania adresu rozliczeniowego lub numeru telefonu, który będzie powiązany z formą płatności CARD
. W takiej sytuacji musisz skonfigurować wymaganą odpowiedź w obiekcie JSON BillingAddressParameters
.
Builder
PaymentDataRequest.newBuilder() .setPhoneNumberRequired(true) .setCardRequirements( CardRequirements.newBuilder() .setBillingAddressRequired(true) .setBillingAddressFormat( WalletConstants.BILLING_ADDRESS_FORMAT_FULL));
fromJson
{ "allowedPaymentMethods": [{ "type": "CARD", "parameters": { "billingAddressRequired": true, "billingAddressParameters": { "format": "FULL", "phoneNumberRequired": true } } }] }
Adres dostawy
Możesz wymagać od użytkowników podania adresu dostawy. Mogą oni użyć zapisanego adresu lub wpisać nowy. Adres dostawy w obiekcie JSON PaymentDataRequest
jest właściwością najwyższego poziomu. Kraje adresów wysyłki, na które zezwalasz, zostały wcześniej dodane do konstruktora ShippingAddressRequirements
i powinny być teraz określone w obiekcie JSON ShippingAddressParameters
.
Builder
PaymentDataRequest.newBuilder() .setPhoneNumberRequired(true) .setShippingAddressRequired(true) .setShippingAddressRequirements( ShippingAddressRequirements.newBuilder() .addAllowedCountryCode("US") .addAllowedCountryCode("CA"))
fromJson
{ "shippingAddressRequired": true, "shippingAddressParameters": { "allowedCountryCodes": [ "US", "CA" ], "phoneNumberRequired": true } }
Odpowiedź PaymentData
Odpowiedź to obiekt PaymentDataRequest
z odpowiedzią w formacie JSON, która jest dostępna dla metody klasy toJson()
. Aby ją odebrać, utwórz obiekt PaymentDataRequest
z metodą klasy fromJson()
i przekaż go do metody loadPaymentData
w PaymentsClient
. Z Intent
zostanie pobrane wystąpienie PaymentData
. JSONObject
lub inne biblioteki obsługujące JSON mogą przeanalizować ciąg znaków w formacie JSON jako pary nazwa-wartość.
Wcześniejsze gettery
PaymentData paymentData = PaymentData.getFromIntent(data);
Bieżący obiekt JSON
PaymentData paymentData = PaymentData.getFromIntent(data); String json = paymentData.toJson(); if (json != null) { JSONObject paymentDataJson = new JSONObject(json); JSONObject paymentMethodData = paymentDataJson.get("paymentMethodData"); }
Podsumowanie wybranej formy płatności znajduje się we właściwości description
. Więcej właściwości dostępnych po zwróceniu typu CARD
znajdziesz w dokumentacji referencyjnej obiektu JSONCardInfo
.
Wcześniejsze gettery
paymentData .getCardInfo() .getCardDescription();
Bieżący obiekt JSON
paymentMethodData.get("description");
Informacje o wybranej formie płatności i jej tokenizacji znajdują się we właściwości paymentMethodData
.
Wcześniejsze gettery
paymentData .getPaymentMethodToken() .getToken();
Bieżący obiekt JSON
paymentMethodData .get("tokenizationData") .get("token");
Odpowiedź z zaszyfrowaną wiadomością
W aplikacjach z typem tokenizacji formy płatności DIRECT
, które akceptują tokeny urządzeń z Androidem (wcześniej WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD
), trzeba zaktualizować to, jak obsługują odszyfrowaną właściwość encryptedMessage
na serwerach. Jako paymentMethod
w formie CARD
są widoczne typy uwierzytelnionych kart PAN_ONLY
i CRYPTOGRAM_3DS
. Zawierają one dodatkowe informacje o metodzie uwierzytelniania i polach poszczególnych metod podanych w paymentMethodDetails
.
Jeśli serwer się nie zaktualizuje, nie będzie mógł przekierować tokenów urządzeń z Androidem do bramy lub firmy obsługującej płatności. Dzieje się tak, ponieważ serwer nie może rozróżnić w odpowiedzi typów uwierzytelniania kart. Karta to paymentMethod
z wartością CARD
. W paymentMethodDetails.authMethod
zawiera dodatkowe informacje o metodzie uwierzytelniania wybranej karty. Tokeny są uwierzytelniane za pomocą kryptogramu 3-D Secure i opcjonalnie za pomocą wskaźnika handlu elektronicznego (Electronic Commerce Indicator, ECI).
ECI
{ "paymentMethod": "TOKENIZED_CARD", "paymentMethodDetails": { "authMethod": "3DS", "dpan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "3dsCryptogram": "AAAAAA...", "3dsEciIndicator": "eci indicator" } }
Kryptogram w standardzie 3-D Secure
{ "paymentMethod": "CARD", "paymentMethodDetails": { "authMethod": "CRYPTOGRAM_3DS", "pan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "cryptogram": "AAAAAA...", "eciIndicator": "eci indicator" } }