Google Pay API 已於 2018 年 7 月推出新的 PaymentDataRequest
和 IsReadyToPayRequest
物件結構。本指南解說如何將適用於 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 回應
針對 PaymentDataRequest
中 apiVersion
屬性值設為 2
的網站,PaymentData
物件回應已變更為將卡片納入可能的付款資料回應。PaymentDataRequest
物件中包含的 apiVersion
和 apiVersionMinor
屬性會出現在 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
,並接受 API 第 1 版的 TOKENIZED_CARD
付款方式,您就必須更新網站處理已解密 encryptedMessage
屬性的方式。您必須執行這項操作,網站才能繼續將透過 3-D Secure 密文和選用電子商務指標 (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" } }