2011-06-10 71 views
0

我有一個網絡應用程序,允許人們直接註冊或通過Facebook註冊插件使用他們的Facebook憑證。我希望能夠將網站上發佈的信息複製到我的網站的Facebook粉絲頁面。到目前爲止,如果我有一個未登錄Facebook的用戶,它會發布到我的Page的牆上,沒有任何問題顯示它來自我的網站應用程序。但是,如果此人登錄Facebook,但尚未授予我的應用程序publish_stream權限,則會收到權限錯誤。無論如何,如果我沒有與用戶的適當權限,只是強制帖子來自我的網站應用程序?如果我的Facebook頁面上的每篇文章都來自應用程序,而不是來自用戶,我會很高興,但我根本找不到任何文檔顯示如何完成此操作,或者甚至可以完成。Facebook發佈到我的頁面沒有publish_stream權限的牆

編輯

這裏是我使用,讓我張貼到我自己的牆,如果這個人沒有登錄到Facebook的代碼。我已經授權該應用發佈。

$attachment = array('message' => $notes, 
        'name' => 'Backcountryride.com', 
        'caption' => "Community Driven Transportation", 
        'link' => 'http://backcountryride.com', 
        'description' => $description, 
        'picture' => 'http://backcountryride.com/images/vanlogo.jpg' 
        ); 
    $result = $facebook->api('/backcountryride/feed/','post',$attachment); 

EDIT2

下面是我用實例化實$對象的代碼:

$facebook = new Facebook(array(
    'appId' => FACEBOOK_APP_ID, 
    'secret' => FACEBOOK_SECRET, 
    'cookie' => true, 
)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
    $uid = $facebook->getUser(); 
    $me = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 

謝謝!

+0

你是如何做的張貼到您的粉絲頁面牆時,有沒有Facebook的用戶?這將有助於找出如何在沒有登錄用戶的情況下執行相同的操作。 – Nicole 2011-06-10 17:58:52

+0

聽起來就像你的網站發佈到你的粉絲頁面的某個時候,有一點是選擇使用自己的憑據或用戶的。這有可能嗎? – 2011-06-10 18:09:52

+0

@PortableWorld嗯,那麼你是否建議我可以實例化一個單獨的facebook對象,它僅與我的應用程序證書綁定? – MatthewLee 2011-06-10 18:23:58

回答

3

你在找什麼是「應用程序登錄」。您可以爲您的應用獲取會話而不是用戶。不容易找到,幾周前我偶然發現了它。然後,您只需使用通常使用的功能,但使用「應用程序」會話而不是「用戶」會話。

https://developers.facebook.com/docs/authentication/#app-login

+0

這是一個很棒的信息。謝謝! – MatthewLee 2011-06-14 15:52:12

2

這個沒有更長的作品。在這裏,https://stackoverflow.com/a/11102147/704647

因此,通過一些更多的研究,我能夠拼湊出一個解決這個問題的解決方案。爲了做到這一點,我需要使用圖形API和傳統REST API的組合。在授權我的應用程序發佈到我的牆上之後,我使用以下代碼將我的網站上的條目發佈到我的用戶的牆上。

$url = "https://graph.facebook.com/oauth/access_token"; 
$client_id = "XXXXXXXXXXXXXX"; 
$client_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
$postString = "client_id=$client_id&client_secret=$client_secret&type=client_cred"; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_FAILONERROR, 1); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $postString); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
$token = curl_exec($curl); 
curl_close($curl); 

$message = rawurlencode($description.'. Notes:'.$notes); 
$url = "https://api.facebook.com/method/stream.publish"; 
$postString = "message=$message&uid=XXXXXXXXXXXXX&$token"; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_FAILONERROR, 1); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $postString); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($curl); 
curl_close($curl); 

很少有值得注意的事情。 1.休息中的uid api $ postString是Facebook頁面的uid。你不需要target_id,因爲當uid是一個頁面時,它只能發佈給自己。 2.你的$ message必須是rawurlencoded,因爲這是其餘api接受的格式。 3.這將作爲您的APP發佈到您的頁面,而不是發佈到您網站的用戶。爲此,您需要獲得所有用戶的publish_stream權限。或者使用ui對話框來獲取每篇文章。如果你想要做的只是張貼到你的OWN頁面牆上,那麼這兩種看起來都是過度的。

因爲我已經看到這個問題的變化未答覆在很多地方(我發佈這個答案在一個)stackoverflow我認爲這是值得發佈這個答案在這裏。

如果您不確定如何授予您的應用程序權限發佈到您的Facebook頁面牆,則需要執行以下兩個步驟。我得到這個從this post

我首先要授權這個網址離線訪問(替換「MYAPIKEY」):http://www.facebook.com/login.php?api_key=MYAPIKEY&connect_display=popup&v=1.0&next=http://www.facebook.com/connect/login_success.html&cancel_url=http://www.facebook.com/connect/login_failure.html&fbconnect=true&return_session=true&session_key_only=true&req_perms=read_stream,publish_stream,offline_access

然後,我需要給予「publish_stream」權限PAGE這個網址(替換' MYAPIKEY'和'THEPAGEID'):http://www.facebook.com/connect/prompt_permissions.php?api_key=MYAPIKEY&v=1.0&next=http://www.facebook.com/connect/login_success.html?xxRESULTTOKENxx&display=popup&ext_perm=publish_stream&enable_profile_selector=1&profile_selector_ids=THEPAGEID

希望這有助於某人。

+0

這不再起作用,試圖授予發佈流權限,它抱怨說api端點已被棄用。 Facebook完成了一個糟糕的文檔糟糕的API。我一直在試圖弄清楚如何在幾個小時內做到這一點。這個簡單的東西不應該這麼難。 – btantlinger 2012-06-28 20:19:40

+0

我的意思是認真的,看看這是多麼令人費解。我想要做的就是發佈到我自己的奇怪頁面。任何Facebook工程師閱讀此?如果是這樣的話,真的嗎? – btantlinger 2012-06-28 20:28:19

+0

你是絕對正確@btantlinger。你不得不跳過這個圈子來完成這項工作是令人難以置信的。然後Facebook幾乎沒有通知就打破了這個方法(我認爲這是一個星期)。幸運的是,我發現這個http://stackoverflow.com/a/11102147/704647,這是我爲了使這個工作再次使用。祝你好運! – MatthewLee 2012-06-29 00:18:57

相關問題