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" } }