2012-11-05 181 views
0

我只在移動設備上遇到此錯誤。重定向到登錄工作正常,用戶被正確重定向迴應用。我沒有錯誤。然後,如果我第二次訪問應用程序(第一次使用後幾秒鐘),file_get_contents會拋出一個400錯誤的請求 - 這裏是代碼 - 幫助高度讚賞:-)Facebook 400第二次錯誤請求我使用應用程序

$ code = $ _REQUEST [「code」];如果(空($ code)){ $ my_url ='https://m.facebook.com/apps/'.$app_id.'/?sid='.$surveyid'。 & country ='。$ country; $ dialog_url =「https://www.facebook.com/dialog/oauth?client_id=」 。 $ app_id。 「& redirect_uri =」。 urlencode($ my_url)。 「& scope = user_birthday」;

 echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
     exit(); 
     } 

     $my_url = 'https://m.facebook.com/apps/'.$app_id.'/?sid='.$surveyid.'&country='.$country; 
     $token_url = "https://graph.facebook.com/oauth/access_token?" 
     . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) 
     . "&client_secret=" . $app_secret . "&code=" . $code; 

     $response = file_get_contents($token_url); 
     $params = null; 
     parse_str($response, $params); 

     $graph_url = "https://graph.facebook.com/me?access_token=" 
     . $params['access_token']; 

     $user = json_decode(file_get_contents($graph_url)); 

     $me['id']=$user->id; 
     $me['gender']=$user->gender; 
     $me['first_name']=$user->first_name; 
     $me['last_name']=$user->last_name; 
     $me['birhtday']=$user->birthday; 

回答

0

您是否檢查過會話是否第二次可用?

我看到會話變量可能丟失

+0

對不起,從上面的代碼中刪除了SESSION - 這不會導致錯誤的請求 – user1794496

0

然後,如果我訪問的應用程序第二次(第一次使用後秒)的file_get_contents拋出回一個400錯誤的請求

當初您使用PHP SDK而不是通過手動方式對API執行請求,您將得到一個異常,並帶有應該解釋發生了什麼的錯誤消息 - 請考慮將來使用它,這會使很多事情變得更容易包括調試。


至於當前的問題,它看起來像你想每次交換code參數爲新的訪問令牌 - 但這將不再可能在未來,看到https://developers.facebook.com/roadmap/#december-2012,「新安全限制對於OAuth授權碼」:

我們將只允許授權碼被用於訪問令牌一次

對於新創建的應用程序交換,這種遷移是ENABL編輯默認 - 你現在可以禁用它,它應該按預期工作。但2012年12月5日之後,您必須有一個解決方案,無需多次交換訪問令牌的代碼。

+0

我已經停用2012年12月的重大更改並且沒有任何更改。 此外,如果我使用php sdk在github上顯示,我會收到錯誤「」未捕獲的OAuthException:必須使用活動訪問令牌來查詢有關當前用戶的信息「 – user1794496

+0

奇怪的是,一切工作正常desktopto瀏覽器 - 僅在手機上無法使用 – user1794496

+0

僅區別: 這是我在桌面上使用的redirect_url: $ my_url =「https://www.facebook.com/pages/MyRadioTestcom/337429986650?sk=app_".$app_id。」 &app_data =「。$ surveyid。」_「。$ country。」_「。$ token; 這是我在手機上使用的一個: $ my_url ='https://m.facebook.com/apps/' 。$ APP_ID '/ SID =?' $ surveyid '和國家=' $國家和令牌='$令牌。。。。 – user1794496