2017-04-12 74 views
0

服务器端有一项功能可以删除付款方式(result = Braintree::PaymentMethod.delete("the_token")),但需要付款方式令牌。我如何从客户端获取付款方式令牌和临时数字?Braintree,如何从客户端删除具有现时的用户信用卡?

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

edit2:clent端的信用卡列表使用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

[付款方式随机数](https://developers.braintreepayments.com/start/overview#payment-method-nonce)通常不对应于有库存的[付款方式](https://developers.braintreepayments。 COM /参考/响应/支付方法)。随机数表示临时支付信息将被消耗。这种情况的主要例外是,如果您使用Drop-in UI并在客户端令牌中包含['customer_id'](https://developers.braintreepayments.com/guides/drop-in/javascript/#customer- ID)。你可以编辑你的问题来说明你是否在使用Drop-in UI的自动存储功能吗? – zepp

+0

假设您通过查找[客户对象](https://developers.braintreepayments.com/reference/response/customer)来生成用户信用卡的自定义列表,则可以访问[支付方法标记](https ://developers.braintreepayments.com/reference/response/payment-method)通过[客户的付款方式属性](https://developers.braintreepayments.com/reference/response/customer/#payment_methods)。如果您没有以这种方式填充付款方式,您是否可以添加生成用户信用卡列表的代码? –

回答

1

全面披露:我在布伦特里工作。如果您有任何其他问题,请随时联系support

如果在客户端使用VaultManager来填充卡片,则不具备允许用户删除其中一张卡片的功能。这个原因可以追溯到你所说的,即所有方法都是在fetchPaymentMethodsPayload方法中返回的。 VaultManager可以填充与已创建的卡相关联的nonce,因为它仅将该随机数传递到Transaction.sale() call。由于在呈现表单时nonce被填充,因此您无法搜索该存款现金,因为它以前不会存在,并且随机数仅用于一次性使用。这就是为什么随机调用不通过PaymentMethod.find()的原因。

要完成您的任务,您需要构建模仿Vault Manager所执行操作的自定义逻辑;但是,需要返回令牌。我的评论中提到了一种方法:找到customer object并抓取customer's payment methods,然后取出与这些付款方式关联的令牌。

相关问题