Toon posts:

[PHP] Facebook API: Error validating client secret

Pagina: 1
Acties:

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 21-04 23:10
Ik ben mijn voorzichtige eerste stappen aan het zetten om de Facebook API te gaan gebruiken.
Ik wil de Facebook API gebruiken om het nieuws die geplaatst wordt vanuit de website die ik onderhoud rechtstreeks als samenvatting + link ook te plaatsen op de fanpagina van de stichting waar de website van is.

Ik gebruik voor dit alles de tutorial van Pontikis.net: http://www.pontikis.net/blog/auto_post_on_facebook_with_php
Gisteren had ik geen problemen om dit te volgen, maar in mijn poging die ellenlange codes niet steeds te hoeven noteren en dat in klikbare links te stoppen krijg ik nu alsmaar de volgende JSON foutmelding wanneer ik een access token wil aanvragen:
JSON:
1
2
3
4
5
6
7
{
   "error": {
      "message": "Error validating client secret.",
      "type": "OAuthException",
      "code": 1
   }
}


Ik heb al wel andere foutmeldingen meegemaakt als:
JSON:
1
2
3
4
5
6
7
{
   "error": {
      "message": "This IP can't make requests for that application.",
      "type": "OAuthException",
      "code": 5
   }
}

En:
JSON:
1
2
3
4
5
6
7
{
   "error": {
      "message": "An active access token must be used to query information about the current user.",
      "type": "OAuthException",
      "code": 2500
   }
}

Maar die heb ik prima kunnen verhelpen. De eerste kwam omdat ik in de Developper Dashboard het IP-adres waar vandaan ik de aanroep deed nog niet in de whitelist had gezet. De tweede ging mis doordat de URL niet meer klopte na wat knip en plak werk.

Nu kloppen de URL's echter wel, heb ik vele pagina's via Google gevonden en heb ik alles nog eens gedubbelchecked en nog steeds geen bijzonderheden aangetroffen.
Het lijstje dat ik via de zoekresultaten tegen kom is dan steevast:
[list]
• your domain is the same as what you listed in the facebook callback url
• the app id is correct (actually print this out on a page, sometimes y
• the app secret is correct
Met de eerste bedoelen ze neem ik aan dat mijn redirect_uri op het zelfde domein moet zijn als van waaruit ik de aanvraag doe. Als die aanname klopt dan doe ik dat correct.
De app id had ik al gedubbelchecked en staat ook goed.
De app secret lijkt mij nog niet van toepassing aangezien ik nog geen gebruiker gegevens aan het ophalen ben.

Zou ik nu de foutmelding krijgen, omdat de app voor de ingelogde gebruiker al toegang heeft?
Zo ja, hoe reset je dan de access token of hoe vraag je een nieuwe access token aan?
Zo nee, wat kan er fout zijn?

Om te bepalen of de fout nu wel of niet in mijn code zit volgt hier mijn (deels gecensureerde) PHP code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$facebook["client_id"]="*************95";
$facebook["redirect_uri"]="http://subdomein.mijndomeinnaam.nl/content/mijnaccount/webmtools/facebook/fb-tokens/";
$facebook["scope"]="manage_pages,publish_stream";
if($requestpath[4]=="fb-tokens"){ //gedeelte uit friendly url
    //stap 2: autorisatie-token ontvangen
    ?>
    <h3>Facebook retourneerde:</h3>
    <pre>
    <?=print_r($_GET); ?>
    </pre>
    <?php
    if($_GET["code"]!=""){
        //stap 3: access token aanvragen
        ?>
        <h3>Code:</h3>
        <textarea rows="10" cols="70"><?=htmlentities($_GET["code"]); ?></textarea>
        <p><a href="https://graph.facebook.com/oauth/access_token?client_id=<?=$facebook["client_id"]; ?>&redirect_uri=<?=$facebook["redirect_uri"]; ?>&client_secret=<?=htmlentities($_GET["code"]); ?>">Proceed</a></p>
        <?php
    }
}
else{
    //stap 1: URL creëren voor autorisatie aanvraag
    ?>
    <h3>Autoriseren:</h3>
    <p><a href="https://www.facebook.com/dialog/oauth?client_id=<?=$facebook["client_id"]; ?>&redirect_uri=<?=$facebook["redirect_uri"]; ?>&scope=<?=$facebook["scope"]; ?>">Proceed</a></p>
    <?php
}
?>
<h3>Script variabele Facebook:</h3>
<pre>
<?=print_r($facebook); ?>
</pre>

Ik hoop dat iemand met wat meer ervaring met de Facebook API mij kan vertellen wat ik over het hoofd zie.

  • WernerL
  • Registratie: December 2006
  • Nu online
De secret heb je wel degelijk nodig. Wat je moet doen is gegevens van de gebruiker ophalen. Heeft de gebruiker jouw app al toestemming gegeven krijg je de gegevens terug, heeft de gebruiker nog geen toestemming gegeven dan redirect je de gebruiker naar Facebook.

Code zou er dan ongeveer zo uit moeten zien:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$fbuid = $facebook->getUser();
        
        if($fbuid) {
            try {
                $userprofile = $facebook->api("/me", "GET");
                                //gebruiker heeft toestemming gegeven, doe iets met zijn userprofile
            } catch (FacebookApiException $ex) {
                header('location: ' . $facebook->getLoginUrl(array('scope' => 'public_profile, user_photos')));
            }
        }
        else {
            header('location: ' . $facebook->getLoginUrl(array('scope' => 'public_profile, user_photos')));
        }

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 21-04 23:10
Het is dus niet zo dat als je die toestemming al hebt en wanneer je twijfelt of je de juiste secret hebt (zeker in de testfase bij mij) een nieuwe secret kan opvragen? Want dat is voornamelijk waar ik nu een beetje tegenaan hik.

Acties:
  • 0Henk 'm!

  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 05-01 20:13

telefoontoestel

Maak me gelukkig....Bel!!

Elke keer dat de gebruiker de verbinding verbreekt wordt de bestaande secret ongeldig. Die moet dan ook weer opnieuw worden opgehaald. Ik weet niet of het bij FB ook zo werkt, maar mijn ervaring met Dropbox is dat je de secret ergens moet opslaan zolang je die wilt gebruiken.

telefoontoestel


Acties:
  • 0Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Nu online
Nee, de secret wordt gegenereerd zodra je een app aanmaakt via https://developers.facebook.com
Deze secret moet je samen met je app id meesturen in iedere request naar Facebook. De secret is terug te vinden in de dashboard van je app.


Lees anders eens de documentatie van Facebook, daar staat alles uitgelegd inclusief voorbeeld code: https://developers.facebo.../php/gettingstarted/4.0.0

[Voor 3% gewijzigd door WernerL op 06-06-2014 08:59]



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee