2012-08-31 14 views
1

我正在嘗試向我的用戶發送通知(https://developers.facebook.com/docs/app_notifications/),但我無法設法使用我的PHP SDK進行此項工作。使用PHP SDK的通知API

我使用這個代碼:

$data = array(
    'href'=> 'https://apps.facebook.com/MY_APP/', 
    'access_token'=> $app_token, 
    'template'=> 'test' 
); 
$sendnotification = $facebook->api('/USER_ID/notifications', 'post', $data); 

這是什麼錯誤,我回去:

Fatal error: Uncaught OAuthException: Invalid OAuth access token signature. thrown in /usr/home/test/base_facebook.php on line 1039

這是我如何讓應用程序訪問令牌:

$APPLICATION_ID = "MY_APP_ID"; 
$APPLICATION_SECRET = "MY_APP_SECRET"; 

$token_url = "https://graph.facebook.com/oauth/access_token?" . 
       "client_id=" . $APPLICATION_ID . 
       "&client_secret=" . $APPLICATION_SECRET . 
       "&grant_type=client_credentials"; 
$app_token = file_get_contents($token_url); 

什麼我做錯了嗎?


access_token存在問題,如果我直接在sode中使用訪問令牌,它現在可以工作。

'access_token'=> 'K3Rds2y0cGm...', 

有沒有人知道應用程序訪問令牌持續了多長時間?

回答

0

您是否檢查在php.ini中是否啓用OAuth?

+0

是的,OAuth有效。 –

0

檢查您使用的訪問令牌的工作原理是Facebook's Debug Tool - 代碼中沒有任何地方實際上驗證檢索應用訪問令牌的請求是否有效。

你也需要檢查應用程序既

  1. 不能在沙盒模式(可能不相關,但值得一試)
  2. 在高級設置沒有被配置爲「本地/桌面」 - 應用程序訪問令牌沒有在該配置信任
+0

它不處於沙盒模式並配置爲網頁。 –

+0

等待,你只是將file_get_contents的結果傳遞給一個變量並直接使用它?那也不會在令牌本身之前返回一個額外的字符串嗎? – Igy

5

這是當你使用Facebook PHP SDK V3.2.0來設置應用程序訪問令牌的正確方法:

$this->_objFacebook->setAccessToken($this->_objFacebook->getAppId().'|'.$this->_objFacebook->getAppSecret()); 
4

的poblem是,變量$ app_token是=「的access_token = YOUR_APP_ACCESS_TOKEN」

你需要使用的是第二部分,YOUR_APP_ACCESS_TOKEN,因此,使用$之前app_token爲$ app_token形式的字符串有效的標記,必須先刪除該字符串的第一部分 「=的access_token」

解決方案:

$APPLICATION_ID = "MY_APP_ID"; 
$APPLICATION_SECRET = "MY_APP_SECRET"; 

$token_url = "https://graph.facebook.com/oauth/access_token?" . 
       "client_id=" . $APPLICATION_ID . 
       "&client_secret=" . $APPLICATION_SECRET . 
       "&grant_type=client_credentials"; 
$app_token = file_get_contents($token_url); 
$app_token = str_replace("access_token=", "", $app_token); 

$data = array(
    'href'=> 'https://apps.facebook.com/MY_APP/', 
    'access_token'=> $app_token, 
    'template'=> 'test' 
); 
$sendnotification = $facebook->api('/USER_ID/notifications', 'post', $data); 

希望它有助於

3
$accessToken = $appId . '|' . $secret; 
$params = array(
      'access_token' => $accessToken, 
      'href' => $canvasPage, 
      'template' => $message, 
     ); 
$facebookObject->api('/' . $userId . '/notifications/', 'post', $params); 

這適用於我。 參考:http://calibrate.be/labs/facebook-notification-api-php-sdk