С июля 2018 г. в Google Pay API используются новые структуры объектов для PaymentDataRequest
и IsReadyToPayRequest
. Из этого руководства вы узнаете, как изменить формат объектов для Google Pay API версии 1, чтобы он соответствовал формату версии 2.
Способы оплаты
В Google Pay API версии 2 для каждого объекта запроса требуется указывать версию API.
В Google Pay API версии 1 поддерживался только один способ оплаты – с помощью карты. В Google Pay API версии 2, помимо CARD
, существует множество других вариантов оплаты. Если для параметра CARD
было установлено значение allowedPaymentMethods
, следует использовать параметр PAN_ONLY
со значением allowedAuthMethods
. Если для параметра TOKENIZED_CARD
было установлено значение allowedPaymentMethods
, следует использовать параметр CRYPTOGRAM_3DS
со значением allowedAuthMethods
.
Поддерживаемые платежные системы указываются вместе с допустимыми методами аутентификации карт в этих системах.
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' ] } }] }
Поддерживаемые платежные системы и методы аутентификации для способа оплаты CARD
указываются с помощью параметра IsReadyToPayRequest
.
Токенизация платежных данных карт
Google Pay API возвращает зашифрованные данные карты, которые передаются на указанный шлюз или расшифровываются на серверах. В Google Pay API версии 2 токенизация способа оплаты выполняется внутри объекта, определяющего способ оплаты 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' } } }] }
Идентификатор продавца Google
В Google Pay API версии 1 идентификатор продавца Google представлял собой свойство верхнего уровня. Теперь этот идентификатор указывается внутри объекта MerchantInfo
с необязательным названием продавца.
apiVersion 1
{ merchantId: '12345678901234567890' }
apiVersion 2
{ merchantInfo: { merchantId: '12345678901234567890' } }
Платежный адрес
Платежный адрес и телефон связаны со способом оплаты CARD
и являются необязательными свойствами.
Если сайт запрашивает платежный адрес, то конфигурация, связанная с ожидаемым ответом, вкладывается в объект BillingAddressParameters
.
apiVersion 1
{ cardRequirements: { billingAddressRequired: true, billingAddressFormat: 'FULL' }, phoneNumberRequired: true }
apiVersion 2
{ allowedPaymentMethods: [{ type: 'CARD', parameters: { billingAddressRequired: true, billingAddressParameters: { format: 'FULL', phoneNumberRequired: true } } }] }
Адрес доставки
Адрес доставки является необязательным свойством верхнего уровня для объекта PaymentDataRequest
.
Название свойства shippingAddressRequirements
было изменено на shippingAddressParameters
.
Ранее в ответах Google Pay API, содержащих адрес доставки, мог передаваться номер телефона. Эта возможность больше не поддерживается ни в одной из версий Google Pay API. Обработчики ответов, ожидающие номер телефона, необходимо обновить.
apiVersion 1
{ shippingAddressRequired: true, shippingAddressRequirements: { allowedCountryCodes: [ 'US', 'CA' ] } }
apiVersion 2
{ shippingAddressRequired: true, shippingAddressParameters: { allowedCountryCodes: [ 'US', 'CA' ] } }
Ответ PaymentData
Объект ответа PaymentData
для сайтов, где для свойства apiVersion
объекта 2
указано значение PaymentDataRequest
, теперь определяет карты как один из вариантов оплаты.
Свойства apiVersion
и apiVersionMinor
из объекта PaymentDataRequest
указываются в ответе PaymentData
для определения ожидаемого формата.
apiVersion 1
{ // no version specified }
apiVersion 2
{ apiVersion: 2, apiVersionMinor: 0 }
Свойство paymentMethodData
содержит информацию о выбранном способе оплаты и токенизации.
Два объекта cardInfo
были исключены из свойства: cardClass
и 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' } } }
Ответ с зашифрованным сообщением
Если на сайте указан тип токенизации способа оплаты DIRECT
и сайт принимает способ оплаты TOKENIZED_CARD
из API версии 1, следует обновить способ обработки расшифрованного свойства encryptedMessage
. Это нужно, чтобы сайт мог по-прежнему передавать шлюзу или обработчику токены устройств Android, аутентифицированные с помощью криптограммы 3-D Secure, и необязательные индикаторы ECI. Вариант оплаты картой указывается с помощью значения CARD
для paymentMethod
, а метод аутентификации – с помощью дополнительного свойства 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" } }