Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 28.04.2019, 18:08   #1
kotyara12
Новичок
 
Регистрация: 28.04.2019
Сообщений: 4
Репутация: 10

icq: 272712200
skype: kotyara1971
Вопрос 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 в 18:11.
kotyara12 вне форума   Ответить с цитированием
Старый 28.04.2019, 20:13   #2
kotyara12
Новичок
 
Регистрация: 28.04.2019
Сообщений: 4
Репутация: 10

icq: 272712200
skype: kotyara1971
По умолчанию

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

Код:
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, 20:27   #3
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 3,401
Репутация: 914

icq: 303-206-418
skype: ad-soft.info
По умолчанию

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

icq: 272712200
skype: kotyara1971
По умолчанию

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

icq: 272712200
skype: kotyara1971
По умолчанию

ИТОГИ

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

Код:
<?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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


11:09.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru