Javascript Meteor:使用iron路由器通过回调Url处理Facebook实时API请求
我正在尝试将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}}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.
订阅时(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);
}
});