TL; DR:我是否可以使用PaymentDataRequest
使用WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED
构建TransactionInfo
" TotalPriceStatus"?
我有一个应用程序,目前已将AndroidPay集成为付款方式,我想将其迁移以使用新的Google Payment API。
用户可以购买发货给他们的商品,由于运费会因地点而异,我无法计算订单的最终费用,直到我从{获取用户的送货地址为止{1}}(AndroidPay)或MaskedWallet
(Google付款)。使用AndroidPay时,当我请求PaymentData
时,会向用户显示一个底部对话框,然后我可以计算订单总数,然后请求MaskedWallet
确切的金额向用户收费。< / p>
如果我使用与Google付款相同的基本模式,我会像FullWallet
那样请求:
PaymentData
其中PaymentDataRequest.Builder request = PaymentDataRequest.newBuilder()
.setTransactionInfo(TransactionInfo.newBuilder()
.setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED)
.setTotalPrice("123")
.setCurrencyCode("USD")
.build())
.addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_CARD)
.addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)
.setPhoneNumberRequired(true)
.setEmailRequired(true)
.setShippingAddressRequired(true)
.setPaymentMethodTokenizationParameters(getTokenizationParameters())
.setCardRequirements(getCardRequirements());
和getTokenizationParameters()
是本地定义的辅助方法。在我提出此请求后,会向用户显示一个确认其地址和信用卡的对话框(就像为AndroidPay请求getCardRequirements()
一样),然后我会显示我自己的确认用户界面,显示价格细目。当用户点击确认购买并下订单时,我创建了另一个MaskedWallet
,但这次使用了PaymentDataRequest
中的WalletConstants.TOTAL_PRICE_STATUS_FINAL
,因为我知道究竟知道多少客户将被收费,如下:
TransactionInfo
我正在执行第二个请求,部分原因是这反映了Android Pay中使用的进程PaymentDataRequest.Builder request = PaymentDataRequest.newBuilder()
.setTransactionInfo(TransactionInfo.newBuilder()
.setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_FINAL)
.setTotalPrice("133.5")
.setCurrencyCode("USD")
.build())
.addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_CARD)
.addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)
.setPhoneNumberRequired(true)
.setEmailRequired(true)
.setUiRequired(false)
.setShippingAddressRequired(true)
.setPaymentMethodTokenizationParameters(getTokenizationParameters())
.setCardRequirements(getCardRequirements());
,但是由于第二个对话框,用户体验非常糟糕。
我是否必须使用FullWallet
创建PaymentDataRequest
以获取可用于向用户收费的WalletConstants.TOTAL_PRICE_STATUS_FINAL
,或者我可以使用PaymentData
并使用WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED
{1}}向用户收费,即使用户收取的确切金额可能与我创建请求的金额不同?
答案 0 :(得分:1)
正如您正确指出的那样,与原来应付loadMaskedWallet
和loadFullWallet
的Android Pay API不同,它应该在流程的不同部分调用,而Google Pay API只有一个{在这种意义上,{1}}调用可以被认为是两者的组合(即在loadPaymentData
之后立即调用loadFullWallet
。)
这意味着无需进行第二次loadMaskedWallet
- 因为当您向Google请求付款凭据时,您的最终价格未知,PaymentDataRequest
是正确的方法。成功收到付款凭据后,无需再对API进行任何调用。
请注意,Google不会处理交易,因此您仍需要向支付处理器/网关提供正确的最终金额。