我很难理解我在这里做错了什么:
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 page和this page中的代码(几乎相同)。
如何解决问题? PayPal Checkout组件已加载并附加到braintree
对象。
答案 0 :(得分:3)
完全披露:我在Braintree工作。如果您有任何其他问题,请随时联系support。
getVersion
是client
的{{1}}类as of version 3.16.0的一种方法。将您正在使用的braintree-web
版本更新为3.16.0 +。
答案 1 :(得分:0)
在尝试将vaultManager
与dropIn
结合使用时遇到了这个问题。
现在,我实际上还没有计划继续进行游戏-我只是在玩。看来我将必须完全自定义-因此为什么我要开始玩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,这有点违反了两者的观点。