我无法使用以下代码交换令牌代码:
extract($_GET);
$url=urlencode('http://'.DOMAIN.'/admin/');
$app_id=FB_APPID;
$fb_token=FB_TOKEN;
$secret=FB_SECRET;
if(SEND_NEWS_TO_FB){
if($code=='none'){
$state=rand(100000000,9999999999999999999);
$_SESSION['state']=$state;
$script="
<script type='text/javascript'>
var scope=encodeURI('publish_stream,user_status');
var app_id=$app_id;
var state=$state;
var url=$js_url;
window.location.href='https://www.facebook.com/dialog/oauth? client_id='+app_id+'&redirect_uri='+url+'&scope='+scope+'&state='+state;
</script>";
echo $script;
}
if($code!='none' && $_SESSION['state']==$state && $_SESSION['fb_token']!=1){
$_SESSION['fb_token']=1;
$token_url="https://graph.facebook.com/oauth/access_token?"
."client_id=" .$app_id
."&redirect_uri=" .$url
."&client_secret=" .$secret
."&code=" .$code;
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$token=$params['access_token'];
$qry="UPDATE `settings` SET `FB_token`='$token'";
$result=mysql_query($qry);
}
将返回的$ token_url放入浏览器会给我一个包含令牌和到期的页面。运行该脚本会返回一个非常含糊的“抱歉,有问题”的消息。几乎所有我遇到问题的线程都是由于重定向uri的差异造成的,但登录和令牌请求都是从完全相同的地方获取uri。
答案 0 :(得分:0)
app_id值和'&amp; redirect_url'之间有一个空格。仅供参考,您的浏览器(至少是铬)会自动对空白进行urlencode,这就是为什么网址在浏览器中可以正常工作的原因。我仍然不确定空间是如何存在的,但是urlencode()现在修复了它。