【问题标题】:Error with photo upload batch request + multi users照片上传批量请求错误 + 多用户
【发布时间】:2012-11-11 04:08:01
【问题描述】:

我有一个带有 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,但我不知道我得到了什么

【问题讨论】:

    标签: php facebook facebook-batch-request


    【解决方案1】:

    您需要指定顶级访问令牌,即使您为批处理中的每个单独请求都包含访问令牌

    阅读批处理 API 文档中标记为“为不同操作指定不同访问令牌”的部分

    以上所有示例都将单个访问令牌指定为顶级 范围。 Batch API 很灵活,允许单个请求 将他们自己的访问令牌指定为查询字符串或表单帖子 范围。在这种情况下,顶级访问令牌被视为 后备令牌,如果单个请求没有明确地使用 指定了访问令牌。

    当您想使用多个用户的 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

    【讨论】:

    • 我真的可以理解错误中写的内容,问题是什么是顶级访问令牌广告我怎样才能使代码成功运行
    • @phwd 添加文档后,仍然没有帮助。我已经阅读了这些文档,但它们没有提供工作示例,也没有解释上述代码有什么问题。这才是重点。这些文档没有帮助,因为它们含糊不清并且没有提供示例。没有帮助的答案。
    • 如果您没有什么要说的,请不要提及我,除非它没有帮助。这是一条两条路。您还必须提供问题的详细信息才能获得详细信息。这确实是 OP 问题的解决方案,因为他在 PHP 中将调用推送为"&amp;". $facebook_access_token,这将最类似于ADXXXXXXAccessToken 而不是access_token=ADXXXXXXAccessToken,请注意缺少的access_token 部分。所以这个错误确实是正确的,他没有正确指定它。另外请不要输入大写字母,这是一种令人讨厌的方式来引起试图帮助的人的注意
    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多