使用Javascript API检索访问令牌
|
这是该主题的后续内容:将signed_request和AJAX调用传递给装饰有CanvasAuthorize的ActionMethod
由于我无法使signed_request不能为null,因此我认为我要在客户端对用户进行身份验证,然后将访问令牌与AJAX调用一起发送到服务器端(ASP.NET MVC) 。不幸的是,我也无法使它正常工作!这是我的Javascript代码(从文档中获得):
function postOnFacebook(msg, itemLink, pic, itemTitle, signedReq) {
var siteUrl = \'http://www.localhost:2732\';
var appID = 193005690721590;
if (window.location.hash.length == 0) {
var path = \'https://www.facebook.com/dialog/oauth?\';
var queryParams = [\'client_id=\' + appID,
\'redirect_uri=\' + window.location,
\'response_type=token\',
\'scope=offline_access\'];
var query = queryParams.join(\'&\');
var url = path + query;
window.open(url);
} else {
var accessToken = window.location.hash.substring(1);
var path = \"https://graph.facebook.com/me?\";
var queryParams = [accessToken];
var query = queryParams.join(\'&\');
var url = path + query;
// use jsonp to call the graph
var script = document.createElement(\'script\');
script.src = url;
document.body.appendChild(script);
}
$.ajax({
url: \'/Facebook/Share\',
data: {
\'message\': msg,
\'link\': siteUrl + itemLink,
\'picture\': siteUrl + pic,
\'name\' : itemTitle,
\'accessToken\': accessToken
},
type: \'get\',
success: function(data) {
if(data.result == \"success\") {
alert(\"item was posted on facebook\");
}
}
});
}
这是我的服务器端代码:
public ActionResult Share(string message, string link, string picture, string name, string accessToken)
{
if (FacebookWebContext.Current.Session == null)
return RedirectToAction(\"Login\");
var fb = new FacebookWebClient(accessToken);
var postArgs = new Dictionary<string, string>();
postArgs[\"message\"] = message;
postArgs[\"link\"] = link;
postArgs[\"picture\"] = picture;
postArgs[\"name\"] = name;
fb.Post(\"/me/feed\", postArgs);
return Json(new {result = \"success\"}, JsonRequestBehavior.AllowGet);
}
}
更新:
我试过了,但是对我没用。当我第一次单击该按钮时,它会将我重定向到FB登录页面,然后将我返回到我的网站的主页。之后,它所要做的就是重定向,然后立即返回主页。什么都没有发布。
有什么建议么?
没有找到相关结果
已邀请:
1 个回复
埃输林桨铃
一旦获得了捕获的访问令牌的客户端,就可以将其以表单或Ajax调用的形式发布到服务器。 要检查的另一件事是您的环境。 Facebook会查看进行这些api调用的域是否与您的应用设置匹配。在端口80上尝试使用它,并使用带有DNS的真实域指向您的服务器(而不是localhost)。使用DynDns或其他类似的服务来设置指向您的开发箱的域名和DNS条目。在应用程序端口80和防火墙/路由器端口转发设置上运行IIS,在开发箱上运行IIS,以便在与Facebook应用程序设置匹配的真实域的端口80上提供页面。