服务器端有一个删除付款方式(result = Braintree::PaymentMethod.delete("the_token")
)的功能,但需要付款方式令牌。如何从客户端获取带有nonce的付款方式令牌?
编辑:我没有使用UI中的drop。我有一个用户自定义的信用卡列表(使用Javascript v3 SDK)。我想要一个删除卡片的按钮。 JS SDK dosnt提供信用卡令牌,只是一个随机数。将可用于客户端的数据转换为可用于删除服务器上的卡的过程是什么?
edit2:名单上的信用卡列表使用JavaScript v3 SDK中的VaultManager。它返回fetchPaymentMethodsPayload。
这是客户端代码:
_loadPaymentMethods() {
this.paymentService.getBraintreeToken().then( token => {
this.braintreeClient.create({
authorization: token
}, (clientErr, clientInstance) => {
if (clientErr) {
// Handle error in client creation
return;
}
var options = {
client: clientInstance,
};
this.vaultManager.create(options, (err, vaultInstance) => {
if (err) {
console.log(err);
return;
}
vaultInstance.fetchPaymentMethods({ defaultFirst: true }, (err, paymentMethods) => {
paymentMethods.forEach( paymentMethod => {
if(paymentMethod.type == 'CreditCard') {
this.cards.push(paymentMethod);
if(paymentMethod.default) {
this.card = paymentMethod;
}
}
});
});
});
});
});
}
答案 0 :(得分:1)
完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support。
如果在客户端使用VaultManager来填充您的卡,则您将无法让用户删除其中一张卡。原因可以追溯到你所说的,nonces是fetchPaymentMethodsPayload
方法返回的内容。 VaultManager
可以填充与已创建的卡相关联的nonce
,因为它只会将该随机数传递到Transaction.sale() call
。由于在呈现表单时填充了随机数,因此与保险库中的付款方式相比,您无法搜索该随机数,因为它以前不存在,并且一次性使用非随机数。这就是为什么nonces没有进入PaymentMethod.find()
调用。
要完成任务,您需要构建模仿Vault Manager所执行操作的自定义逻辑;但是,需要返回令牌。一种方法是在我的评论中提到:找到customer object并抓住customer's payment methods,然后提取与这些付款方式相关联的令牌。
答案 1 :(得分:0)
我注意到,当您创建具有相同信用的付款方式时,不会重复使用。所以有点像“查找或创建”,然后可以使用该结果获取令牌,然后执行gateway.payment_method.delete( result.payment_method.token )