2013-11-01 148 views
0

我花了相當一段時間試圖建立如何以及如何將一些數據從我的web服務器推送到創建的facebook頁面的最佳實踐以此目的。瞭解如何通過網站發佈到Facebook頁面作爲頁面(app)

我已閱讀並理解使用訪問令牌的過程。我爲自己生成了一個訪問令牌,可以用來發布到頁面,因爲我可以。我知道這應該被用來生成訪問令牌的頁面張貼作爲更棘手的頁面。但是,這個過程涉及到我登錄並生成訪問令牌,這對於自動化過程來說似乎本質上是不好的/不方便的。

因此,我按照指南創建了一個應用程序。我(認爲我有)將應用程序鏈接到頁面,從而嘗試通過appid和祕密從我的php代碼將數據推送到頁面。 做這件事時,我提出了這個錯誤

{"error":{"message":"(#210) Subject must be a page.","type":"OAuthException","code":210}} 

我的測試代碼是這樣的:

$data['picture'] = "http://www.example.com/image.jpg"; 
$data['link'] = "http://www.example.com/"; 
$data['message'] = "Your message"; 
$data['caption'] = "Caption"; 
$data['description'] = "Description"; 
$data['access_token'] = $app_token2; 
$post_url = 'https://graph.facebook.com/'.$app_id.'/feed'; 
$url1 = "https://graph.facebook.com/endpoint?key=value&access_token=".$app_id."|". $app_secret ; 
echo "<br>$post_url"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $post_url); 
//curl_setopt($ch, CURLOPT_URL, $url1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$return = curl_exec($ch); 
curl_close($ch); 
echo "$return"; 

我很欣賞使用使用永久(ish)祕密服務器啓動發佈的應用程序是正確的方法,但是我發現關於這個過程是如何實現的文檔很少,因此這個問題。

回答

0

正確排序!! FWIW上面的代碼正常工作,但它在Facebook上設置的方式留下了很多希望! 我開始搞亂我的應用程序,並更改了它的名稱,鍵入(是一個鏈接到頁面的應用程序 - 現在不是)刪除燙髮,並且還更改了域名(刪除)和所有網站url詳細信息(也被刪除)。這提示了一個不同的錯誤消息,其中聲明域不匹配。所以,我只讀了應用程序域&網站的網址,保存,突然我的失敗代碼開始工作!

把我的代碼整理了一下後,我現在可以看到頁面訪問令牌就像我期望的那樣好了。我只是希望Facebook的指南會交叉引用這個設置,因爲它一點都不明顯!

我工作的代碼最終成爲這樣($ perm_url用作一次性的鏈接,允許通過GUI燙髮)

$perm_url = "https://www.facebook.com/dialog/oauth?client_id=".$appid."&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=publish_stream,manage_pages,read_stream,status_update"; echo "<br>Test";

$facebook = new Facebook(array('appId' => $appid , 'secret' => $appsecret ,)); $access_token = $facebook->getAccessToken();

$pageinfo = $facebook->api("/".$page_id."?fields=access_token");

$page_access_token = $pageinfo['access_token'];

echo "<br>Holy Grail = $page_access_token ";

0

您的$ post_url指向您的$ app_id變量,該消息表示它應該指向一個頁面,嘗試從圖的/ me/accounts端點獲取您的頁面的ID並將其放入。雖然我懷疑你將需要使用頁面access_token(也從/我/帳戶端點)發佈到您的頁面

+0

好的,使用頁面id我得到'{「error」:{「message」:「(#200)用戶沒有授權應用程序執行此操作」,「type」:「OAuthException」 ,「code」:200}}'這是有道理的。但是,如何應用PAGE來使用我的應用程序並檢查此權限是否正確? – Rob70

+0

您是否授予「manage_pages」權限? https://developers.facebook.com/docs/reference/api/page/#page_access_tokens – TommyBs

+0

根據https://developers.facebook.com/tools/explorer/?method=GET&path=me是,但對我來說(用戶不是頁面)。不知道如何查詢或設置頁面 – Rob70

0

對,我已經在此工作了相當一段時間,並發現我的代碼中有幾個錯誤,但沒有充分回答這個問題。 對於初學者來說,你不會像上面提到的那樣發佈到appid - 它只是錯誤的。使用使用

$url2 = "https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&client_secret=". $app_secret."&grant_type=client_credentials";

這個應用程序的訪問令牌是有效的,只要你的應用程序的祕密是的appid +祕密生成一個訪問令牌時發佈到用戶標識的代碼/飼料工作。另外,如果我通過圖表探險生成對我來說是暫時的接入碼,分析了我/手動帳戶,並使用頁面令牌

$post_url = 'https://graph.facebook.com/'.$page_id.'/feed'; 

它correctlly職位的頁面。

其次,我們要求所有的服務器端調用具有從

$appsecret_proof= hash_hmac('sha256', $app_token2, $app_secret);

現在發生在他們appsecret_spoof,根據Facebook的文檔,一個HTTP GET打電話給我的用戶名/帳號應產生頁訪問用戶管理的所有頁面(也可能是應用程序)的令牌。 這也可以直接使用

$url3 = "https://graph.facebook.com/".$page_id."?fields=access_token"; 

所以當得到的是這個地址由所謂的(包括應用程序的訪問令牌& appsecret_spoof)我得到的是「真」? 同樣,當

$rob1 = "https://graph.facebook.com/".$user_id."/accounts"; 

正確調用我收到一個錯誤,那麼

{"error":{"message":"(#10) Application does not have permission for this action","type":"OAuthException","code":10}} 

OK權限問題!那麼該文件說,只有manage_pages需要檢索PAGE_ID /帳戶頁面的道理,所以我通過大量的網頁拖網和發現你可以做到這一點通過調用這個網址

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=read_stream 

這通過Facebook GUI的拋出了接受/拒絕每個範圍的頁面(我結束了添加manage_pages,publish_stream & read_stream到我的應用程序)沒有一個似乎解決了這個問題!

相關問題