Отправка документа из формы в телеграмм бота через API

449
09 августа 2017, 20:57

Вот так работает хорошо

<form action="https://api.telegram.org/botToken/sendDocument" enctype="multipart/form-data" method="post"> 
	<p><b>ID пользователя:</b> 
	<input type="text" name="chat_id" value="*******"></p> 
 
	<p><b>Файл для отправки:</b> 
	<input type="file" name="document"></p> 
 
	<p><input type="submit" value="Отправить"></p> 
</form>

Но так как токен лежит на поверхности, хотелось бы данные получать в php файл и отправлять уже из него. Не могу понять, как мне правильно распарсить поле с файлом и отправить его.

Пробовал все вариации с $_FILES['userfile']['tmp_name'] - не работает, пробовал загружать файл на сервер, и уже отправлять ссылку на него прямую - не работает, ограничение по типу файлов. Направьте, пожалуйста...

В данный момент пытаюсь отправить вот так:

$url = "https://api.telegram.org/botToken/sendDocument";
// $_document = "ok.json";
$_document = $_FILES['document']['tmp_name'];
$document = new CURLFile(realpath($_document));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ["chatID" => *****]);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:multipart/form-data']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$out = curl_exec($ch);
curl_close($ch);
print_r($out);

Ну и HTML форму на фронте:

<form action="raketa_api.php" enctype="multipart/form-data" method="post">
    <p><b>Файл для отправки:</b>
    <input type="file" name="document"></p>
    <input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
    <p><input type="submit" value="Отправить"></p>
</form>

В ответ получаю ошибку {"ok":false,"error_code":400,"description":"Bad Request: there is no document in the request"}

Answer 1
        $url = "https://api.telegram.org/botToken/sendDocument";
                // $_document = "ok.json";
                $_document = $_FILES['document']['tmp_name'];
            $document = new CURLFile(realpath($_document));
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, ["chat_id" => "*****", "document" => $document]);
            curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            $out = curl_exec($ch);
            curl_close($ch);
            print_r($out);

Не передавался аргумент с файлом. Теперь файл отправляется нормально, но с тестовым именем. Доработать немного код и все будет супер! Всем спасибо!

READ ALSO
Преобразовать время в метку времени UNIX

Преобразовать время в метку времени UNIX

Я получаю дату и время в таком формате: 2017-8-15T12:45 Как ее можно преобразовать в метку времени UNIX?

270
Работа с текстом: удаление и вставка

Работа с текстом: удаление и вставка

Предположим есть строка:

253
Выгрузка файла в браузер с удаленного сервера по ssh

Выгрузка файла в браузер с удаленного сервера по ssh

Доброго времени сутокСтоит задача реализовать скачивание файлов на сайте с другого сервера

246
Ошибка 2003: Can&#39;t connect to MySQL server

Ошибка 2003: Can't connect to MySQL server

Помогите! Я пытался подключиться к базе данных с помощью php кода

254