我通过 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 请求。嗯....绝对相同。我开始没主意了...