duplicates - 使用 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(我认为这是一个非常标准的结帐流程)?
解决方案
全面披露:我在布伦特里工作。如果您还有其他问题,请随时联系支持人员。
Braintree_Transaction::sale
在进行API 调用时,没有办法防止重复的付款方式。但是,您仍然可以通过客户端上的一些设置来实现您的目标。以下是这些步骤:
- 在您的服务器上,创建一个客户端令牌并包含
customer_ID
和failOnDuplicatePaymentMethod
参数:
```
$clientToken = $gateway->clientToken()->generate([
"customerId" => "aCustomerId",
"options" => [
"failOnDuplicatePaymentMethod" => true
] ]);
```
- 创建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 付款方式,此选项将被忽略。
推荐阅读
- python - python Dataframe subString 一列(长字符串)
- java - CameraX 和 OpenGL 在实时相机上应用效果
- javascript - 收音机更改音频值 onClick
- macos - 如何签署 shell 脚本以在 Mac OSX 上运行?
- sentry - Cloudflare Workers 的性能日志记录
- networking - IP 地址信息如何从 TCP 层传播到 IP 层?
- flutter - Flutter:FlutterWindowManager.FLAG_SECURE 在 ios 上不起作用
- jira-plugin - 无法在 Jira 云应用中安装“Azure Pipelines for Jira”插件
- blogger - Blogger 格式运算符日期时区
- wordpress - Amazon S3 和 M3u8 以及 ts 文件