Braintree PayPal结账组件抛出“e.client.getVersion不是一个函数”

时间:2017-07-06 10:44:27

标签: javascript paypal braintree

我很难理解我在这里做错了什么:

 braintree.client.create({
     authorization: res.clientToken // this is the token, I know it is correct
 }, (err, client) => {
    if (err) { ... }
    braintree.paypalCheckout.create({ client }, (err, paypalInstance) => {
        if (...) { ... }
    })
 });

调用braintree.paypalCheckout.create时,会同步调用错误:

  

未捕获的TypeError:e.client.getVersion不是函数

实际上,client对象没有这样的方法。我遵循了this pagethis page中的代码(几乎相同)。

如何解决问题? PayPal Checkout组件已加载并附加到braintree对象。

2 个答案:

答案 0 :(得分:3)

完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support

getVersionclient的{​​{1}}类as of version 3.16.0的一种方法。将您正在使用的braintree-web版本更新为3.16.0 +。

答案 1 :(得分:0)

在尝试将vaultManagerdropIn结合使用时遇到了这个问题。

现在,我实际上还没有计划继续进行游戏-我只是在玩。看来我将必须完全自定义-因此为什么我要开始玩vaultManager

反正我有这个:

 braintree.dropin.create({....}, (err, instance) => {

       braintree.vaultManager.create({ client: instance }, (e, vmInstance) =>
       {
           vmInstance.fetchPaymentMethods((err, paymentMethods) => {

              alert(JSON.stringify(paymentMethods)); 
           });
       });
 });

结果证明instance不是Client对象。它是一个Dropin对象;-)它创建了自己的存储在_client私有属性中的客户端。

我需要做braintree.client.create(...)来获得真实的Client对象。

我实际上是在作弊并这样做-暂时是:

 braintree.vaultManager.create({ client: instance._client },

就像我说过的那样,我不建议同时使用DropIn和Vault,这有点违反了两者的观点。