我目前正在通过创建一个自定义应用程序来自动化一些任务,该应用程序使我可以轻松地将状态更新发布到我的Facebook页面(而不是我的个人时间轴)上。 我的后端在NodeJS上运行。

我的客户端代码具有以下内容:

window.fbAsyncInit = function() {
FB.init({
    appId : 'xxxxxxxxxxxxx', // App ID
    channelUrl : '//xxxxxxxxxxx, // Channel File
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml : true // parse XFBML
});

// Additional init code here
FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        console.log("You are signed into FB");
        var access_token = FB.getAuthResponse()['accessToken'];
        console.log('Access Token = ' + access_token);
        FB.api('/me/accounts', function(response) {
          for(var i=0;i <response.data.length;i++){;
            var page = response.data[i];
            if(page.id==my_id){
                var page_token = page.access_token;
                console.log(page_token);
                var param = 'callback=?&username=' + GetURLParameter('username')+'&session='+ GetURLParameter('session')+'&access_token='+ page_token;
                $.post(saveTokenEndpoint, param, function(data) {
                    console.log(data);
                });
            }
          }
        });

        FB.api('/me', function(response) {
            username = response.name;
            userid = response.id;
            $('#username').text('~Hi '+username+'!');       
            $(document).trigger('fbInit');
        });

        // connected
    } else if (response.status === 'not_authorized') {
        // not_authorized
        login();
    } else {
        login();
        // not_logged_in
    }

});

};

// Load the SDK Asynchronously
( function(d) {
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) {
        return;
    }
    js = d.createElement('script');
    js.id = id;
    js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js, ref);
}(document));

function login() {
FB.login(function(response) {
    if (response.authResponse) {
        console.log("You are signed into FB");
        var access_token = FB.getAuthResponse()['accessToken'];
        FB.api('/me', function(response) {
            username = response.name;
            userid = response.id;
            $('#username').text('~Hi '+username+'!');
            $(document).trigger('fbInit');
        });
        FB.api('/me/accounts', function(response) {
          // handle response
          for(page in response.data){
            if(page.id==my_id){
                var page_token = page.access_token;
                console.log(page_token);
                var param = 'callback=?&username=' + GetURLParameter('username')+'&session='+ GetURLParameter('session')+'&access_token='+ page_token;
                $.post(saveTokenEndpoint, param, function(data) {
                    console.log(data);
                });
            }
          }
        });

    } else {
        // cancelled
    }
}, {scope: 'publish_stream, manage_pages, offline_access'});
}

我的服务器端代码:

// saves the token received for future use in posting
app.post('/api/saveToken',function(req,res){
    var username = req.body.username;
    var access_token = req.body.access_token;
    var session = req.body.session;
    user.findOne({
        username: username,
        session: session
    },function(err, userObj){
        if(userObj!=null){
            userObj.token = access_token;
            console.log(access_token);
            userObj.save();
            res.jsonp({status:'true'});
        }else{
            res.jsonp({status:'false'});
        }
    });
});

我正在使用此方法在页面上发布帖子:

var data = querystring.stringify({
access_token: token,
message: message
});

                        var options = {
                            host: 'graph.facebook.com',
                            port: 443,
                        path: '/app_name/feed',
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded',
                            'Content-Length': data.length
                        }
                    };

                    var req = https.request(options, function(res) {
                        res.setEncoding('utf8');
                        res.on('data', function (chunk) {
                            console.log("body: " + chunk);
                        });
                        res.on('end', function(){ // see http nodejs documentation to see end
                            console.log("\nfinished posting message");
                            conObj.approval = 'published';
                            conObj.save();
                        });
                    });
                    req.on('error', function(e) {
                        console.error(e);
                    });
                    req.write(data);
                    req.end();

现在的情况:

我的代码正在运行,我实际上可以在页面的墙上看到帖子。

除了我自己,其他任何人都看不到它。

我如何使其在时间上正确显示:当我直接从Graph API资源管理器 (/ me / accounts)复制令牌时,我就可以使用它。 https://developers.facebook.com/tools/explorer?method=GET&path=me%2Faccounts

最终,我要做的就是找到一种在我的页面上发布帖子的方法

我监视了通过这两个标记产生的差异,但没有发现差异。 他们的范围是“公众”和“所有人”。

专家请教! 我觉得这一切令人困惑。

如果所有其他方法均失败,我打算尝试使用NodeJS facebook,例如facebook-node-sdknodejs-facebook-sdk库。

感谢您的提前答复!

===============>>#1 票数:2 已采纳

您应该在服务器端而非客户端进行OAUTH。

这是一个在此处使用node.js通过Facebook Graph API发布帖子的工作示例: http : //code.runnable.com/facebook/UTlPM1-f2W1TAABY

您尚未使用的唯一依赖项是应该使用的请求。

  ask by kenwjj translate from so

未解决问题?本站智能推荐: