Meteor Braintree -- 通过 Meteor 方法创建客户端令牌
Meteor Braintree -- Create Client Token via Meteor Method
我正在尝试让Braintree Payments在Meteor应用程序中工作。我坚持尝试返回生成令牌(服务器端,通过 Meteor 方法(的结果以供客户端使用。
我试过这个:
/server/braintree.js
Meteor.methods({
createClientToken: function() {
var token = gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
return clientToken
}
)
console.log(token)
return token
}
})
返回true
.
我也试过这个:
Meteor.methods({
createClientToken: function() {
var clientToken
gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
}
)
console.log(clientToken)
return clientToken
}
})
返回undefined
.
function(err, response)
是异步调用的,是吗?如果是这样,那将是问题的解释。似乎尝试从异步函数返回值是 Javascript 中的一个痛点。我已经读过许多关于它的SO答案(比如这个,这个和这个(,但似乎没有一个引导我走向正确的方向。
另外,我相信我可能需要使用流星的wrapAsync
方法,对吗?我已经尝试过这个(并找到了这个和这个相关的 SO 问题(,但似乎仍然无法把事情做好。
感谢任何反馈。
更新:
有关将Braintree与Meteor集成的工作方法,请查看示例存储库(非常感谢@Nick Tomlin(
免责声明:我在Braintree :)工作
我不熟悉 Meteor,但正如@mrak指出的clientToken.generate
它是异步的,您肯定会在您的方法中适当地处理它。
在当前代码中,clientToken
是未定义的,因为console.log(clientToken)
立即执行,然后从回调收到clientToken.generate
的clientToken
。如果您习惯于在同步事务中编码,异步编程可能需要一段时间才能完成,但是有很多资源可以帮助您(这里有一个(。
看起来Meteor.wrapAsync
确实会提供您需要的东西,这是一个未经测试的示例实现。
Meteor.methods({
createClientToken: function() {
var createToken = Meteor.wrapAsync(gateway.clientToken.generate, gateway.clientToken);
var response = createToken({});
return response.clientToken;
}
});
更新
我创建了一个非常基本的 Braintree + Meteor 应用程序,可能对您有一些用处(如果不是,请在 GH 存储库上提交问题以帮助改进它!
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- Meteor:在启动时将html注入客户端文件
- 服务器上的Meteor客户端断开连接事件
- 从客户端更新Meteor.users
- Meteor针对唯一客户端集合的发布/订阅策略
- 服务器上的 Meteor.publish 不会在客户端上显示新文档
- 如何将错误消息从 meteor 服务器传递到客户端
- 为什么自定义 JavaScript 文件放在客户端文件夹中时不在我的 Meteor 模板上呈现
- Meteor:使用HTTP.get从客户端访问网站(CORS错误)
- Meteor 方法返回客户端和服务器上的不同对象
- Meteor集合在服务器和客户端上有所不同
- 调试器在Meteor.call(可能是客户端/服务器调试)之后停止
- 仅当客户端连接到Meteor服务器时才运行代码
- 如何扩展 EJSON 以序列化 Meteor 客户端-服务器交互的 RegEx
- 使用Angular Meteor的服务器方法更新Meteor客户端对象
- 通过iosocket向Meteor发送数据,但不是从Meteor客户端发送数据(搭载Meteor's io-so
- 使用mondora/asteroid解耦Meteor客户端和服务器——但是如何解耦呢?
- 在Meteor客户端更新用户账户时被拒绝访问[403]
- 如何重置Meteor客户端订阅
- Meteor客户端的列和