2011-11-17 28 views
3

此代码用于正常工作,但现在在我的$data对象中缺少user_id。我记得,从用户'喜欢'这个页面的那一刻起,他就不再是匿名的,并且你可以使用这个代码来获取他的ID。这是代码我一直使用:在Fanpage上获取Facebook用户ID不再适用

require_once 'assets/requests/facebook-php-sdk-dafef11/src/facebook.php'; 

$secret = "XXX"; 
$data = parse_signed_request($_REQUEST['signed_request'], $secret); 


function parse_signed_request($signed_request, $secret) { 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

// decode the data 
$sig = base64_url_decode($encoded_sig); 
$data = json_decode(base64_url_decode($payload), true); 
echo ' FUID: ', $fuid = $data['user_id']; // NO USER ID HERE ANYMORE 
echo '<pre>' , var_dump($data), '</pre>'; 

if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
    error_log('Unknown algorithm. Expected HMAC-SHA256'); 
    return null; 
} 

// check sig 
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
} 

return $data; 
} 

function base64_url_decode($input) { 
return base64_decode(strtr($input, '-_', '+/')); 
} 

var_dump荷兰国际集团的$data对象表明这一点:

array(4) { 
    ["algorithm"]=> 
    string(11) "HMAC-SHA256" 
    ["issued_at"]=> 
    int(1321524964) 
    ["page"]=> 
    array(3) { 
    ["id"]=> 
    string(15) "227488627318218" 
    ["liked"]=> 
    bool(true) 
    ["admin"]=> 
    bool(false) 
    } 
    ["user"]=> 
    array(2) { 
    ["locale"]=> 
    string(5) "de_DE" 
    ["age"]=> 
    array(1) { 
     ["min"]=> 
     int(21) 
    } 
    } 
} 

实有没有什么变化?

回答

0

你使用旧的fb_sig的东西?我不会假装明白它的含义,但前些日子fb_sig被删除了。他们说它已在10月1日被删除,但我认为他们上周晚些时候实际上删除了它:

http://developers.facebook.com/blog/post/497/