Meteor Braintree -- 通过 Meteor 方法创建客户端令牌

Meteor Braintree -- Create Client Token via Meteor Method

本文关键字:Meteor 客户端 令牌 创建 通过 Braintree 方法      更新时间:2023-09-26

我正在尝试让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.generateclientToken。如果您习惯于在同步事务中编码,异步编程可能需要一段时间才能完成,但是有很多资源可以帮助您(这里有一个(。

看起来Meteor.wrapAsync确实会提供您需要的东西,这是一个未经测试的示例实现。

Meteor.methods({
  createClientToken: function() {
    var createToken = Meteor.wrapAsync(gateway.clientToken.generate, gateway.clientToken);
    var response = createToken({});
    return response.clientToken;
  }
});

更新

我创建了一个非常基本的 Braintree + Meteor 应用程序,可能对您有一些用处(如果不是,请在 GH 存储库上提交问题以帮助改进它!