如何避免致命错误:使用cron作业时未捕获到OAuthException [英] How to avoid fatal error: Uncaught OAuthException when using cron job

查看:88
本文介绍了如何避免致命错误:使用cron作业时未捕获到OAuthException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好希望somone可以为您提供帮助. Ive构建了一个生日提醒应用程序,该应用程序需要通常的权限,包括离线访问等.

Hi hope somone can help with this one. Ive had a birthday reminder app built, that aquires the usual permissions including offline access etc.

该应用要求每天执行cron作业才能在我的服务器上运行. 当我运行cron文件时,收到以下错误

The app requires a daily cron job to be run on my server. When I run the cron file a recieve the below error

致命错误:未捕获的OAuthException:无效的OAuth访问令牌签名.在第1140行上抛出blah/base_facebook.php;

Fatal error: Uncaught OAuthException: Invalid OAuth access token signature. thrown in blah/base_facebook.php on line 1140;

错误的常见原因是什么,我是否在做任何突出的错误,我是否应该显示更多代码以寻求人们的帮助?

Is there a common reason for the error, am i doing anything wrong that stands out, and should i be displaying more code to get help from people?

下面是导致错误的行.我的代码在第1140行结束;

below are the lines leading up to the error. My code ends on line 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',?

also... what is 'from' => '299185790135651', ?

要检查我的开发人员是否在此处输入了正确的编号.谢谢

want to check my developer has put the right number here. Thanks

推荐答案

处理此问题的最佳方法是使用try...catch语句.如下:

The best way to handle this is to use a try...catch statement. As follows:

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.在这种情况下,它指向测试Facebook页面.

The 'from' => '299185790135651' is a User / Page ID that publishes the message to the Feed. In this case, it's pointing to a Test Facebook Page.

这篇关于如何避免致命错误:使用cron作业时未捕获到OAuthException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆