我正在建立一个网站,允许任何经过身份验证的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请求中指定),而不是登录用户。
我已经在互联网上读到我需要请求页面访问令牌而不是用户访问令牌。为此,我需要以Facebook文档here中所述登录目标页面。
有没有办法检索页面访问令牌而无需以Facebook页面的管理员身份登录?如果需要,登录可以在幕后完成吗?
答案 0 :(得分:1)
编辑: 我想我误解了你;链接i中描述的过程导致获得任何用户的访问令牌,您只需要执行一次。
我坚信这是不可能的;如果它是可行的,几乎任何应用程序都可以在任何粉丝页面发布。
根据此处的解决方案:Extending Facebook Page Access Token,您需要具有管理员权限才能将短期页面访问令牌转换为长期存档(实际为2个月而不是几个小时)。整个过程在链接中有详细描述。