在粉丝专页上获取 Facebook 用户 ID 不再有效
此代码过去工作正常,但现在我的 $data
对象中缺少 user_id
。我想到,从用户“喜欢”该页面的那一刻起,他就不再是匿名的,您可以使用此代码获取他的 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
ing the $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)
}
}
}
Facebook 改变了什么吗?
This code used to work fine, but now the user_id
is missing in my $data
object. I had in mind, that from the moment the User 'Likes' the page, he isn't anonymous anymore and that you can fetch his ID using this code. This is the code I have always used:
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
ing the $data
object shows this:
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)
}
}
}
Did facebook change something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你在使用旧的 fb_sig 东西吗?我不会假装理解它的含义,但 fb_sig 前几天被删除了。他们说它在 10 月 1 日被删除,但我认为他们实际上在上周晚些时候删除了它:
http: //developers.facebook.com/blog/post/497/
Are you using the old fb_sig stuff? I'm not going to pretend to understand what it means, but fb_sig was removed the other day. They said it was removed on October 1st, but I think they actually removed it late last week:
http://developers.facebook.com/blog/post/497/