我知道,当我创建一种付款方式时,可以使用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(我认为这是一个非常标准的结帐流程)?
答案 0 :(得分:0)
全面披露:我在Braintree工作。如果您还有其他疑问,请随时与support联系。
在进行Braintree_Transaction::sale
API调用时,无法防止重复的付款方式。但是,您仍然可以通过在客户端上进行一些设置来实现自己的目标。这些步骤如下:
```
$clientToken = $gateway->clientToken()->generate([
"customerId" => "aCustomerId",
"options" => [
"failOnDuplicatePaymentMethod" => true
] ]);
```
```
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付款方式。