我有一个带有publish_stream的应用程序,我可以在我的用户墙上发布状态更新,现在我想发布照片,在搜索后,我读到了关于batchrequest的信息,并使我的代码像一样
<?php
require_once('./includes/config.php');
require_once('./includes/skins.php');
require_once('./includes/functions.php');
require_once('./includes/facebook.php');
$app_id = "$appid";
$app_secret = "$appsec";
$sql=mysql_query("select `f_id`, `facebook_access_token` from `users` ");
while($rows = mysql_fetch_array($sql)){
$f_id=$rows['f_id'];
$facebook_access_token=$rows['facebook_access_token'];
$batched_request = '[{"method":"POST", "relative_url":"'.$f_id.'/photos",'
. ' "body" : "message=لو بتحب جاهين و رباعياته اشترك معانا فى التطبيق و هننشرلك على بروفايلك اجمد رباعيات صلاح جاهين http://2lshmaker.uni.me/jahin/", "attached_files":"file1"}}]';
$post_url = "https://graph.facebook.com/" . "?batch="
. Urlencode($batched_request) . "&". $facebook_access_token
. "&method=post";
}
echo ' <form enctype="multipart/form-data" action="'.$post_url.'"
method="POST">';
echo 'Please choose 2 files:';
echo '<input name="file1" type="file">';
echo '<input type="submit" value="Upload" />';
echo '</form>';
?>
但它给了我错误
{
"error": {
"message": "Top level access token or app id not specified for batch request.",
"type": "GraphBatchException"
}
}
我不知道我得到了什么,尽管我已经有了publish_stream和有效的access_token
您需要指定一个顶级访问令牌,即使您在批处理中为每个单独的请求都包含一个访问令牌
阅读批量API文档中标记为"为不同操作指定不同访问令牌"的部分
以上所有示例都将单个访问令牌指定为顶级参数批处理API是灵活的,允许单个请求将自己的访问令牌指定为查询字符串或表单帖子参数在这种情况下,顶级访问令牌被视为回退令牌,如果单个请求没有显式指定了访问令牌。
当您希望使用几个用户的不同的访问令牌,或者如果需要进行某些调用使用应用程序访问令牌。
如果没有一个单独的请求指定要使用的访问令牌,必须包含一个访问令牌作为顶级参数,并且将用于所有请求。
假设$facebook_access_token=$rows['facebook_access_token'];
返回访问令牌的列表,这些令牌需要在批处理中的每个调用中附加,因此$batched_request
应该有相同数量的调用,以匹配您提供的访问令牌的数量。除此之外,如果您提供的任何令牌失败,您还需要一个顶级访问令牌,因此很可能是应用程序访问令牌作为后备。
针对您的代码,您甚至没有正确定义顶级访问令牌参数,它应该是
$post_url = "https://graph.facebook.com/" . "?batch="
. Urlencode($batched_request) . "&access_token=". $facebook_access_token
. "&method=post";
"&access_token="$facebook_access_token
------^MISSING^
也就是说,它必须以字段和值的形式存在。http://en.wikipedia.org/wiki/Query_string