使用Braintree,如何在创建交易时不保存重复的卡?

时间:2018-10-25 09:04:21

标签: duplicates braintree

我知道,当我创建一种付款方式时,可以使用storeInVaultOnSuccess来阻止重复的卡。但是,当我将Braintree_Transaction::sale选项与braintree.setup( myToken, 'custom', { id: 'my-form-id', hostedFields: { ... }, onPaymentMethodReceived: function(obj) { ... }, onError: function(obj) { ... } } ); 一起使用时,如果已保存卡,最好的不保存方法是什么?

编辑:

让我澄清一下情况以确保。我目前在结帐页面上正在使用以下JavaScript:

onPaymentMethodReceived

客户填写其抄送号码,CVV和到期日期,然后单击提交,然后触发Braintree_Transaction::sale回调。在该JS回调中,我向后端进行AJAX调用并传递随机数。在后端,我打电话给Braintree_Transaction::sale以便向客户收费。

我总是需要{{1}}才能成功完成销售。然后另外进行这次销售,如果客户已选中“保存我的卡”并且该卡尚未保存,我希望保存卡。

在此结帐页面上,客户确实可以选择选择已保存的卡,而不必再次输入其所有卡信息,但是他们可以再次输入所有卡信息(对于已保存的卡),而不是选择已保存的卡卡。

鉴于此设置,您将如何处理?您的以下设置仍然适用吗?如果是这样,我如何将下面的内容与上面的设置正确集成?还是我需要为此重新排列UI / UX(我认为这是一个非常标准的结帐流程)?

1 个答案:

答案 0 :(得分:0)

全面披露:我在Braintree工作。如果您还有其他疑问,请随时与support联系。

在进行Braintree_Transaction::sale API调用时,无法防止重复的付款方式。但是,您仍然可以通过在客户端上进行一些设置来实现自己的目标。这些步骤如下:

  1. 在服务器上,create a client token,并包含customer_IDfailOnDuplicatePaymentMethod参数:

```

$clientToken = $gateway->clientToken()->generate([
    "customerId" => "aCustomerId",
    "options" => [
        "failOnDuplicatePaymentMethod" => true
        ] ]);

```

  1. 在创建Braintree client instance时使用此客户端令牌作为您的授权:

```

var createClient = require('braintree-web/client').create;

createClient({
  authorization: CLIENT_AUTHORIZATION
}, function (createErr, clientInstance) {
  // ...
});

关于Braintree's docs,有关生成客户端令牌

  

如果通过了[failOnDuplicatePaymentMethod]选项,并且已经采用了相同的付款方式   为任何客户添加到保险柜后,请求将失败。这个可以   仅在也传递了$ customerId的情况下才传递。如果检查失败,   此选项将阻止Drop-in返回   $ paymentMethodNonce。对于PayPal,Pay with和PayPal,此选项将被忽略   Venmo,Apple Pay和Google Pay付款方式。