2012-08-07 45 views
4

嗨,希望somone可以幫助解決這個問題。香港專業教育學院建起了一道生日提醒應用程序,即aquires通常的權限,包括離線訪問等如何避免致命錯誤:使用cron作業時未捕獲OAuthException

的應用程序需要每天cron作業是我的服務器上運行。 當我運行cron文件時收到以下錯誤

致命錯誤:未捕獲的OAuthException:無效的OAuth訪問令牌簽名。在1140行引發blah/base_facebook.php;

是否有錯誤的一個常見原因,我是不是做錯了什麼脫穎而出,並且,我應該顯示更多的代碼從人的幫助?

下面是導致錯誤的行。我的代碼在1140行結束;

<?php 

     $name = 'api'; 
    if (isset($READ_ONLY_CALLS[strtolower($method)])) { 
     $name = 'api_read'; 
    } else if (strtolower($method) == 'video.upload') { 
     $name = 'api_video'; 
    } 
    return self::getUrl($name, 'restserver.php'); 
    } 

    protected function getUrl($name, $path='', $params=array()) 
{ 
    $url = self::$DOMAIN_MAP[$name]; 
    if ($path) { 
     if ($path[0] === '/') { 
     $path = substr($path, 1); 
     } 
     $url .= $path; 
    } 
    if ($params) { 
     $url .= '?' . http_build_query($params, null, '&'); 
    } 

    return $url; 
    } 

    protected function getCurrentUrl() { 
    if (isset($_SERVER['HTTPS']) && 
     ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || 
     isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && 
     $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { 
     $protocol = 'https://'; 
    } 
    else { 
     $protocol = 'http://'; 
    } 
    $currentUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    $parts = parse_url($currentUrl); 

    $query = ''; 
    if (!empty($parts['query'])) { 
     // drop known fb params 
     $params = explode('&', $parts['query']); 
     $retained_params = array(); 
     foreach ($params as $param) { 
     if ($this->shouldRetainParam($param)) { 
      $retained_params[] = $param; 
     } 
     } 

     if (!empty($retained_params)) { 
     $query = '?'.implode($retained_params, '&'); 
     } 
    } 

    // use port if non default 
    $port = 
     isset($parts['port']) && 
     (($protocol === 'http://' && $parts['port'] !== 80) || 
     ($protocol === 'https://' && $parts['port'] !== 443)) 
     ? ':' . $parts['port'] : ''; 

    // rebuild 
    return $protocol . $parts['host'] . $port . $parts['path'] . $query; 
    } 

    protected function shouldRetainParam($param) { 
    foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) { 
     if (strpos($param, $drop_query_param.'=') === 0) { 
     return false; 
     } 
    } 

    return true; 
    } 

    protected function throwAPIException($result) { 
    $e = new FacebookApiException($result); 

    ?> 

CRON.php

<?php 
require_once("src/facebook.php"); 
include("custom.php"); 

set_time_limit(0); 

$config = array(); 
$config['array'] = $appID; 
$config['secret'] = $appSecret; 
$facebook = new Facebook($config); 

$day = abs(date("j")); 
$month = abs(date("n")); 

$result = mysql_query("SELECT uid, uid2, name2 FROM birthdays WHERE birthmonth = '$month' AND birthday = '$day'"); 
while(($row = mysql_fetch_assoc($result)) && mysql_num_rows($result)) { 
    $link = $hostURL.'post.php?uid='.$row['uid'].'&uid2='.$row['uid2']; 
    $facebook->api('/'.$row['uid'].'/feed', 'POST', 
     array(
      'link' => $link, 
      'from' => '299185790135651', 
      'picture' => $hostURL.'image.php?id='.$row['uid2'], 
      'name' => 'Send Cake', 
      'message' => 'It\'s '.$row['name2'].'\'s birthday today! Send them a virtual cake!', 
      'caption' => 'Sponsored by Intercake Ltd' 
     )); 
} 

?> 

也...什麼是 '從'=> '299185790135651',?

想檢查我的開發人員已經在這裏把正確的號碼。由於

+0

FYI:offline_access已過時,所以你應該更新應用的邏輯來反映這一點。 https://developers.facebook.com/roadmap/offline-access-removal/ – CBroe 2012-08-07 09:32:20

回答

1

來處理這種情況的最好方法是使用一個try...catch聲明。如下所示:

try { 
    // some code that calls Facebook 
} catch (Exception $e) { 
    // $e will contain the error - do what you want with it here 
    // e.g. log it or send an email alert etc. 
} 

'from' => '299185790135651'是將消息發佈到Feed的用戶/頁面ID。在這種情況下,它指向Test Facebook Page

相關問題