@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"}
  • Вопрос задан
  • 4445 просмотров
Решения вопроса 1
@vylegzhanin
1) Сохраняй картинку http://i.imgur.com/ea9PB3H.png локально, например, в папку tmp.
2) Боту отправляй локальный файл.
3) Чисти папку tmp после отправки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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