Обновление до последней версии

В июле 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"
  }
}