从Android Pay迁移到Google Payment API

时间:2017-12-19 20:51:02

标签: android android-pay

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}}向用户收费,即使用户收取的确切金额可能与我创建请求的金额不同?

1 个答案:

答案 0 :(得分:1)

正如您正确指出的那样,与原来应付loadMaskedWalletloadFullWallet的Android Pay API不同,它应该在流程的不同部分调用,而Google Pay API只有一个{在这种意义上,{1}}调用可以被认为是两者的组合(即在loadPaymentData之后立即调用loadFullWallet。)

这意味着无需进行第二次loadMaskedWallet - 因为当您向Google请求付款凭据时,您的最终价格未知,PaymentDataRequest是正确的方法。成功收到付款凭据后,无需再对API进行任何调用。

请注意,Google不会处理交易,因此您仍需要向支付处理器/网关提供正确的最终金额。