2017-01-02 8 views
1

Ich muss einige Beiträge von einer Facebook-Seite ziehen und sie auf meiner Website anzeigen. Ich schaue mir die Facebook Graph API an, aber ich habe ein wenig Probleme, die Dokumentation und alle Arten von Tutorials scheinen davon auszugehen, dass ich einen Login-Flow einrichten werde, um den Benutzer zu bitten, sich auf meiner Website anzumelden. Aber das brauche ich nicht. Ich brauche meine serverseitige Anwendung, um mit Facebook authentifiziert zu werden und regelmäßig neue Beiträge zu holen.Authentifizieren mit Facebook Graph API

Ich fand heraus, dass es möglich sein sollte, ein langlebiges Token mit Hilfe von Page-Token zu bekommen, aber im Moment kann ich nicht einmal herausfinden, wie man sich mit regulären kurzlebigen Token authentifizieren kann.

Also habe ich eine Test-App eingerichtet, um eine App-ID und ein Geheimnis zu erhalten, und bin zum Facebook Graph API Explorer gegangen, um das Authentifizierungstoken für den Benutzer zu erhalten, den ich zum Erstellen der App verwendet habe.

Hier ist die grundlegende Code ich die Verbindung Graph Api zu testen, bin mit:

(...) 
$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(); 

Wenn ich meinen Code ausführen bekomme ich diese Meldung:

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

Ich habe Triple-geprüft dass $app_id und $app_secret die Werte sind, die ich beim Erstellen der App angegeben habe, und ich habe mein Zugriffs-Token dreimal geprüft (mit meinem persönlichen Benutzer-Token sowie dem Seiten-Token, das ich über den Graph-API-Explorer abrufen konnte).

fand ich eine andere SO Thread darauf hindeutet, dass ich manuell einen appsecret Beweis erzeugen soll, also tat ich dies:

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

Ich bin nicht sicher, ob ich die $appsecret_proof zum app_secret oder wie ich verwenden soll passieren soll es. Ich bekomme immer noch den gleichen Fehler mit dem obigen Code.

+0

im Allgemeinen müssen Sie sich nicht mit dem appsecret_proof befassen, wenn Sie den offiziellen sdk verwenden. Wenn nicht, müssen Sie es zu jedem API-Aufruf hinzufügen. – luschn

+0

Ja, wie ich aus der Dokumentation verstehe, ist es nicht obligatorisch, aber angesichts der Fehlermeldung, dass die 'appsecret_proof' ist ungültig, ich denke, es explizit helfen könnte. Aber ich bekomme die gleiche Fehlermeldung mit oder ohne. – funkylaundry

Antwort

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