Javascript Meteor:使用iron路由器通过回调Url处理Facebook实时API请求

Javascript Meteor:使用iron路由器通过回调Url处理Facebook实时API请求,javascript,facebook-graph-api,meteor,meteorite,iron-router,Javascript,Facebook Graph Api,Meteor,Meteorite,Iron Router,我正在尝试将Facebook实时API与Meteor应用程序结合使用。基本上,您可以订阅页面或用户之类的对象并获取更新通知,这样就不需要轮询(发布/订阅模式) 因此,我需要设置一个回调URL并发送一个post请求,其中包含我的回调URL、要订阅的对象和字段以及一个验证字符串。FB服务器正在发送带有我的验证字符串和随机字符串(质询)的get请求,Meteor服务器必须使用质询字符串对此作出响应。(如果你对细节感兴趣,你可以阅读和阅读) 我在服务器端收到以下错误: [ec2-11-11-1-123.

我正在尝试将Facebook实时API与Meteor应用程序结合使用。基本上,您可以订阅页面或用户之类的对象并获取更新通知,这样就不需要轮询(发布/订阅模式)

因此,我需要设置一个回调URL并发送一个post请求,其中包含我的回调URL、要订阅的对象和字段以及一个验证字符串。FB服务器正在发送带有我的验证字符串和随机字符串(质询)的get请求,Meteor服务器必须使用质询字符串对此作出响应。(如果你对细节感兴趣,你可以阅读和阅读)

我在服务器端收到以下错误:

[ec2-11-11-1-123.eu-west-1.compute.amazonaws.com]调用方法“createSubscription”时出现异常错误:订阅对象页时出错-失败[400]{“错误”:{“消息”:“(#2200)回调 验证失败:操作在6000毫秒后超时 接收到0字节,“类型”:“OAutheException”,“代码”:2200}}
订阅时(packages/fbuilder/lib/server/methods.js:20) 在Meteor.methods.createSubscription(packages/fbuilder/lib/server/methods.js:110) 在MaybauditArgumentChecks(packages/livedata/livedata_server.js:1487) 在packages/livedata/livedata_server.js:643 at.extend.withValue(packages/meteor/dynamics\u nodejs.js:56) 在packages/livedata/livedata_server.js:642 at.extend.withValue(packages/meteor/dynamics\u nodejs.js:56) 在u.extend.protocol_handlers.method(packages/livedata/livedata_server.js:641) 在packages/livedata/livedata_server.js:541

所以我猜路由器部分在监听给定的URL时出错了

Router.map(function () {

// Callback URL of the server for verification and receiving data via FB Realtime API
this.route('fbCallbackURL', {
    path: Meteor.settings.fbCallbackPath,
    where: 'server',
    action: function() {

        var req = this.request;
        var res = this.response;

        switch(req.method){
          "GET" :
                  var hub = req.hub;
                  console.log("got something ...........");

                  if(hub && hub.verify_token === Meteor.settings.fbVerifyString
                         && hub.mode==='subscribe' && hub.challenge){

                    res.writeHead(200);
                    res.end({hub: {challenge: hub.challenge}});
                  }
                  else{
                    res.writeHead(404);
                    res.end("");
                  }

                  break;


          "POST":
                  console.log("todo");
/*
                  The HTTP request will contain an X-Hub-Signature header which contains the SHA1 signature of the request payload,
                  using the app secret as the key, and prefixed with sha1=. Your callback endpoint can verify this signature
                  to validate the integrity and origin of the payload.*/

                  break;

          default: res.writeHead(404);
      }

    }
})
});
以下是我创建订阅的代码:

function subscription(object,fields,active){

if(object){
  var url = 'https://graph.facebook.com/'+Meteor.settings.fbAppId+'/subscriptions',
  res,
  params = {
                  access_token : Meteor.settings.fbAppId + '|' + Meteor.settings.fbAppSecret,
                  callback_url : Meteor.settings.fbAppURL+""+Meteor.settings.fbCallbackPath,
                  object : object,
                  verify_token : Meteor.settings.fbVerifyString,
                  fields : fields
  };

  try {
      res = HTTP.post(url , { params: params } );

  } catch (err) {
    throw _.extend(
      new Error("error while subscribing to object " + object + " - " + err.message + "   ",{response: err.response}));
  }

  return res;


}
  else
        new Error("subscription for invalid object requested!");

};
所以我通过服务器上的一个方法调用这个函数:(只是为了测试)

有什么想法或建议吗(

提前谢谢

Meteor.methods({

createSubscription: function() {
    return subscription("page","name",true);
}

});