首页 > 解决方案 > 使用 Braintree 创建交易时如何不保存重复卡?

问题描述

我知道,当我创建一种付款方式时,我可以使用它failOnDuplicatePaymentMethod来阻止重复卡。但是当我使用带有 的storeInVaultOnSuccess选项时Braintree_Transaction::sale,如果已经保存了卡,那么不保存卡的最佳方法是什么?

编辑:

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

braintree.setup(
    myToken,
    'custom',
    {
        id: 'my-form-id',
        hostedFields: {
            ...
        },
        onPaymentMethodReceived: function(obj) {
            ...
        },
        onError: function(obj) {
            ...
        }
    }
);

客户填写他们的 CC 编号、CVV 和到期日期,然后单击提交,然后onPaymentMethodReceived触发回调。在那个 JS 回调中,我对后端进行 AJAX 调用并传递随机数。在后端,我打电话Braintree_Transaction::sale给客户收费。

我总是需要Braintree_Transaction::sale成功完成销售才能完成。然后除此之外,如果客户已选中“保存我的卡”并且该卡尚未保存,我希望保存该卡。

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

考虑到这个设置,你会怎么做?您的以下设置是否仍然适用?如果是这样,我将如何将以下内容与上述设置集成?或者我是否需要为此重新安排我的 UI/UX(我认为这是一个非常标准的结帐流程)?

标签: duplicatesbraintree

解决方案


全面披露:我在布伦特里工作。如果您还有其他问题,请随时联系支持人员

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

  1. 在您的服务器上,创建一个客户端令牌并包含customer_IDfailOnDuplicatePaymentMethod参数:

```

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

```

  1. 创建Braintree 客户端实例时,使用此客户端令牌作为您的授权:

```

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

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

根据Braintree 的有关生成客户端令牌的文档,

如果通过了 [failOnDuplicatePaymentMethod] 选项并且已将相同的付款方式添加到任何客户的 Vault 中,则请求将失败。仅当也传递了 $customerId 时才能传递。如果检查失败,此选项将阻止 Drop-in 返回 $paymentMethodNonce。对于 PayPal、Pay with Venmo、Apple Pay 和 Google Pay 付款方式,此选项将被忽略。


推荐阅读