2017-01-02 10 views
1

Мне нужно снять некоторые сообщения с страницы Facebook и отобразить их на моем веб-сайте. Я смотрю на использование API-интерфейса Facebook для этого, но я немного борюсь, документация и всевозможные учебники, похоже, предполагают, что я настрою входной поток, чтобы сначала попросить пользователя войти на мой сайт. Но это не то, что мне нужно. Мне нужно, чтобы приложение на стороне сервера было (осталось) аутентифицировано с помощью Facebook и регулярно загружало новые сообщения.Аутентификация с помощью графического интерфейса Facebook

Я выяснил, что с помощью токенов страницы можно получить долгоживущий токен, но сейчас я даже не могу понять, как аутентифицироваться с использованием обычных коротких токенов.

Итак, я настроил тестовое приложение, чтобы получить идентификатор приложения и секрет, и отправился в API-интерфейс API-интерфейсов Facebook, чтобы получить токен аутентификации для пользователя, которого я использовал для создания приложения.

Вот основной код, я использую для тестирования соединения Graph API:

(...) 
$fb = new \Facebook\Facebook([ 
    'app_id' => $app_id, 
    'app_secret' => $app_secret, 
    'default_graph_version' => '2.8', 
    'default_access_token' => $app_access_token 
]); 

try { 
    $response = $fb->get('/me'); 
} catch(\Facebook\Exceptions\FacebookResponseException $e) { 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(\Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

$me = $response->getGraphUser(); 

Когда я запускаю мой код, я получаю это сообщение:

Graph returned an error: Invalid appsecret_proof provided in the API argument

Я тройной проверил что $app_id и $app_secret являются значениями, указанными при создании приложения, и я проверил тройной токен доступа (попробовал личный токен пользователя, а также токен страницы, который я смог получить через API-интерфейс Graph API).

я нашел другую SO нить предполагая, что я должен генерировать appsecret доказательства вручную, так что я сделал это:

$appsecret_proof= hash_hmac('sha256', $app_access_token, $app_secret); 

$fb = new \Facebook\Facebook([ 
    'app_id' => $app_id, 
    'app_secret' => $appsecret_proof, 
    'default_graph_version' => '2.8', 
    'default_access_token' => $app_access_token 
]); 

Я не уверен, если я должен передать $appsecret_proof к app_secret или как я должен использовать Это. Я по-прежнему получаю ту же ошибку с кодом выше.

+0

В общем, вам не нужно иметь дело с appsecret_proof при использовании официального sdk. если нет, вы должны добавить его к каждому вызову api. – luschn

+0

Да, как я понимаю из документации, это не обязательно, но при условии, что сообщение об ошибке сообщает мне, что 'appsecret_proof' недействителен, я полагал, что использование этого явно может помочь. Но я получаю такое же сообщение об ошибке с или без. – funkylaundry

ответ

0
get facebook mutual friend with app user or non app user 

    $access_token = "facebook user token"; 
    $facebook_id = "friend id"; 
    $app_secret = "facebook secret"; 
    $appsecret_proof = hash_hmac('sha256', $access_token, 
    $app_secret); 


    $graph_url = "https://graph.facebook.com/" . $facebook_id . "?fields=context.fields(all_mutual_friends.fields(id,name,picture.width(200).height(200)))" . "&access_token=" . $access_token . "&appsecret_proof=" . $appsecret_proof; 


    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $graph_url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

    $output = curl_exec($ch); 
    return $response_mutual = json_decode($output, true); 
    curl_close($ch); 

 Смежные вопросы

  • Нет связанных вопросов^_^