Em agosto de 2018, a API Google Pay lançou novas bibliotecas de cliente Android. Elas são compatíveis com a construção de um IsReadyToPayRequest
ou
PaymentDataRequest
com base em um objeto JSON que é serializado como uma string. Neste guia, explicamos como atualizar o código do Android que usa um objeto Builder
para a string formatada em JSON equivalente que é passada ao método fromJson()
de IsReadyToPayRequest
e PaymentDataRequest
.
Formas de pagamento
Em versões anteriores da API Google Pay, o objeto Builder
que usamos era compatível apenas
com cartões como forma de pagamento para
IsReadyToPayRequest
ou PaymentDataRequest
. Na versão mais recente da
API Google Pay, a
forma de pagamento
CARD
é apenas uma das várias possíveis para IsReadyToPayRequest
ou PaymentDataRequest
.
As constantes não são mais usadas. O objeto Builder
usado na versão anterior fazia referência a constantes de número inteiro. A nova string formatada em JSON define valores de string equivalentes na matriz de propriedades allowedAuthMethods
de CardParameters
. Para
atualizar seu código, identifique seu caso e siga as instruções abaixo:
- Se o aplicativo é compatível com
PAYMENT_METHOD_CARD
:- Adicione
"PAN_ONLY"
à matrizallowedAuthMethods
.
- Adicione
- Se o aplicativo é compatível com
PAYMENT_METHOD_TOKENIZED_CARD
:- Adicione
"CRYPTOGRAM_3DS"
à matrizallowedAuthMethods
.
- Adicione
Anteriormente, os aplicativos recebiam um conjunto padrão de redes de cartões permitidas, caso você não as especificasse. Agora, os aplicativos precisam fornecer uma lista de redes de cartões permitidas.
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" ] } } ] }
Tokenização de dados de pagamento com cartão
A API Google Pay retorna dados de cartão criptografados referenciados por seu gateway especificado
ou descriptografados nos servidores. As informações fornecidas anteriormente a um builder PaymentMethodTokenizationParameters
devem ser definidas no PaymentMethodTokenizationSpecification
de uma forma de pagamento 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" } } }] }
Endereço de faturamento
Você tem a opção de solicitar um endereço de faturamento ou número de telefone para associar
a uma forma
de pagamento CARD
. Se você exigir um endereço de faturamento ou um número de telefone, especifique a configuração da resposta necessária no objeto 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 } } }] }
Endereço de entrega
Você tem a opção de exigir que os usuários forneçam um endereço de entrega. Eles podem usar um endereço de entrega armazenado
ou inserir um novo. O endereço de entrega é uma propriedade de nível superior no objeto JSON PaymentDataRequest
. Os países para os quais você permite um endereço de entrega já foram adicionados a um builder ShippingAddressRequirements
e agora precisam ser especificados no objeto 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 } }
Resposta de PaymentData
Uma resposta é um objeto PaymentDataRequest
que contém uma resposta formatada em JSON
que está disponível
para o método de classe
toJson()
. Para receber essa resposta, crie um objeto PaymentDataRequest
com o método de classe fromJson()
e passe-o para o método loadPaymentData
de um PaymentsClient
. Uma instância PaymentData
é extraída de um Intent
. Uma string formatada em JSON pode ser analisada em pares de nome-valor JSON por
JSONObject
ou outras bibliotecas compatíveis com JSON.
Getters anteriores
PaymentData paymentData = PaymentData.getFromIntent(data);
JSON atual
PaymentData paymentData = PaymentData.getFromIntent(data); String json = paymentData.toJson(); if (json != null) { JSONObject paymentDataJson = new JSONObject(json); JSONObject paymentMethodData = paymentDataJson.get("paymentMethodData"); }
O texto resumido da forma de pagamento selecionada está disponível na propriedade
description
. Consulte a referência de objeto JSON CardInfo
para outras propriedades disponíveis quando o tipo CARD
é retornado.
Getters anteriores
paymentData .getCardInfo() .getCardDescription();
JSON atual
paymentMethodData.get("description");
As informações sobre uma forma de pagamento selecionada e a respectiva tokenização são colocadas dentro
da propriedade
paymentMethodData
.
Getters anteriores
paymentData .getPaymentMethodToken() .getToken();
JSON atual
paymentMethodData .get("tokenizationData") .get("token");
Resposta de mensagem criptografada
Aplicativos que especificam um tipo de tokenização da forma de pagamento DIRECT
e aceitam
tokens de dispositivo Android, anteriormente
WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD
,
precisam atualizar a maneira como eles lidam com a
propriedade encryptedMessage
descriptografada nos servidores deles. Os tipos PAN_ONLY
e CRYPTOGRAM_3DS
de cartões autenticados aparecem como paymentMethod
de CARD
, com outras informações sobre o método de autenticação e campos específicos do método de autenticação fornecidos em paymentMethodDetails
.
Como resultado, se o servidor não for atualizado, não será possível encaminhar tokens de dispositivos Android ao gateway ou processador. Isso ocorre porque o servidor não consegue distinguir entre vários tipos de autenticação de cartão na resposta. Os cartões são um paymentMethod
de CARD
com mais informações sobre o método de autenticação do cartão selecionado em paymentMethodDetails.authMethod
. Os tokens são autenticados com um criptograma 3-D Secure e um indicador de comércio eletrônico (ECI, na sigla em inglês) opcional.
ECI
{ "paymentMethod": "TOKENIZED_CARD", "paymentMethodDetails": { "authMethod": "3DS", "dpan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "3dsCryptogram": "AAAAAA...", "3dsEciIndicator": "eci indicator" } }
Criptograma 3-D Secure
{ "paymentMethod": "CARD", "paymentMethodDetails": { "authMethod": "CRYPTOGRAM_3DS", "pan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "cryptogram": "AAAAAA...", "eciIndicator": "eci indicator" } }