Braintree,如何从客户端删除带有 nonce 的用户信用卡?
Braintree, How do I delete a users credit card with the nonce from the client?
服务器端有一个删除付款方式的功能(result = Braintree::PaymentMethod.delete("the_token")
),但它需要一个付款方式令牌。如何从客户端获取带有随机数的支付方式令牌?
编辑:我没有使用 UI 中的 drop。我有一个用户拥有的信用卡的自定义列表(使用 Javascript v3 SDK)。我想要一个删除卡片的按钮。 JS SDK 不提供信用卡令牌,只是一个随机数。将客户端可用的数据转换成我可以用来删除服务器上的卡片的过程是什么?
edit2: 客户端的信用卡列表使用VaultManager from the JavaScript v3 SDK. It returns a 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;
}
}
});
});
});
});
});
}
完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support。
如果在客户端使用 VaultManager 来填充您的卡片,您将没有允许用户删除其中一张卡片的功能。这样做的原因可以追溯到您所说的,随机数是 fetchPaymentMethodsPayload
方法返回的内容。 VaultManager
可以填充与已创建卡片关联的 nonce
,因为它只是将随机数传递给 Transaction.sale() call
。由于在呈现表单时会填充随机数,因此与保险库中的付款方式相比,您无法搜索该随机数,因为它以前不存在,并且随机数只能一次性使用。这就是为什么不将 nonce 传递到 PaymentMethod.find()
调用中的原因。
要完成您的任务,您需要构建模仿 Vault Manager 功能的自定义逻辑;但是,需要 returns 个令牌。我的评论中提到了一种方法:找到 customer object and grabbing the customer's payment methods,然后取出与这些付款方式关联的令牌。
我注意到当您使用相同的信用创建付款方式时,它不会被复制。所以它有点像 "find or create",然后您可以使用该结果获取令牌,然后执行 gateway.payment_method.delete( result.payment_method.token )
服务器端有一个删除付款方式的功能(result = Braintree::PaymentMethod.delete("the_token")
),但它需要一个付款方式令牌。如何从客户端获取带有随机数的支付方式令牌?
编辑:我没有使用 UI 中的 drop。我有一个用户拥有的信用卡的自定义列表(使用 Javascript v3 SDK)。我想要一个删除卡片的按钮。 JS SDK 不提供信用卡令牌,只是一个随机数。将客户端可用的数据转换成我可以用来删除服务器上的卡片的过程是什么?
edit2: 客户端的信用卡列表使用VaultManager from the JavaScript v3 SDK. It returns a 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;
}
}
});
});
});
});
});
}
完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support。
如果在客户端使用 VaultManager 来填充您的卡片,您将没有允许用户删除其中一张卡片的功能。这样做的原因可以追溯到您所说的,随机数是 fetchPaymentMethodsPayload
方法返回的内容。 VaultManager
可以填充与已创建卡片关联的 nonce
,因为它只是将随机数传递给 Transaction.sale() call
。由于在呈现表单时会填充随机数,因此与保险库中的付款方式相比,您无法搜索该随机数,因为它以前不存在,并且随机数只能一次性使用。这就是为什么不将 nonce 传递到 PaymentMethod.find()
调用中的原因。
要完成您的任务,您需要构建模仿 Vault Manager 功能的自定义逻辑;但是,需要 returns 个令牌。我的评论中提到了一种方法:找到 customer object and grabbing the customer's payment methods,然后取出与这些付款方式关联的令牌。
我注意到当您使用相同的信用创建付款方式时,它不会被复制。所以它有点像 "find or create",然后您可以使用该结果获取令牌,然后执行 gateway.payment_method.delete( result.payment_method.token )