2012-01-14 39 views
4

我試圖從一個應用程序發送消息給用戶,當一個特定的事件發生時。現在,我有這樣的代碼創建Facebook的apprequests

$param = array(
    'message'  => 'XYZ shared a file with you', 
    'data'   => 'additiona_string_data', 
    'access_token' => $facebook->getAccessToken(), 
); 
$tmp = $facebook->api("/$uid/apprequests", "POST", $param); 

,但我總是得到Uncaught OAuthException: (#2) Failed to create any app request thrown

我不知道問題出在哪裏。

+0

您應該包括您收到的全部錯誤。在這種情況下,它很明顯是來自Facebook的sdk,但包含整個錯誤字符串總是一個好主意。它通常包含有關哪個文件引發了錯誤的信息,甚至包含代碼所在行的信息。 – Lix 2012-01-14 14:29:05

回答

8

您應該閱讀請求文檔。
在這裏有兩種不同類型的請求。

你需要的是app generated requests,這意味着你需要的應用程序訪問令牌,而不是用戶。

我假設你正在使用的用戶訪問令牌,因爲你不包括Facebook的對象的啓動代碼樣本中,並可能已經驗證了用戶已經因此getAccessToken()調用將返回用戶訪問令牌,而不是應用訪問令牌。

+2

感謝您指引我在正確的方向 – slash197 2012-01-14 17:59:59

1

我有點困惑,「我試圖從應用程序發送消息給用戶發生特定事件時,現在我有這個代碼」的意思。

  1. 發送電子郵件給用戶時,在他們的牆上

  2. 有人張貼發送活動邀請到用戶

  3. 發送應用程序邀請用戶

  4. 寫上當'XYZ與你共享文件'等事情發生時,用戶牆就會關閉。

要回答

  1. 您需要的用戶emailread_stream權限。使用RealTime Updates監視他的牆,然後使用您的服務器SMTP給他發送電子郵件。

  2. 參見如何創建活動邀請

  3. 由於@Lix指出http://developers.facebook.com/docs/reference/api/event/#invited,看到https://developers.facebook.com/docs/channels/#requests

  4. 你應該使用新的Open Graph對象/動作做到這一點。看到這個例子:https://developers.facebook.com/docs/beta/opengraph/tutorial/

0

您可以接收的Facebook應用程序訪問令牌通過:

https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&client_secret=FB_APP_SECRET&grant_type=client_credentials 

工作代碼示例使用Facebook的PHP SDK(需要添加錯誤處理)後的應用程序對用戶請求:

$facebook = new Facebook(array(
    'appId' => FB_APP_ID, 
    'secret' => FB_APP_SECRET, 
)); 

$token_url = "https://graph.facebook.com/oauth/access_token?" ."client_id=" . 
    FB_APP_ID ."&client_secret=" . FB_APP_SECRET ."&grant_type=client_credentials"; 

$result = file_get_contents($token_url); 
$splt = explode('=', $result); 
$app_access_token =$splt[1]; 

$facebook->setAccessToken($app_access_token); 

$args = array(
    'message' => 'MESSAGE_TEXT', 

); 
$result = $facebook->api('/USER_ID/apprequests','POST', $args); 
相關問題