更新至最新版

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 版中是頂層屬性,現在則位於 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 回應

針對 PaymentDataRequestapiVersion 屬性值設為 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 屬性的方式。您必須執行這項操作,網站才能繼續將透過 3-D Secure 密文和選用電子商務指標 (ECI) 驗證的 Android 裝置權杖轉送至您的閘道或處理方。卡片是 CARDpaymentMethod,且含有 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"
  }
}