坚持将Braintree与Meteor.js集成

时间:2014-12-11 05:04:32

标签: javascript node.js meteor npm braintree

所以,我使用sudo npm install -g braintree将软件包安装到一个干净的流星项目中,并拥有以下代码:

if (Meteor.isClient){

    Meteor.call('getBraintree')

    braintree.setup("/* very long client token */", 'dropin', {
    container: 'dropin'
    });
};

if (Meteor.isServer) {
  Meteor.startup(function(){
    var braintreeApi = Meteor.npmRequire('braintree'),
        gateway = braintree.connect({
      environment: braintree.Environment.Sandbox,
      merchantId: "merchantId",
      publicKey: "publicKey",
      privateKey: "privateKey"
    });
  });  

Meteor.methods({
  'getBraintree': function getBraintree(){
    var braintreeWeb = Meteor.npmRequire('braintree-web');
    }
  });
};

...并且未定义braintree @ braintree.connect({(我有沙箱访问权限和所有密钥按顺序)。如果我使用npm将软件包安装到我的Meteor目录中,那么我还需要对package.js文件as shown here做些什么,考虑到npm现在可以在v1中使用meteor吗?更一般地说,如何配置项目以便安装和使用npm软件包?

编辑:代码自12/11起更新

4 个答案:

答案 0 :(得分:3)

免责声明:我为Braintree工作:)如果您在整合方面遇到问题,请随时与我们联系。

更新:我创建了一个非常基本的Braintree和Meteor example application,可能对你有所帮助。

另一个免责声明:我知道非常关于Meteor。我将尝试回答更广泛的非流星特定问题,如果我能得到它,请更新更多流星特定信息。这里有一些潜在的问题:

  1. 您需要客户端和服务器端模块进行Braintree集成,braintree是服务器端(节点)Braintree库,braintree-web是客户端软件包。我不确定在Meteor中使用客户端npm模块的细节,因此通过在页面上放置脚本标记,您可以更轻松地使用像bower这样的工具或热链接到客户端javascript:

    <script src="https://js.braintreegateway.com/v2/braintree.js"></script>

  2. braintree.connect是服务器端方法,因此只应在服务器上调用(可能在启动期间调用一次)。您需要它来生成要在客户端使用的clientToken。我对Meteor的经验很少,但我认为在服务器braintree.connect内调用Meteor.startup是合适的:

            // a better pattern would be to place this in a server/index.js file
            // within your project, which Meteor knows to load as server only code
            Meteor.startup(function () {
              if (Meteor.isServer) {
                var braintree = Meteor.npmRequire('braintree');
    
                gateway = braintree.connect({
                  environment: braintree.Environment.Sandbox,
                  publicKey: process.env.BT_PUBLIC_KEY,
                  privateKey: process.env.BT_PRIVATE_KEY,
                  merchantId: process.env.BT_MERCHANT_ID
                });
              }
            });
    
  3. braintree.setup应仅在客户端运行,它与客户端的表单进行交互。

答案 1 :(得分:2)

Braintree在npm上有两个包。一个用于服务器端,另一个用于客户端。

https://www.npmjs.com/package/braintree将提供服务器代码(var gateway = braintree.connect…

另一方面,

https://www.npmjs.com/package/braintree-web将提供在浏览器中运行的代码(braintree.setup("/*very long client token*/", 'dropin', {)。

对于meteor,您可能需要包含两个包。 (请务必仔细检查您的私钥在您的服务器上是否保密!使用/server special directory来实现此目的可能会有所帮助。)

答案 2 :(得分:1)

Meteor内部没有

require 。使用此包https://github.com/meteorhacks/npm来使用npm包。

答案 3 :(得分:1)

这是一个为meteor和Braintree同步包装的包https://atmospherejs.com/patrickml/braintree