【发布时间】:2018-06-02 08:39:56
【问题描述】:
TL;DR:我可以使用使用WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED 构建的PaymentDataRequest 作为TransactionInfo 的“TotalPriceStatus”来处理交易吗?
完整的问题描述
我有一个应用,目前集成了 AndroidPay 作为支付方式,我想迁移它以使用新的Google Payment API。
用户可以购买运送给他们的东西,并且由于运费可能会根据位置而变化,因此我无法计算订单的最终费用,直到我从MaskedWallet (AndroidPay) 或PaymentData(谷歌支付)。使用AndroidPay时,当我请求MaskedWallet时,用户会看到一个底部对话框,然后我可以计算订单总额,然后请求FullWallet,并以准确的金额向用户收费。
如果我遵循与 Google Payment 相同的基本模式,我会请求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() 和getCardRequirements() 是本地定义的辅助方法。在我提出这个请求后,会向用户显示一个对话框,确认他们的地址和信用卡(就像为 AndroidPay 请求 MaskedWallet 一样),然后我会显示一个我自己的确认 UI,显示价格明细。当用户单击确认购买并下订单时,我正在创建另一个PaymentDataRequest,但这次在TransactionInfo 中使用WalletConstants.TOTAL_PRICE_STATUS_FINAL,因为我知道确切地知道客户将被收取多少费用,如下所示:
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());
我执行第二个请求的部分原因是这反映了 Android Pay 中使用的流程,FullWallet,但由于第二个对话框,用户体验很糟糕。
我是否必须使用WalletConstants.TOTAL_PRICE_STATUS_FINAL 创建一个PaymentDataRequest 才能获得一个可以用来向用户收费的PaymentData,或者我可以使用WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED 并使用该PaymentData 来向用户收费,甚至尽管向用户收取的确切金额可能与我创建请求时使用的金额不同?
【问题讨论】:
标签: android android-pay