2012-08-02 42 views
7

Tôi đang cố cập nhật trạng thái người dùng Facebook bằng cách sử dụng đồ thị api. Mã của tôi làMã thông báo truy cập hoạt động phải được sử dụng để truy vấn thông tin về ngoại lệ người dùng hiện tại-đồ thị api

<?php 
    require 'facebook.php'; 
    $facebook = new Facebook(array( 
    'appId' =>'389694921095423', 
    'secret' =>'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 
    'cookie' => true 
    )); 
    $access_token = $facebook->getAccessToken(); 
    echo($access_token); 
    $me = null; 

    try 
    { 
     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 
     echo "Welcome User: " . $me['name'] . "<br />"; 
     //access permission 
     $permissions_needed = array('publish_stream', 'read_stream', 'offline_access', 'manage_pages'); 
     foreach($permissions_needed as $perm) 
     { 
      if(!isset($permissions_list['data'][0][$perm]) || $permissions_list['data'][0][$perm] != 1) 
      {  
      $login_url_params = array(
       'scope' => 'publish_stream,read_stream,offline_access,manage_pages',   
       'fbconnect' => 1,   
       'display' => "page",   
       'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']  
       );  
      $login_url = $facebook->getLoginUrl($login_url_params); 
      header("Location: {$login_url}"); 
      exit(); 
      } 
     } 
     //Access permission 

     $post_id = $facebook->api("/$uid/feed", "post", array("message"=>"Hello World!")); 
     if(isset($post_id)) 
     { 
      echo "A new post to your wall has been posted with id: $post_id"; 
     } 
    } 
    catch (FacebookApiException $e) 
    { 
     echo($e); 
    } 
?> 

Vấn đề là nó hiển thị lỗi thời gian chạy như Lỗi nghiêm trọng: Không bắt buộc OAuthException: Mã thông báo truy cập hoạt động phải được sử dụng để truy vấn thông tin về người dùng hiện tại. Tôi đã tạo ra Access Tocken. Trong trường hợp tôi phải sử dụng để loại bỏ ngoại lệ này Cảm ơn trước

+0

_ “Tôi đã tạo ra truy cập TOCKEN.” _ - ở đâu và _when_ đã làm bạn tạo ra nó? Có vẻ như bạn đang sử dụng mã thông báo đã hết hạn. Bạn có thể sử dụng công cụ gỡ lỗi để kiểm tra xem mã thông báo của bạn vẫn hợp lệ hay không: https://developers.facebook.com/tools/debug – CBroe

+1

Đó là vì $ facebook-> getUser() trả về 0 và người dùng không đăng nhập. –

Trả lời

32

Hãy thử thay đổi dòng:

$me = $facebook->api('/me'); 

để

$me = $facebook->api('/'.$uid); 

Ngoài ra hãy thử nâng cấp sdk của bạn nếu bạn không sử dụng mới nhất Phiên bản và nếu bạn chỉ cần nâng cấp sdk và nó gây ra rắc rối, hơn bạn có thể thử hạ cấp phiên bản và kiểm tra.

+1

bất kỳ lý do nào tại sao điều này sẽ hoạt động như trái ngược với/tôi? – Mike

+0

không chắc chắn, nhưng nó làm việc cho tôi ... – happyhardik

+5

tốt, đây là facebook! lỗi bizare, và vấn đề lớn nhất là lỗi này có thể được gây ra bởi rất nhiều vấn đề khác nữa. –

5

Xóa bộ nhớ đệm của bạn & cookie (nếu bạn đang thử nghiệm hoặc phát triển ứng dụng) và hãy làm như sau: -

try 
{ 
    $fb_user_info = $facebook->api('/me'); 
} catch (Exception $ex) 
{ 
    $facebook->destroySession(); 
    $params = array(
     'scope' => 'YOUR_PERMISSIONS', 
     'redirect_uri' => 'YOUR_SITE_URL' 
); 
    $fb_login_url = $facebook->getLoginUrl($params); 
    header("Location:" . $fb_login_url); 
} 
+0

* sidenote: * nhớ gọi 'exit;' sau 'header ('Location: $ url');' – Raptor

+1

lỗi typo trong lưu ý của bạn: nó phải là tiêu đề ('Location:'. $ url); chúng tôi không thể sử dụng biến trong dấu nháy đơn hoặc nó phải có dấu ngoặc kép –

+0

Có. Đó là một lỗi đánh máy ngu ngốc. Cảm ơn bạn đã nhắc nhở. (không thể chỉnh sửa) – Raptor

Các vấn đề liên quan