В июле 2018 года в Google Pay API появились новые структуры объектов PaymentDataRequest и IsReadyToPayRequest В этом руководстве объясняется, как обновить объекты, отформатированные для Google Pay API версии 1, до объектов, отформатированных для версии 2.
Способы оплаты
Версия API указывается для каждого объекта запроса в версии 2 API Google Pay.
В версии 1 API Google Pay карты поддерживались как единственный способ оплаты. Способ оплаты CARD — один из нескольких возможных способов оплаты в версии 2 API Google Pay. Сайты, которые ранее указывали значение allowedPaymentMethods как CARD теперь должны установить значение allowedAuthMethods как PAN_ONLY . Сайты, которые ранее указывали значение allowedPaymentMethods как TOKENIZED_CARD теперь должны установить значение allowedAuthMethods как CRYPTOGRAM_3DS .
Разрешенные сети карт указаны вместе с поддерживаемыми методами аутентификации для карт в этих сетях.
API-версия 1
{ allowedPaymentMethods: [ 'CARD', 'TOKENIZED_CARD' ], cardRequirements: { allowedCardNetworks: [ 'AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA' ] } }
APIверсия 2
{ apiVersion: 2, apiVersionMinor: 0, allowedPaymentMethods: [{ type: 'CARD', parameters: { allowedAuthMethods: [ 'PAN_ONLY', 'CRYPTOGRAM_3DS' ], allowedCardNetworks: [ 'AMEX', 'DISCOVER', 'JCB', 'MASTERCARD', 'VISA' ] } }] }
Разрешенные сети карт и их методы аутентификации включены в запрос IsReadyToPayRequest для способа оплаты CARD .
Токенизация данных платежных карт
API Google Pay возвращает зашифрованные данные карты, на которые ссылается указанный вами шлюз или которые расшифровываются на ваших серверах. Версия 2 API Google Pay переносит токенизацию способа оплаты внутрь способа оплаты CARD .
API-версия 1
{ paymentMethodTokenizationParameters: { tokenizationType: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleMerchantId' } } }
APIверсия 2
{ allowedPaymentMethods: [{ type: 'CARD', tokenizationSpecification: { type: 'PAYMENT_GATEWAY', parameters: { 'gateway': 'example', 'gatewayMerchantId': 'exampleMerchantId' } } }] }
Идентификатор продавца Google
Идентификатор продавца Google был свойством верхнего уровня в версии 1 API Google Pay. Теперь идентификатор продавца Google размещается внутри объекта MerchantInfo с необязательным указанием имени продавца.
API-версия 1
{ merchantId: '12345678901234567890' }
APIверсия 2
{ merchantInfo: { merchantId: '12345678901234567890' } }
Адрес для выставления счета
С методом оплаты CARD связаны необязательные адрес для выставления счета и номер телефона для выставления счета. Если сайт запрашивает адрес для выставления счета, все настройки, связанные с ожидаемым ответом, помещаются в объект BillingAddressParameters .
API-версия 1
{ cardRequirements: { billingAddressRequired: true, billingAddressFormat: 'FULL' }, phoneNumberRequired: true }
APIверсия 2
{ allowedPaymentMethods: [{ type: 'CARD', parameters: { billingAddressRequired: true, billingAddressParameters: { format: 'FULL', phoneNumberRequired: true } } }] }
Адрес доставки
Необязательное требование к адресу доставки остаётся на верхнем уровне объекта PaymentDataRequest . Свойство shippingAddressRequirements переименовано shippingAddressParameters .
Ранее ответы API Google Pay могли возвращать номер телефона как часть адреса доставки при запросе этого номера. API Google Pay больше не поддерживает номер телефона доставки ни в одной из версий. Все обработчики ответов, ожидающие номер телефона доставки, должны быть обновлены.
API-версия 1
{ shippingAddressRequired: true, shippingAddressRequirements: { allowedCountryCodes: [ 'US', 'CA' ] } }
APIверсия 2
{ shippingAddressRequired: true, shippingAddressParameters: { allowedCountryCodes: [ 'US', 'CA' ] } }
Ответ PaymentData
Ответ объекта PaymentData для сайтов, устанавливающих значение свойства apiVersion равное 2 в PaymentDataRequest теперь ссылается на карты как на один из возможных ответов с платёжными данными. Свойства apiVersion и apiVersionMinor , включённые в объект PaymentDataRequest отображаются в ответе PaymentData , указывая на ожидаемый формат.
API-версия 1
{ // no version specified }
APIверсия 2
{ apiVersion: 2, apiVersionMinor: 0 }
Информация о выбранном способе оплаты и его токенизации помещена в свойство paymentMethodData . Из объекта cardInfo способа оплаты картой были удалены два свойства: cardClass и cardImageUri .
API-версия 1
{ cardInfo: { cardDescription: 'Visa •••• 1234', cardNetwork: 'VISA', cardDetails: 1234 }, paymentMethodToken: { tokenizationType: 'PAYMENT_GATEWAY', token: 'examplePaymentMethodToken' } }
APIверсия 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), на ваш шлюз или процессор. Карты — это paymentMethod (paymentMethod) CARD , с дополнительной информацией о выбранном методе аутентификации карты в paymentMethodDetails.authMethod .
API-версия 1
{ "paymentMethod": "TOKENIZED_CARD", "paymentMethodDetails": { "authMethod": "3DS", "dpan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "3dsCryptogram": "AAAAAA...", "3dsEciIndicator": "eci indicator" } }
APIверсия 2
{ "paymentMethod": "CARD", "paymentMethodDetails": { "authMethod": "CRYPTOGRAM_3DS", "pan": "1111222233334444", "expirationMonth": 10, "expirationYear": 2020, "cryptogram": "AAAAAA...", "eciIndicator": "eci indicator" } }