0

我正在构建一个网站,允许任何经过身份验证的 Facebook 用户将照片发布到与 Facebook 页面关联的特定相册。我正在为此任务使用 JavaScript SDK。这是我到目前为止的代码:

window.fbAsyncInit = function () {
    FB.init({
        appId: "492414284132122",
        status: true,
        cookie: true,
        xfbml: true,
        channelUrl: "http://wineoclock.dev.mag/ClockMoments/channel.html"
    });
};

function uploadPhoto() {
    console.log("called uploadPhoto()...");
    FB.login(function (response) {
        if (response.authResponse) {
            document.getElementById("access_token").value = FB.getAuthResponse()["accessToken'];
            var form = document.getElementById("fbPhotoUpload");
            var formData = new FormData(form);
                    // indicate to user that upload is in progress
            document.getElementById("btnUpload").value = "Posting...";
            document.getElementById("btnUpload").disabled = true;
            // post photo to Facebook
            $.ajax({
                type: "POST",
                    // post to "Timeline Photos" album
                url: "https://graph.facebook.com/283773431737369/photos",
                data: formData,
                cache: false,
                contentType: false,
                processData: false,
                dataType: "json",
                success: function (response, status, jqXHR) {
                    console.log("Status: " + status);
                    if (!response || response.error) {
                        alert("Error occured:" + response.error.message);
                    }
                    else {
                        document.getElementById("fbPhotoUpload").reset();
                        $("#ThanksModal").reveal();
                    }
                    document.getElementById("btnUpload").value = "Post Photo";
                    document.getElementById("btnUpload").disabled = false;
                },
                error: function (jqXHR, status, errorThrown) {
                    console.log("AJAX call error. " + status);
                    console.log("errorThrown: " + errorThrown);
                },
                complete: function (jqXHR, status) {
                    console.log("AJAX call complete. " + status);
                }
            });
        }
        else {
            alert("Login failed: " + response.error);
        }
    });
}

运行上面的代码,我发现选择的图像被上传,但它被上传到登录的 Facebook 帐户。这不是我想要的。我想将它上传到目标粉丝页面(在 AJAX POST 请求中指定),而不是登录用户。

我在 Internet 上读到我需要请求页面访问令牌,而不是用户访问令牌。为此,我需要以目标页面的身份登录,如此处 Facebook 文档中所述

有没有一种无需以 Facebook 页面管理员身份登录即可检索页面访问令牌的方法?如果需要,可以在幕后进行登录吗?

4

1 回答 1

1

编辑:我想我误解了你;我发布的链接中描述的过程导致为任何用户获取访问令牌,您只需执行一次。

我坚信这是不可能的;如果可行,几乎任何应用程序都可以在任何粉丝专页上发布。

根据此处的解决方案:Extended Facebook Page Access Token,您需要具有管理员权限才能将您的短期页面访问令牌转换为长期(实际上是 2 个月而不是几个小时)。整个过程在链接中有很好的描述。

于 2013-05-23T23:14:30.060 回答