从Android支付迁移到Google支付API
TL;DR:我是否可以使用使用WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED作为从Android支付迁移到Google支付API,android,android-pay,Android,Android Pay,TL;DR:我是否可以使用使用WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED作为交易信息的“TotalPrice STATUS”构建的PaymentDataRequest来处理交易 完整问题说明 我有一个应用程序,目前集成了AndroidPay作为支付方式,我想将其迁移到新的应用程序中 用户可以购买发送给他们的物品,由于运输成本可能会根据位置而变化,因此在我从MaskedWallet(AndroidPay)或PaymentData(Google Paym
交易信息的“TotalPrice STATUS”构建的PaymentDataRequest
来处理交易
完整问题说明
我有一个应用程序,目前集成了AndroidPay作为支付方式,我想将其迁移到新的应用程序中
用户可以购买发送给他们的物品,由于运输成本可能会根据位置而变化,因此在我从MaskedWallet
(AndroidPay)或PaymentData
(Google Payment)获取用户的运输地址之前,我无法计算订单的最终成本。当使用AndroidPay时,当我请求MaskedWallet
时,用户会看到一个底部的页面对话框,然后我可以计算订单总额,然后请求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()
和getCardRequirements()
是本地定义的辅助方法。在我提出这个请求后,会向用户显示一个对话框,确认他们的地址和信用卡(就像为AndroidPay请求MaskedWallet
),然后我会显示一个我自己的确认UI,显示价格明细。当用户单击确认购买并下订单时,我正在创建另一个PaymentDataRequest
,但这次使用TransactionInfo中的WalletConstants.TOTAL\u PRICE\u STATUS\u 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
来向用户收费,即使用户收取的确切美元金额可能与我创建请求时使用的金额不同,正如您正确指出的,与旧的Android Pay API不同,旧的Android Pay API具有loadMaskedWallet
和loadFullWallet
,应该在流的不同部分调用,Google Pay API只有一个loadPaymentData
调用,从这个意义上说,可以将其视为两者的组合(即在loadMaskedWallet
之后立即调用loadFullWallet
)
这意味着无需进行第二次PaymentDataRequest
——因为当您向谷歌申请支付凭证时,您的最终价格未知,TOTAL_price_STATUS_ESTIMATED
是正确的方法。一旦成功接收到支付凭据,就无需再调用API
请记住,谷歌不会处理交易,因此您仍然需要向您的支付处理器/网关提供正确的最终金额