Исключение при загрузке фотографии с Графиком Facebook API

Я хотел бы загрузить фотографию для сидения в Facebook для пользователя в альбоме по умолчанию для приложения. Это описано при публикации здесь: http://developers.facebook.com/docs/reference/api/photo

Методу ответили здесь: Как я могу загрузить фотографии на альбом с помощью Графика Facebook API. Я использую следующее:

$args = array(
  'message' => 'Photo Caption', 
  'image' => '@'.realpath("image.png")
);
$data = $facebook->api('/me/photos', 'post', $args);

Однако я добираюсь, исключение" (#324) Требует файла загрузки", когда я делаю попытку этого. У меня есть допустимая сессия, и у меня есть publish_stream и user_photos полномочия. Я могу получить данные с помощью API. Файл изображения определенно допустим, потому что он может быть загружен file_get_contents(realpath("image.png")).

Я попробовал это решение, с помощью завихрения, которое работает отлично: фотография Загрузки К Альбому с Графиком Facebook API

$args = array(
  'message' => 'Photo from application',
  'pic.png' => '@'.realpath('pic.png')
);
$tok = $session['access_token']
$url = 'http://graph.facebook.com/'.$album_id.'/photos?access_token='.$tok;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$data = curl_exec($ch);

По сравнению с завихрением SDK Facebook PHP, которое похоже на это (использование того же $args и $url):

$ch = curl_init();
$opts = self::$CURL_OPTS;
$opts[CURLOPT_POSTFIELDS] = http_build_query($args, null, '&');
$opts[CURLOPT_URL] = $url;
curl_setopt_array($ch, $opts);
$data= curl_exec($ch);

Почему версия PHP не работает? Похож на http_build_query (), функция вмешивается в загрузку изображения. Я не знаю достаточно о завихрении для понимания то, что продолжается здесь.

5
задан Community 23 May 2017 в 12:17
поделиться

1 ответ

Facebook намеренно преобразовал поля POST в строку GET, используя http_build_query(), чтобы предотвратить случайное или злонамеренное использование полей, начинающихся с @, для загрузки файлов. Вот проблема GitHub.

Быстрое решение этой проблемы заключается в удалении http_build_query() из src/facebook.php в SDK:

$opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');

Становится:

$opts[CURLOPT_POSTFIELDS] = $params;

Однако, если вы это сделаете, вы должны предпринять действия для фильтрации пользовательских сообщений, которые начинаются с @. Например, можно добавить пробел в переднюю часть каждого сообщения.

1
ответ дан 18 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: