-1

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

首先,facebook 应用程序在 dev 中的测试和 prod 中的测试之间完全一样,我刚刚更改了域。其次,在我的托管服务提供商上打开了出站端口 80 和 443。

开发:windows,php 5.3.8,curl 7.21.7 产品:Linux,php 5.3.17,curl 7.24.0

我在这里根据我的测试结果进行介绍。

开发

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

产品

  • 在用户中发布消息:确定
  • 在页面中发布消息:确定
  • 在用户中发布照片:好的
  • 在页面中发布照片:OAuthException:发生意外错误。请稍后重试您的请求。
  • 删除用户中的消息:未测试
  • 删除页面中的消息:OAuthException: (#100) Invalid parameter
  • 删除用户中的照片:OAuthException: (#221) 照片不可见
  • 删除页面中的照片:无法测试

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

编辑

这是在产品中为 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);

这是发布给用户的代码,在产品中可以

  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

编辑

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

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

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

编辑

遵循 cpiko 的建议,我研究了 CRLF 潜在问题。我已将 CURLOPT_CRLF 设置为 true。现在我得到:OAuthException:请求此资源需要用户访问令牌。

编辑

在与提琴手打了一会儿之后,我可以比较 dev 和 prod 之间发送的 facebook api curl 请求。嗯....绝对相同。我开始没主意了...

4

1 回答 1

0

经过这么多测试,阻止的是facebook应用程序高级设置中的国家限制设置。

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

更新

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

于 2012-11-08T20:53:39.217 回答