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

Posted

技术标签:

【中文标题】Braintree PayPal 结帐组件抛出“e.client.getVersion 不是函数”【英文标题】:Braintree PayPal checkout component throwing "e.client.getVersion is not a function" 【发布时间】:2017-12-10 07:59:21 【问题描述】:

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

 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时,同步调用出错:

未捕获的类型错误:e.client.getVersion 不是函数

确实,client 对象没有这样的方法。我遵循this page 和this page 的代码(几乎相同)。

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

【问题讨论】:

【参考方案1】:

我在尝试将 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,这有点违背了两者的意义。

【讨论】:

【参考方案2】:

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

getVersionbraintree-webclient 类 as of version 3.16.0 的一个方法。将您正在使用的braintree-web 的版本更新到 3.16.0+。

【讨论】:

是的,我想我使用的是3.9.x。谢谢! 我得到 e.getVersion 不是使用 3.25.0 版使用 data-collector.min.js 的功能。这有关系吗? 我使用的是 3.31.0 版本,我遇到了同样的错误? 2 年半后,我在使用 Dropin UI 的 3.65.0 中遇到了同样的错误

以上是关于Braintree PayPal 结帐组件抛出“e.client.getVersion 不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

在 PayPal REST API 中查找 Braintree 计费协议 ID

Android:Paypal Express结帐集成无效

Paypal vs Braintree 用户对用户付款

Android:Paypal Express 结帐集成不起作用

将 PayPal 结帐按钮的样式更改为 Angular.js 组件?

Braintree嵌入式贝宝结帐