Это приложение для холста на платформе Facebook, использующее новый (est) Facebook PHP SDK.
Мы используем пример PHP из учебника Facebook (https://developers.facebook.com/docs/appsonfacebook/tutorial/), чтобы вызвать диалог OAuth и получитьтестовый пользователь на URL перенаправления.
В URL перенаправления мы используем пример PHP со страницы документов с подписанными запросами Facebook (https://developers.facebook.com/docs/authentication/signed_request/), и наши тестовые пользователи могут успешно авторизовать приложение.
Однако после того, как тестовый пользователь авторизует приложение, мы не можем перехватить токен доступа и срок его действия, его можно увидеть в адресной строке, добавленной к URL-адресу перенаправления, но он не отображается в массиве $ _REQUEST.Если мы добавим {$ access_token = $ facebook-> getAccessToken ();} на страницу URL перенаправления, она покажет значение для токена доступа, но отображаемое значение не является полной строкой токена, которую мы видим при нажатии на ПоказатьТокен на странице «Тестовые роли пользователей» (который, по нашему мнению, является правильным токеном доступа для тестового пользователя).
Вот пример URL перенаправления сдобавлен токен доступа: http://karmakorn.com/karmakorn/alpha20/kk-fb-auth.php#access_token=126736467765%7C2.AQDavId8oL80P5t9.3600.1315522800.1-100002908746828%7CJICJwM1P_97tKmqkEO5pXDCf-7Y&expires_in=6008
Вот что var_dump показывает для массива $ REQUEST для этой же страницы: array (3) {[" _qca"] => string (26)"P0-709927483-1291994912966" ["__switchTo5x"] => string (2) "30" ["PHPSESSID"] => string (26) "euois02ead39ijumca7nffblh2"}
Мы не знаем, почему $ _REQUESTМассив отличается от значений, добавляемых к URL-адресу, и, что более важно, - как получить маркер доступа и срок его действия.
Может кто-нибудь показать нам рабочий пример того, как они собирают эти данные после запуска parse_signed_request (Функция $ signature_request, $ secret) на странице перенаправления?Спасибо!
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Вот соответствующий код из A) нашей тестовой страницы индекса и B) нашей тестовой страницы перенаправления.Если мы используем нашу страницу индекса текста в качестве URL перенаправления, она застревает в бесконечном цикле - потому что пользователь никогда не идентифицируется.
A) Страница индекса
// Create kk-fb app instance
$facebook = new Facebook(array(
'appId' => KKFB_ID,
'secret' => KKFB_KY,
'oauth' => true,
));
$app_id = KKFB_ID;
$secret = KKFB_KY;
$canvas_auth = 'http://karmakorn.com/karmakorn/alpha20/kk-fb-auth.php';
$auth_url = "https://www.facebook.com/dialog/oauth?"
. "client_id=" . $app_id
. "&redirect_uri=" . urlencode($canvas_auth)
. "&response_type=token"
. "&scope=email,publish_stream";
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
echo ("Welcome User: " . $data["user_id"]);
}
B) Страница перенаправления
// Create kk-fb app instance
$facebook = new Facebook(array(
'appId' => KKFB_ID,
'secret' => KKFB_KY,
'oauth' => true,
));
$app_id = KKFB_ID;
$secret = KKFB_KY;
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
$user = $facebook->getUser();
$access_token = $facebook->getAccessToken();
echo "User: $user <br>";
echo "Access Token: $access_token <br>";
echo "Signed Request: $signed_request <br>";
var_dump($_REQUEST);
Вот что показывает эти результаты эхо:
Пользователь: 0 Токен доступа: 126736467765 | ** СЕКРЕТ **Подписанный запрос: array (3) {["_ qca"] => string (26) "P0-709927483-1291994912966" [" _switchTo5x"] => string (2) "30" ["PHPSESSID"] => string (26)" frugi545cdl15gjind1fnv6pq1 "}
Интересно, что когда тестовый пользователь возвращается на страницу индекса, условие if выполнено, и мы можем получить правильный токен доступа:
Приветственный пользователь: 100002908746828 Токен доступа: 126736467765 | 2.AQBgcyzfu75IMCjw.3600.1315544400.1-100002908746828 | m5IYEm976tJAkbTLdxHAhhgKmz8
Очевидно, что мы все еще что-то пропустили!Кроме того, нам нужно научиться получать время истечения как переменную, чтобы мы могли сохранить оба этих значения в нашей базе данных.