1

Facebook Realtime API を Meteor で実装しようとしています。私は次のエラーで実行しています - そのため、コールバック URL に何か問題があるようです。HTMLドキュメントが返されているようですが、これがどの時点で発生するのかわかりません:

[123.45.678.90] メソッド 'createSubscription' の呼び出し中に例外が発生しました エラー: オブジェクト ページのサブスクライブ中にエラーが発生しました - 失敗しました [400] {"エラー":{"メッセージ":"(#2201) 応答がチャレンジと一致しません。期待値 = ' 1723842009', received='\u003C!DOCTYPE html>\n\u003Chtm...'","type":"OAuthException","code":2201}}
サブスクリプション (packages/myname:realtime/lib/server/methods.js:37) で Meteor.methods.createSubscription (packages/myname:realtime/lib/server/methods.js:128) で MaybeAuditArgumentChecks (packages/ddp/livedata_server) .js:1594) で packages/ddp/livedata_server.js:648 で _.extend.withValue (packages/meteor/dynamics_nodejs.js:56) で packages/ddp/livedata_server.js:647 で _.extend.withValue (packages /meteor/dynamics_nodejs.js:56) で _.extend.protocol_handlers.method (packages/ddp/livedata_server.js:646) で packages/ddp/livedata_server.js:546

リアルタイム API の詳細: https://developers.facebook.com/docs/graph-api/real-time-updates/v2.1

これはグローバルに定義されています (iron route):

Router.map(function () {

this.route('fbCallbackURL', {
    path: Meteor.settings.fbCallbackPath,
    where: 'server',
    action: function() {
        var req = this.request;
        var res = this.response;

        switch(req.method){
          case "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, {"content-type": "application/json"});
                    res.end({hub: {challenge: hub.challenge}});
                  }
                  else{
                    res.writeHead(200, {"content-type": "application/json"});
                    res.end({message : "invalid request"});
                  }

                  break;


          case "POST":
                  console.log("todo");

                  break;

          default: console.log("other"); res.writeHead(404); res.end("");
      }

    }
})
});

サーバ側:

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,
                  verify_token : Meteor.settings.fbVerifyString,
                  object : object,
                  fields : fields
  };

  try {
      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);
}


});

クライアント側で私は照会しています:

Meteor.call('createSubscription', function(err, data) {
if (err)
console.log(err);
else
console.log(data);
});
4

0 に答える 0