Если вы установили для oauth значение true при вызове FB.init () через API Javascript, теперь вы получите cookie fbsr_APP_ID вместо cookie fbs_APP_ID (обратите внимание на «r»).Он содержит подписанный запрос и часть миграции oauth.
Если вы используете PHP SDK, он должен позаботиться об изменении.
Однако документы для веб-сайтов, похоже, не обновляются с помощью новой функции get_facebook_cookie (): https://developers.facebook.com/docs/guides/web/
В ней по-прежнему используется старый формат файлов cookie.Вы можете найти, как разобрать подписанный запрос здесь:
http://developers.facebook.com/docs/authentication/signed_request/
Затем вам нужно превратить параметр «code» в cookie в access_token через документы здесь: разработчики.facebook.com/docs/authentication/ (не http: // из-за предотвращения спама в StackOverflow)
Я немного покопался в источнике нового PHP SDK, чтобы выяснить это, поскольку вся документацияне обновляется.
Полный код, который я использую, представляет собой комбинацию вышеперечисленного с небольшими дополнительными модификациями для работы со старым или новым форматом cookie ниже.Новая функция get_facebook_cookie () возвращает несколько дополнительных элементов массива (алгоритм, код, assign_at, user_id), и несколько элементов массива больше не установлены (base_domain, secret, session_key, sig).Основные параметры, которые ищут большинство людей, скорее всего, установлены (uid, access_token и expires)
function get_facebook_cookie($app_id, $app_secret) {
if ($_COOKIE['fbsr_' . $app_id] != '') {
return get_new_facebook_cookie($app_id, $app_secret);
} else {
return get_old_facebook_cookie($app_id, $app_secret);
}
}
function get_old_facebook_cookie($app_id, $app_secret) {
$args = array();
parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);
ksort($args);
$payload = '';
foreach ($args as $key => $value) {
if ($key != 'sig') {
$payload .= $key . '=' . $value;
}
}
if (md5($payload . $app_secret) != $args['sig']) {
return array();
}
return $args;
}
function get_new_facebook_cookie($app_id, $app_secret) {
$signed_request = parse_signed_request($_COOKIE['fbsr_' . $app_id], $app_secret);
// $signed_request should now have most of the old elements
$signed_request[uid] = $signed_request[user_id]; // for compatibility
if (!is_null($signed_request)) {
// the cookie is valid/signed correctly
// lets change "code" into an "access_token"
$access_token_response = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=$app_id&redirect_uri=&client_secret=$app_secret&code=$signed_request[code]");
parse_str($access_token_response);
$signed_request[access_token] = $access_token;
$signed_request[expires] = time() + $expires;
}
return $signed_request;
}