Facebook API部分在生产中工作

时间:2012-11-06 17:10:42

标签: facebook-graph-api facebook-php-sdk

我通过JS SDK和Php SDK使用Facebook图形API。虽然所有人都在开发环境,生产中,在共享主机上工作,但它是部分工作的,这是非常令人不安的。

首先,facebook应用程序在开发测试和prod测试之间非常相同,我刚刚更改了域名。 其次,我的托管服务提供商打开了出站端口80和443。

Dev :windows,php 5.3.8,curl 7.21.7 Prod :Linux,php 5.3.17,curl 7.24.0

我在这里根据我的测试结果提出。

开发

  • 在用户中发布消息:确定
  • 在页面中发布消息:确定
  • 在用户中发布照片:确定
  • 在页面中发布照片:确定
  • 删除用户中的消息:确定
  • 删除页面中的消息:确定
  • 删除用户中的照片:确定
  • 删除页面中的照片:确定

PROD

  • 在用户中发布消息:确定
  • 在页面中发布消息:确定
  • 在用户中发布照片:确定
  • 在页面中发布照片:OAuthException:出现意外错误 发生了。请稍后重试您的请求。
  • 删除用户中的邮件:未经过测试
  • 删除页面中的消息:OAuthException:(#100)参数无效
  • 删除用户中的照片:OAuthException:(#221)照片不可见
  • 删除页面中的照片:无法测试

有没有人对此有所了解?我如何调试正在发生的事情(我在共享托管服务提供商上)?

修改

这是在prod

中的KO页面上发布照片的代码
  // I´m using Yii framework with a wrapper around Facebook php sdk
  // retreiving the page acces token
  $page_at = Yii::app()->facebook->api('/'.$fb_page->page_id.'?fields=access_token');

  Yii::app()->facebook->setFileUploadSupport(true);

  // model contains the post data from the user. For the message it is a text area
  // Yii::app()->params->uploadPath is a global param with path where the image resides.
  // Directory separator where created with php´s DIRECTORY_SEPARATOR
  $data = array(
          "message" => $model->attributes['descricao'],
          "source" => "@".Yii::app()->params->uploadPath.$model->image,
          "access_token" => $page_at['access_token']);         

  $result = Yii::app()->facebook->api('/'.$fb_page->page_id.'/photos', "POST", $data);

这是发布给用户的代码,该代码在prod

中是正常的
  Yii::app()->facebook->setFileUploadSupport(true);
  $data = array(
         "message" => $model->attributes['descricao'],
          "source" => "@".Yii::app()->params->uploadPath.$model->image,
  );
  $result = Yii::app()->facebook->api('/'.$fb_page->page_id.'/photos', "POST", $data);

两者之间的唯一区别是我不需要用户的access_token

修改

删除问题似乎是通过将页面访问令牌放在网址中而不是将其放在帖子中来解决的。很奇怪,因为我记得我被迫把它放在我的开发的帖子中以使删除工作...

现在我专注于图像帖子,在zilion不同的组合后我得到了相同的行为。尽管存在错误,API调用正在执行某些操作:如果应用相册不存在但未上传图像,则会创建应用相册。

是否与此错误相关:https://developers.facebook.com/bugs/376442565760536?browse=search_5099ba94055685677909148

修改

根据cpiko的建议,我一直在研究CRLF的潜在问题。我将CURLOPT_CRLF设置为true。现在我得到:OAuthException:需要用户访问令牌才能请求此资源。

修改

在与小提琴手打架之后,我可以比较一下dev和prod之间发送的facebook api curl请求。嗯......绝对相同。我开始没有想法......

1 个答案:

答案 0 :(得分:0)

经过这么多测试后,阻止的是Facebook应用高级设置中的国家/地区限制设置。

问题是我的托管服务提供商在美国,我将facebook应用程序限制在我的国家(不是美国)。奇怪的是,此设置仅适用于我的案例中的照片上传,而不适用于其他内容(例如Feed发布)。此外,它不会基于客户端(浏览器)原点进行限制,但在这种情况下,服务器会发起卷曲。

<强>更新

删除用户照片时的错误(照片不可见)不同。即使我是通过我的Facebook应用程序发布照片的发布者,我也必须添加user_photos权限才能将其删除