[PHP] Facebook API: Error validating client secret

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 25-06 13:21
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.

Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:08
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')));
        }

Roses are red, violets are blue, unexpected '{' on line 32.


Acties:
  • 0 Henk 'm!

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 25-06 13:21
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:
  • 0 Henk 'm!

  • telefoontoestel
  • Registratie: Oktober 2002
  • Laatst online: 29-06-2024

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:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 22:08
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 ]

Roses are red, violets are blue, unexpected '{' on line 32.