1

服务器端有一个删除支付方式(result = Braintree::PaymentMethod.delete("the_token"))的功能,但它需要一个支付方式令牌。如何从客户端获取带有 nonce 的付款方式令牌?

编辑:我没有使用 UI 中的下拉菜单。我有一个用户拥有的信用卡的自定义列表(使用 Javascript v3 SDK)。我想要一个按钮来删除卡片。JS SDK 不提供信用卡令牌,只是一个随机数。将客户端可用的数据转换为我可以用来删除服务器上的卡的过程是什么?

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;
                }
              }
            });
          });
        });

      });
    });
  }
4

2 回答 2

1

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

如果在客户端使用VaultManager来填充您的卡片,您将无法允许用户删除其中一张卡片。这样做的原因可以追溯到您所说的,即随机数是该fetchPaymentMethodsPayload方法返回的内容。VaultManager可以填充nonce与已创建卡关联的 a ,因为它只是将该随机数传递给Transaction.sale() call. 由于在呈现表单时会填充随机数,因此与保险库中的付款方式相比,您无法搜索该随机数,因为它以前不存在并且随机数是一次性使用的。这就是为什么 nonce 不会被传递到PaymentMethod.find()调用中的原因。

要完成您的任务,您需要构建模仿 Vault Manager 所做的自定义逻辑;但是,需要返回令牌。我的评论中提到了一种方法:通过查找客户对象并获取客户的付款方式,然后提取与这些付款方式关联的令牌。

于 2017-04-14T14:10:17.157 回答
0

我注意到,当您创建具有相同信用的付款方式时,它不会被重复。所以这有点像“查找或创建”,然后您可以使用该结果获取令牌,然后执行gateway.payment_method.delete( result.payment_method.token )

于 2019-12-10T16:43:26.130 回答