PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   Off Topic Area (http://www.selfphp.de/forum/forumdisplay.php?f=15)
-   -   Facebook Api Post auf Fanseite nicht immer möglich (http://www.selfphp.de/forum/showthread.php?t=25075)

ProCoder2025 02.10.2013 17:19:51

Facebook Api Post auf Fanseite nicht immer möglich
 
Hallo

ich habe folgendes Problem.
Ich möchte über ein APP von einer Website auf meine Facebook fanseite posten.
Dies funktioniert aber nur bedingt.

Zum testen habe ich eine Klasse und eine index.php angelegt, darüber läuft alles wunderbar.
Die Klasse und die dazugehörende SDK Bibliothek habe ich ohne Veränderung in das Hauptprojekt eingepflegt und der einzige Unterschied besteht nur beim erzeugen des Objektes.

Mir ist aber folgendes aufgefallen. Wenn ich im Hauptprojekt die Daten posten möchte, klappt es NUR wenn ich vorher mind. 1x über die Testdatei (die eigentlich keine Bewandtnis hat) etwas gepostet habe. Der Code für das Senden ist jedoch komplett identisch.

Ich habe nicht wirklich rausgefunden an was das liegen kann.
Ich habe die App-Einstellungen kontrolliert, die App mehrmals aus dem Account gelöscht und der Verdacht über evtl. falsch gespeicherte Acces Token hat sich auch nicht bestätigt.
Ich weiß kein Rat mehr.

Kann jemand mal schauen ob vllt. im Code irgendetwas falsch ist.
Ich wäre euch sehr dankbar.

Index.php von Testseite

PHP-Code:


    
require 'class.fbPost.php';
    
$message "Das ist ein Test";
    
$pictureUrl "http://www.example.com/slider/0000019.jpg";
    
$link "www.example.com";
    
$name "Example";
    
$caption "Example";
    
$description "Test";

    
$facebook = new facebookPost();
    
$facebook->postfacebook($message$pictureUrl$link$name$caption$description); 

Hier ein Auszug der Objekterzeugung von der Hauptversion

PHP-Code:

    $message $fb_text;
    
$pictureUrl "";
    
$link $fb_link;
    
$name $fb_name;
    
$caption $fb_caption;
    
$description $fb_desc;
    
$facebookSend = new facebookPost();
    
$facebookSend->postFacebook($message$pictureUrl$link$name$caption$description); 

Die Klasse die bei beiden Versionen die gleiche ist

PHP-Code:


<?php
    
require 'fbsdk/src/facebook.php';
    class 
facebookApi{
        protected 
$seitenId;
        protected 
$appId;
        protected 
$secretId;

        public function 
__construct(){
            
$this->seitenId "XXXXXX";
            
$this->appId "XXXXXX";
            
$this->secretId "XXXXXXXXXX";
        }

        public function 
fbInstanzieren(){
            
$facebook = new Facebook(array(
            
'appId'  => $this->appId// Anwendungs-ID
            
'secret' => $this->secretId// Anwendungs-Geheimcode
            
'cookie' => true// Zugriff auf die Session durch Cookies erlauben.
            
));
            return 
$facebook;
        }
    }

    class 
facebookPost extends facebookApi{

        public function 
__construct(){
            
parent::__construct();
        }

        public function 
postFacebook($message$pictureUrl$link$name$caption$description){
            
$facebook parent::fbInstanzieren();  // greift auf Elternmethode zu
            
$seitenId $this->seitenId;
            
$appId $this->appId;
            
$secretId $this->secretId;
            
$token "";
            
$user $facebook->getUser(); // speichert in Variable evtl. bereits eingeloggten User
            
if ($user){  // Ist User bereits authentifiziert?
                
try {

                    
$page $facebook->api('me/accounts');
                    
$result count($page['data']); // zählt array Index Anzahl(Anzahl Fanseiten im Account)
                    
for($i 0$i $result$i++){
                        
//stimmen IDs von Fanseite überein?
                        
if($page['data'][$i]['id'] == $seitenId){
                            
$pageDaten[] = $page['data'][$i]; // Infos von gewünschter Fanpage werden gespeichert
                            
$token $page['data'][$i]['access_token']; // Speichern des token
                        
}
                    }
                    
//print_r($pageDaten);
                    
print '<pre>' print_r($pagetrue) . '</pre>';


                    
// Ausgabe eigentlich aus User

                    
$arguments = array(
                        
'message' => $message,
                        
'picture' => $pictureUrl,
                        
'link'  => $link,
                        
'name' => $name,
                        
'caption' => $caption,
                        
'description' => $description,
                        
'privacy' => '{"value": "EVERYONE"}',
                        
'access_token' => $token,   // Access Token muss angegeben werden um als Fanseite posten zu können
                    
);

                    
// Versenden der Daten an API
                    
$facebook->api("/".$seitenId."/feed"'post'$arguments);  // seitenID für Fanpage, post Metohde, Daten die versendet werden sollen
                    
print '<pre>' print_r($argumentstrue) . '</pre>';
                }
                catch (
FacebookApiException $e) {
                    print 
$e;
                }
            }
            else
            {
                
//$loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_stream,manage_pages')); // Berechtigungen von APP bei FB abholen, z.B. Seiten verwalten, posten etc.
                
$loginUrl $facebook->getLoginUrl(array('scope' => 'publish_stream,manage_pages,offline_access')); // Berechtigungen von APP bei FB abholen, z.B. Seiten verwalten, posten etc.
                
echo("<script> top.location.href='" $loginUrl "'</script>");


            }
        }
    }

?>

Vllt. kann mir jemand helfen oder hat bereits ähnliche Probleme gehabt.

Ckaos 04.10.2013 13:53:31

AW: Facebook Api Post auf Fanseite nicht immer möglich
 
Hi,

ja ja Facebook und die Access Token. Hast du wirklich über den DEV Center mal geschaut wie lange dein Page Admin Access Token gültig ist?

Das ist ein ganz schönes wirrwarr und bei meinem letzten FB-App hab ich nur durch zufall und viel rumprobieren gesehen das ich von FB das falsche Token zurückbekommen habe, welches nur für mich und auch nur für 60min gültig war, das richtige hab ich dann durch irgendein Tool im DEV Center unter Page Access Token anzeigen gefunden :/

Viel Glück...

MfG

CKaos

ProCoder2025 07.10.2013 10:22:55

Hey Ckaos,

ich danke dir für deine Antwort, hat mir sehr geholfen.
Dank dir habe ich einen Denkanstoß bekommen und ich habe nochmal nach der Lebensdauer des Access Token geschaut, diese ist zwar wirklich nur 60 Minuten aber daran lag es gar nicht.
Da ich mit manage_pages arbeite, habe ich eine langlebige Dauer automatisch.

Folgender Link hat mich weitergebracht:
http://frank-it-beratung.com/blog/20...ffline_access/

Ich habe schnell einen Fake-Account eingerichtet und festgestellt das damals bei dem Test ein Access-Token irgendwie gespeichert wurde und dieser funktioniert aus unerklärlichen Gründen nur wenn ich die Testseite mind. 1x nutze.

Mit dem Fake-Account konnte ich sofort die Posts versenden.
Den Fehler muss ich jetzt mal genauer analysieren, aber zumindest kann ich erstmal von anderen Accounts problemlos auf Facebook posten.

Besten Dank...

PS:
Ok, ich hab festgestellt das Facebook macht was es will. Es funktioniert doch noch nicht, erst hat es den Anschein gemacht, aber mein Test über mehrere Browser ergab, dass es nur ein Zufall war.
Es besteht immer noch das selbe Problem. Ich fühle mich langsam wie beim Roulette.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:31:19 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.