Braintree - Android SDK:新信用卡还是现有信用卡?

时间:2015-09-04 15:22:02

标签: java android braintree

我是Android + Braintree世界的新手。目前我正在使用 Drop-In 界面。 我想做的是以下

  

“如果用户正在创建/添加新卡片,请询问他是否要保存   信用卡信息“。

我需要此信息,因为稍后我会相应地在事务的参数中设置storeInVaultOnSuccess选项。 现在,似乎无法在插件GUI中插入元素来了解用户是否要保存这些数据。

很好,所以我将在插入界面之后添加一个额外的步骤,我只会询问用户是否要保存信用卡数据。

但问题是,如果他选择已经存在的信用卡,我不想问这个问题,所以我需要知道他是否创建了一张新卡,或者他是否选择了现有卡。

有没有办法执行此任务(或者有更好的替代方案)?

我已经做过什么: 我试图查看onActivityResult方法中给出的所有信息,更具体地说是作为第3个参数给出的Intent的内容。 我所拥有的当然是EXTRA_PAYMENT_METHOD_NONCE,然后是EXTRA_PAYMENT_METHOD(类型com.braintreepayments.api.models.Card),但查看Card.java的代码,我无法理解如何检索(如果可能的话)这种信息。

提前致谢。

1 个答案:

答案 0 :(得分:0)

完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support

Drop-In UI不支持该工作流程,因为在输入时,Drop-In会自动保存信用卡并只提供nonce(它不包含有关该卡的任何信息)因PCI原因而向客户提出。换句话说,storeInVaultOnSuccess不会适用,因为它已经存在。

正如你所说,解决这个问题的方法 - 在仍然使用Drop-In时 - 将保留对交易中使用的付款方式的引用,并在交易完成后询问。您可以通过检查响应对象来获取此信息:

String payment_method_token = "";

TransactionRequest request = new TransactionRequest()
  .amount(new BigDecimal("100.00"));
  .paymentMethodNonce(nonceFromTheClient);
Result<Transaction> result = gateway.transaction().sale(request);
Transaction transaction = result.getTarget();

if (transaction.getPaymentInstrumentType().equals(PaymentInstrumentType.CREDIT_CARD){
  payment_method_token = transaction.getCreditCard.getToken();
}
// ... other payment method types that you support 

然而,正如你所说,这更复杂。您必须根据以下内容进行一些选择: a)创建付款方式时(使用createdAt),或 a)比较结账体验之前和之后的付款方式阵列

这种流程确实推动了Drop-In的限制,而这些类型的限制通常会促使开发人员切换到custom integration。在这种情况下,您将收集他们的偏好 - 无论他们是否希望将其存储 - 与enter their credit card information一样。