@ed_milson
Я

Как передать файл с помощью multipart в php( фото от бота для Телеграмма)?

Здравствуйте. Уже весь день пытаюсь сделать но не идет ни как. В телеграмм(https://telegram.org) пишу бота. И там фотографию принимает API только как "multipart/form-data" а нужно отправить фото которое по адресу
http://i.imgur.com/ea9PB3H.png
писал:
$url   = "https://api.telegram.org/bot124163913:AAHQ-axveIAcY24uT8ZlYgEW1jOmFqRmXXE/sendPhoto";
$post_fields = array('chat_id'   => $chat_id,
    'photo'     => file_get_contents("http://i.imgur.com/ea9PB3H.png ")
// 'photo'     => "http://i.imgur.com/ea9PB3H.png "
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:multipart/form-data"
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
$output = curl_exec($ch);

Может подскажете рабочий вариант?
PS. Отправка через форму
<form action="https://api.telegram.org/bot124163913:AAHQ-axveIAcY24uT8ZlYgEW1jOmFqRmXXE/sendPhoto" method="post" enctype="multipart/form-data">
        <input type="text" name="chat_id" value="182347970">
        <input type="file" name="photo">
        <input type="submit">
    </form>

работает отлично
UPD
function post($url, $parametros, $ch)
{
    curl_setopt ($ch, CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $parametros);
    $result= curl_exec($ch);
    return $result;
}
    $ch = curl_init();
    $data = array(
        'chat_id' => '182347970',
        'photo' => 'http://i.imgur.com/ea9PB3H.png '
    );
    $data2 = http_build_query($data);
    echo post ("https://api.telegram.org/bot124163913:AAHQ-axveIAcY24uT8ZlYgEW1jOmFqRmXXE/sendPhoto", $data2, $ch);
тоже не работает
ошибка
{"ok":false,"error_code":400,"description":"Bad Request: Wrong persistent file_id specified: contains wrong characters or has wrong length"}
  • Вопрос задан
  • 3750 просмотров
Решения вопроса 1
@vylegzhanin
1) Сохраняй картинку http://i.imgur.com/ea9PB3H.png локально, например, в папку tmp.
2) Боту отправляй локальный файл.
3) Чисти папку tmp после отправки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы