0

我的 FB-App 有这个问题

我有 2 个文件.. 1) mainApp.php .. 和.. 2) asyncApp.php .. (处理数据,提供内容和狗屎..)

现在..

  • 当用户登录时,一切正常.. 我得到访问令牌并将其保存到 SESSION-Var ..(此处仅处理 mainApp.php).. 但是..

  • 当我通过 jquery.load() 调用 async.php 例如 .. 我总是得到 {"error":{"message":"Malformed access token .. oO

但令牌与我从 mainApp.php 中的 FB 获得的令牌相同.. :(

mainApp:这样我得到了令牌..

if(isset($_GET["code"])) {
                $code = $_GET["code"];    
                $url = 'https://graph.facebook.com/oauth/access_token?client_id='.$appID.'&redirect_uri='.urlencode($appRedirectURI).'&client_secret='.$appSecret.'&code='.$code;
                $curl_handle=curl_init();                   
                curl_setopt($curl_handle,CURLOPT_URL,$url);
                curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,6);
                curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
                $buffer = curl_exec($curl_handle);                  
                curl_close($curl_handle); 

                if(strpos($buffer, 'access_token=') === 0) {                        
                    //if you requested offline acces save this token to db for use later                        
                    $token = str_replace('access_token=', '', $buffer);
                    $_SESSION['fbToken'] = $token;                                          

后来我调用了 async.php,它应该在用户墙上做一个提要..

$attachment =  array(
                        'access_token' => $_SESSION['fbToken'],
                        'message' => 'dfdfdf',
                        'name' => 'sdfdsf',
                        'link' => 'http://www.mbla.de',
                        'description' => 'sdfdsf',
                        'picture'=> '',
                        'actions' => json_encode(array('name' => $action_name,'link' => $action_link))
                        );

                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/me/feed');
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
                        curl_setopt($ch, CURLOPT_POST, true);
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //to suppress the curl output 
                        $result = curl_exec($ch);
                        curl_close ($ch);

如果有人可以帮助我会很好..我现在已经痛苦了将近 2 周了.. :(

4

1 回答 1

0

欢迎来到堆栈溢出!


  1. 当你async.php直接打电话时会发生什么,它有效吗?
  2. 当你有脚本print_r()的内容时会发生什么$_SESSION,它被填充了吗?
    • 如果您通过 ajax 调用执行此操作,并通过 Firebug/Chrome Inspector 检查输出会怎样?

查看附加的代码 ( async.php),您似乎没有正确地将参数传递给 Facebook。curl 选项CURLOPT_POSTFIELDS不将数组作为参数。相反,它应该被构造为一个查询字符串:

curl_setopt($ch, CURLOPT_POSTFIELDS, 'param1=value&param2=value&param3=value');

为方便起见,我倾向于这样做:

curl_setopt($ch, CURLOPT_POSTFIELDS, htmlspecialchars(http_build_query(array(
    "param1" => 'value',
    "param2" => 'value',
    "param3" => 'value'
))));
于 2013-04-04T02:14:24.893 回答