更新到最新版本

Google Pay API 于 2018 年 7 月为 PaymentDataRequestIsReadyToPayRequest 对象推出了新的对象结构。本指南介绍了如何将针对 Google Pay API 版本 1 设置了格式的对象更新为针对版本 2 设置了格式的对象。

付款方式

Google Pay API 版本 2 中的每个请求对象均指定了 API 版本。

Google Pay API 版本 1 支持将卡作为唯一的付款方式。在 Google Pay API 版本 2 中,CARD 付款方式是多个可能的付款方式选项之一。以前将 allowedPaymentMethods 值指定为 CARD 的网站现在必须将 allowedAuthMethods 值设置为 PAN_ONLY。以前将 allowedPaymentMethods 值指定为 TOKENIZED_CARD 的网站现在必须将 allowedAuthMethods 值设置为 CRYPTOGRAM_3DS

允许的支付卡网络会与这些网络中的支付卡对应的受支持的身份验证方法一起指定。

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 商家 ID

Google 商家 ID 是 Google Pay API 版本 1 中的顶级属性。现在,Google 商家 ID 放置在具有可选商家名称的 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 响应

PaymentDataRequest 中将 apiVersion 属性值设置为 2 的网站的 PaymentData 对象响应已更改为将卡作为多个可能的付款数据响应之一来引用。PaymentDataRequest 对象中包含的 apiVersionapiVersionMinor 属性会显示在 PaymentData 响应中,以指明预期格式。

apiVersion 1

{
  // no version specified
}

apiVersion 2

{
  apiVersion: 2,
  apiVersionMinor: 0
}

所选付款方式及其令牌化的相关信息位于 paymentMethodData 属性中。卡付款方式的 cardInfo 对象中移除了两个属性:cardClasscardImageUri

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 付款方式令牌化类型并接受 API 版本 1 TOKENIZED_CARD 付款方式的网站必须更新其对解密的 encryptedMessage 属性的处理方式。网站必须执行此操作,才能继续将使用 3D 安全密文和可选的电子商务指示器 (ECI) 进行身份验证的 Android 设备令牌转发到您的网关或处理方。卡是 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"
  }
}