Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2019, 17:08   #1
kotyara12
Пользователь
 
Регистрация: 28.04.2019
Сообщений: 12
Вопрос PHP-шлюз для telegram

Добрый день!

Хочу написать некое подобие шлюза для telegram api bot на своем хостинге. То есть мне нужно, чтобы php скрипт принимал json с параметрами и переадресовывал на telegram api, а обратно передавал json с ответом, например updates.

Написал простенький скрипт:

Код:
<?php

$tg = curl_init();
curl_setopt($tg, CURLOPT_URL, "https://api.telegram.org/bot" . $_GET["bot"] . "/" . $_GET["method"]);
curl_setopt($tg, CURLOPT_POST, TRUE);
curl_setopt($tg, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($tg, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($tg);
curl_close($tg);

echo $response;

?>
В принципе, он работает. JSON в ответ приходит. Но как-то "неправильно" работает. Сам бот написан на delphi и он наотрез отказывается воспринимать ответ, полученный от шлюза.

Вот как выглядит ответ от API через обычный proxy: https://yadi.sk/i/gCSmNspRF2nrcQ
А вот так выглядит ответ через php: https://yadi.sk/i/H-cG9OJZ9nfoNA
Вроде бы похоже, но скрипт добавляет еще и "оформление".

Что я не учел?

Последний раз редактировалось kotyara12; 28.04.2019 в 17:11.
kotyara12 вне форума Ответить с цитированием
Старый 28.04.2019, 19:13   #2
kotyara12
Пользователь
 
Регистрация: 28.04.2019
Сообщений: 12
По умолчанию

В принципе, суть проблемы я нашел:

Код:
HTTP/1.1 200 OK
Server: nginx/1.15.12
Date: Sun, 28 Apr 2019 16:10:03 GMT
Content-Type: application/json
Connection: keep-alive
X-Powered-By: PHP/5.6.30-0+deb8u1
Content-Length: 588

п»ї{"ok":true,"result":[]}
Это символы "п»ї" в начале возвращаемого текста. В оригинальном ответе api их нет. Остальные заголовки и текст такие же. Вопрос сводится к следующему: откуда берутся эти самые "п»ї"????
kotyara12 вне форума Ответить с цитированием
Старый 28.04.2019, 19:27   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

файл php - в кодировке utf8 без BOM ?
ADSoft вне форума Ответить с цитированием
Старый 28.04.2019, 19:29   #4
kotyara12
Пользователь
 
Регистрация: 28.04.2019
Сообщений: 12
По умолчанию

Точно.
В UTF8 с BOM. Был. Ох, я тупень...
Пересохранил без BOM, проблема исчезла.
Спасибо
kotyara12 вне форума Ответить с цитированием
Старый 28.04.2019, 20:03   #5
kotyara12
Пользователь
 
Регистрация: 28.04.2019
Сообщений: 12
По умолчанию

ИТОГИ

Оказалось, были и еще проблемы в первоначальном скрипте, но все решилось. Скрипт заработал как надо, может кому-то еще понадобится:

Код:
<?php

$inJson = file_get_contents('php://input');

$tgApi = curl_init();
curl_setopt($tgApi, CURLOPT_URL, "https://api.telegram.org/bot" . $_GET["bot"] . "/" . $_GET["method"]);
curl_setopt($tgApi, CURLOPT_HEADER, FALSE);
curl_setopt($tgApi, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($tgApi, CURLOPT_POST, TRUE);
curl_setopt($tgApi, CURLOPT_POSTFIELDS, $inJson);
curl_setopt($tgApi, CURLOPT_RETURNTRANSFER, TRUE);
$outJson = curl_exec($tgApi);
curl_close($tgApi);

header('Content-type: application/json');
echo $outJson;

?>
Суть идеи в том, что вызов "https://api.telegram.org/bot%0:s/%1:s" заменяем на "ваш_скрипт?bot=%0:s&method=%1: s" и все! Но при условии, что хостинг не в России, разумеется. По ощущениям, работает быстрее обычных прокси, и следить за ними не нужно...
kotyara12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Картинки в telegram Елена S Мобильные ОС (Android, iOS, Windows Phone) 1 06.03.2018 18:17
Telegram API PTyTb32 Общие вопросы Delphi 0 29.12.2017 12:30
Бот в telegram Manr63 Свободное общение 1 28.02.2017 13:58
telegram bot progmen Фриланс 2 30.11.2016 14:27
Использование API Telegram Cruzel Общие вопросы C/C++ 2 08.09.2015 14:17