8

Tôi đang cố gắng phát triển một ứng dụng Facebook (apps.facebook.com/some_app) bằng cách sử dụng PHP, nơi tôi cần trình bày một số thông tin dựa trên sở thích âm nhạc của người dùng. Tôi thấy rằng trong các trò chơi "user_likes>" của nó.Cần trợ giúp về mã OAuthException 2500

vấn đề của tôi là như sau:

  • Để truy cập, tôi đã thực hiện phương pháp thoại oauth như đề xuất trong API trong trang chỉ mục của tôi.

$auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
      . $app_id . "&redirect_uri=" 
      . urlencode($canvas_page) 
      ."&scope=user_likes"; 
  • Sau khi ủy quyền thành công tôi quay trở lại trang index với "code" như thông số.

http://MY_CANVAS_PAGE/?code=some base64 encoded letters 
  • Thứ nhất tôi không biết nếu tôi cần access_token chỉ để đọc nhạc lợi ích của người sử dụng nhưng tôi đã thử tất cả các phương pháp đề nghị. Tôi không thể di chuyển chuyển tiếp từ điểm này
  • Tôi có một mã như thế này (trong trang chỉ mục của tôi), chuyển hướng để ủy quyền nếu thông số mã không được đặt.

if(empty($code) && !isset($_REQUEST['error'])) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    echo("<script> top.location.href='" . $auth_url . "'</script>"); 
} 
  • Hiện nay tôi đang chỉ cố gắng để có được thông tin công cộng của người dùng ở đây nhưng không thành công. Tôi đã thử phương pháp signed_request như đề xuất nhưng không thành công

$signed_request = $_REQUEST["signed_request"]; 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 
echo ("Welcome User: " . $data["user_id"]); 

print_r($decoded_response); 

stdClass Object ([error] => stdClass Object ([message] => An active 
access token must be used to query information about the current user. 
[type] => OAuthException [code] => 2500)) 

Để nhận được thông tin nào của người dùng, tôi đã cố gắng cũng là ví dụ cho thấy trong PHP SDK


$facebook = new Facebook(array(
'appId' => MY_APP_ID, //registered facebook APP ID 
'secret' => MY_SECRET, //secret key for APP 
)); 

$fb_user = $facebook->getUser(); 

if($fb_user){ 
    try { 
     $user_profile = $facebook->api('/me'); 
     echo $user_profile['email']; 
    } 
    catch(FacebookApiException $e) { 
     $fb_user = null; 
    } 
} 

Nhưng không thành công. Ai đó có thể giải thích cho tôi tại sao tôi nhận được lỗi này và cách truy cập đúng sở thích âm nhạc của người dùng. Có lẽ tôi đã hiểu lầm API.

Cảm ơn

Deepak

+0

Bạn đã tìm thấy một giải pháp? Tôi nhận được lỗi này ngay cả trên https://graph.facebook.com/me url. Không nên nó trả lại cho tôi thông tin facebook của tôi? – Kemal

Trả lời

0

thử mã này

$code = $_REQUEST["code"]; 
    if(empty($code)) { 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) ; 
    echo("<script>top.location.href='" . $dialog_url . "'</script>"); 
    } 

    $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); 
    $access_token = $params['access_token']; 

PS: Địa chỉ email dùng không phải là một thông tin nào & bạn cần sự cho phép user_email cho nó

+0

Nhưng tôi khuyên bạn nên sử dụng PHP-sdk. –

+0

đó là khá nhiều cùng một mã trong liên kết blog Facebook tôi đã đăng ở trên http://developers.facebook.com/blog/post/500/. Tôi đã thử điều đó rồi. Với mã trên, nếu tôi cố gắng echo $ access_token, không có gì được in. Đơn giản chỉ cần để trống. – Laraveldeep

+0

Vì mục đích gỡ lỗi, tôi đã cố gắng phản hồi $ response hoặc print_r ($ response) nhưng không có gì. Không biết tại sao tôi nhận được phản hồi trống/trống. Tôi nghĩ mọi thứ đã đi sai. Cảm ơn – Laraveldeep

9

Lỗi 2500 có nghĩa là bạn có không có mã thông báo truy cập hoặc mã thông báo truy cập ứng dụng nhưng đang cố truy cập /me/ - 'tôi' là trình giữ chỗ cho 'người dùng hiện tại o r ID trang 'do đó sẽ không hợp lệ nếu không có mã thông báo truy cập cho người dùng hoặc trang.

Để truy cập vào danh sách của người sử dụng thích bạn cũng sẽ cần user_likesPermission khi cho phép họ

Nguyên nhân rất có thể tôi đã nhìn thấy cho các ứng dụng không có khả năng trao đổi code cho một thẻ truy cập là:

  1. các redirect_uri bạn sử dụng là vào một thư mục hoặc máy chủ gốc và thiếu dấu gạch chéo (tức là nó là http://www.example.com thay vì http://www.example.com/)
  2. các redirect_uri bạn đã sử dụng trong cuộc gọi đầu tiên tới hộp thoại xác thực không chính xác giống như số redirect_uri bạn đã sử dụng trong lệnh gọi mã quảng cáo cho một access_token

Nếu dòng xác thực của bạn bị hỏng vì một số lý do khác và bạn không thể tìm ra từ ví dụ SDK hoặc tài liệu Authentication, có thể mất một lúc để người khác nói chuyện với bạn vì bạn có thể thiếu một số kiến ​​thức cơ bản cần thiết để hiểu câu trả lời của họ

0

Tôi đã giải quyết được sự cố của mình nhờ https://developers.facebook.com/blog/post/534/

Tôi vừa sao chép mẫu và dán vào kịch bản của tôi. Nó hoàn toàn phù hợp. Nó là loại sử dụng lai của PHP và Javascript.

+0

Biến $ me nào? Không có biến nào trong ví dụ bạn liệt kê hoặc trong mã số – Igy

+0

Tôi đã mã hóa dự án của mình khoảng 2 năm trước và những lần facebook đang sử dụng ' $ me' biến thay cho '$ user_id' hiện tại tại' $ user_id = $ facebook-> getUser(); 'Vì vậy,' $ me' là '$ me'. Nhưng bạn nói đúng, không có' $ me' trên trang Xin lỗi, tôi đã xóa nó. – Kemal

1

Đối với tôi, tôi đã cố gắng để có được một mã thông báo auth với php và phát hiện ra rằng lỗi 2500 là do một vấn đề với file_get_contents không trả lại bất cứ điều gì. Tôi có thể truy cập URL trong trình duyệt của mình, nhưng không phải bằng cách sử dụng file_get_contents. Tôi đã sửa nó bằng cách sử dụng CURL thay vì được mô tả ở đây: https://stackoverflow.com/a/6325313.

Kết quả là tôi đã sử dụng mã từ https://developers.facebook.com/docs/authentication/server-side/ và thay thế dòng:

$response = file_get_contents($token_url); 

với

$ch = curl_init($token_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 

Do đó, trở thành:

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($redirect_url) 
     . "&client_secret=" . $app_secret 
     . "&code=" . $code; 

    /* Facebook say to use this, but file_get_contents isn't working! 
    $response = file_get_contents($token_url,null, $val); 
    */ 

    // Use this as an alternative 
    $ch = curl_init($token_url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($ch); 

    // From https://developers.facebook.com/docs/authentication/server-side/ 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 
Các vấn đề liên quan