A API Google Pay introduziu novas estruturas para os objetos
PaymentDataRequest
e
IsReadyToPayRequest
em julho de 2018. Neste guia, explicamos como os objetos
formatados para a API Google Pay versão 1 podem ser formatados para a versão 2.
Formas de pagamento
Uma versão da API é especificada com cada objeto de solicitação na versão 2 da API Google Pay.
Na versão 1 da API Google Pay, apenas cartões eram aceitos como forma de pagamento. Já
na versão 2 da API Google Pay, CARD
é uma das várias
formas de pagamento possíveis. Sites que
antes especificaram um valor allowedPaymentMethods
de CARD
agora precisam definir
um valor allowedAuthMethods
de PAN_ONLY
. Sites que antes especificaram
um valor allowedPaymentMethods
de TOKENIZED_CARD
agora precisam definir um
valor allowedAuthMethods
de CRYPTOGRAM_3DS
.
As redes de cartões permitidas são especificadas junto com métodos de autenticação compatíveis para cartões nessas redes.
apiVersion 1
{ allowedPaymentMethods: [ 'CARD', 'TOKENIZED_CARD' ], cardRequirements: { allowedCardNetworks: [ 'AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA' ] } }
apiVersion 2
{ apiVersion: 2, apiVersionMinor: 0, allowedPaymentMethods: [{ type: 'CARD', parameters: { allowedAuthMethods: [ 'PAN_ONLY', 'CRYPTOGRAM_3DS' ], allowedCardNetworks: [ 'AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA' ] } }] }
As redes de cartões permitidas e os respectivos métodos de autenticação estão incluídos em um
IsReadyToPayRequest
para uma
forma de pagamento CARD
.
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 seus servidores. A versão 2 da API Google Pay move a
tokenização da forma de pagamento
para dentro da forma de pagamento CARD
.
apiVersion 1
{ paymentMethodTokenizationParameters: { tokenizationType: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleMerchantId' } } }
apiVersion 2
{ allowedPaymentMethods: [{ type: 'CARD', tokenizationSpecification: { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleMerchantId' } } }] }
ID do comerciante do Google
Um ID do comerciante do Google era uma propriedade de nível superior na versão 1 da API Google Pay. Agora,
é colocado dentro de um
objeto MerchantInfo
com um nome de comerciante opcional.
apiVersion 1
{ merchantId: '12345678901234567890' }
apiVersion 2
{ merchantInfo: { merchantId: '12345678901234567890' } }
Endereço de faturamento
Um endereço de faturamento opcional e um número de telefone de faturamento estão associados a uma forma de pagamento CARD
.
Se um site solicitar um endereço de faturamento, qualquer configuração relacionada à resposta esperada será colocada dentro de um
objeto BillingAddressParameters
.
apiVersion 1
{ cardRequirements: { billingAddressRequired: true, billingAddressFormat: 'FULL' }, phoneNumberRequired: true }
apiVersion 2
{ allowedPaymentMethods: [{ type: 'CARD', parameters: { billingAddressRequired: true, billingAddressParameters: { format: 'FULL', phoneNumberRequired: true } } }] }
Endereço de entrega
Um requisito de endereço de entrega opcional permanece no nível superior do
objeto PaymentDataRequest
.
A propriedade shippingAddressRequirements
foi renomeada para
shippingAddressParameters
.
As respostas anteriores da API Google Pay podem ter retornado um número de telefone como parte do endereço de entrega quando um número de telefone era solicitado. Um número de telefone de entrega não é mais compatível com a API Google Pay em nenhuma versão. Todos os manipuladores de respostas que esperam um número de telefone de entrega precisam ser atualizados.
apiVersion 1
{ shippingAddressRequired: true, shippingAddressRequirements: { allowedCountryCodes: [ 'US', 'CA' ] } }
apiVersion 2
{ shippingAddressRequired: true, shippingAddressParameters: { allowedCountryCodes: [ 'US', 'CA' ] } }
Resposta de PaymentData
A resposta do objeto PaymentData
para sites que definem um valor de propriedade apiVersion
de 2
em
PaymentDataRequest
foi alterada para cartões de referência como uma das várias respostas possíveis de dados de pagamento.
As propriedades apiVersion
e apiVersionMinor
incluídas no
objeto PaymentDataRequest
aparecem na resposta
PaymentData
para indicar o
formato esperado.
apiVersion 1
{ // no version specified }
apiVersion 2
{ apiVersion: 2, apiVersionMinor: 0 }
As informações sobre a forma de pagamento selecionada e a respectiva tokenização são colocadas dentro da
propriedade paymentMethodData
.
Duas propriedades foram removidas do objeto cardInfo
da forma de pagamento com cartão:
cardClass
e cardImageUri
.
apiVersion 1
{ cardInfo: { cardDescription: 'Visa •••• 1234', cardNetwork: 'VISA', cardDetails: 1234 }, paymentMethodToken: { tokenizationType: 'PAYMENT_GATEWAY', token: 'examplePaymentMethodToken' } }
apiVersion 2
{ paymentMethodData: { type: 'CARD', description: 'Visa •••• 1234', info: { cardNetwork: 'VISA', cardDetails: '1234' }, tokenizationData: { type: 'PAYMENT_GATEWAY', token: 'examplePaymentMethodToken' } } }
Resposta de mensagem criptografada
Nos sites que especificam uma tokenização de forma de pagamento do tipo DIRECT
e aceitam uma
forma de pagamento TOKENIZED_CARD
da API versão 1, é necessário atualizar como processam
a propriedade encryptedMessage
descriptografada. O site deve fazer isso para continuar encaminhando
tokens de dispositivos Android autenticados com um criptograma 3-D Secure e um indicador de comércio
eletrônico (ECI, na sigla em inglês) opcional para seu gateway ou processador. Os cartões são paymentMethod
de
CARD
, com mais informações sobre o método de autenticação do cartão selecionado em
paymentMethodDetails.authMethod
.
apiVersion 1
{ "paymentMethod": "TOKENIZED_CARD", "paymentMethodDetails": { "authMethod": "3DS", "dpan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "3dsCryptogram": "AAAAAA...", "3dsEciIndicator": "eci indicator" } }
apiVersion 2
{ "paymentMethod": "CARD", "paymentMethodDetails": { "authMethod": "CRYPTOGRAM_3DS", "pan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "cryptogram": "AAAAAA...", "eciIndicator": "eci indicator" } }