Ошибка с загрузкой фото пакетного запроса + несколько пользователей
У меня есть приложение с publish_stream, которое я могу публиковать обновления статуса на своих стенах пользователей, теперь я хочу публиковать фотографии, после поиска я прочитал о пакетном запросе и сделал свой код таким
<?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
1 ответ
Вам необходимо указать токен доступа верхнего уровня, даже если вы включаете токен доступа для каждого отдельного запроса в пакете
Прочтите раздел "Указание разных токенов доступа для разных операций" в документации пакетного 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