2017-01-02 16 views
1

私はFacebookのページからいくつかの投稿を取り出し、私のウェブサイトに表示する必要があります。私はこのためにFacebook Graph APIを使用していますが、少し苦労しています。ドキュメントやチュートリアルのすべての種類は、まずユーザーに自分のWebサイトにログインするように要求するためのログインフローを設定すると思われます。しかし、それは私が必要なものではありません。私は私のサーバー側のアプリケーションがFacebookで認証されている(滞在中)必要があり、定期的に新しい投稿を取得します。Facebook Graph APIで認証する

ページトークンを使用して長寿命のトークンを取得することが可能であることがわかりましたが、今では通常の短命トークンを使用して認証する方法を理解できません。

私はアプリIDとシークレットを取得するためのテストアプリをセットアップし、Facebook Graph API Explorerに行って、アプリの作成に使用したユーザーの認証トークンを取得しました。ここで

は、私は、接続グラフ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は、私がアプリケーションを作成したときに与えられた値で、私のアクセストークンをチェックしました(私の個人的なユーザートークンとGraph API Explorerを介して取得できたページトークンで試しました)。

は、私は別のSO私は手動でappsecret証明を生成する必要があることを示唆しているスレッド見つかったので、私はこれでした:私は app_secretから $appsecret_proofを渡す必要がありますか、私はどのように使用するかどうか

$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 
]); 

は、私はよく分からないがそれ。私はまだ上記のコードで同じエラーが発生しています。

+0

通常、公式SDKを使用する場合、appsecret_proofに対処する必要はありません。もしそうでなければ、それをすべての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);