Я хочу реализовать множественную авторизацию с помощью PHP для взаимодействия с API Telegram REST.
Какую задачу я пытаюсь решить? Ну, это просто: несколько десятков пользователей (у всех из них есть такая карма (+10, -2, +1000 и т.д.) С соответствующей таксономией групп: веб-мастера и клиенты) имеют профиль пользователя на моем сайте. После того, как они достигнут определенного количества кармы, и поскольку они авторизованы в своем профиле, они присоединяются к частным чатам на основе автоматически созданной Telegram для них.
После некоторых исследований я обнаружил, что это очень сложно, потому что:
- У меня никогда не было опыта реализации API для связанных с аппаратным обеспечением социальных сетей.
-
Я взглянул на https://core.telegram.org/api/auth, но совершенно неочевидно, как реализовать эти функции (например, auth.sendCode), используя PHP или любой другой язык. Если эти команды должны быть отправлены как JSON на сервер, тогда это не похоже на JSON:
auth.sentCode#efed51d9 phone_registered:Bool phone_code_hash:string send_call_timeout:int is_password:Bool = auth.SentCode;
Что это? На каком языке он написан?
UPD: Написано в TL (Type Language): https://core.telegram.org/mtproto/TL
-
Я изучил исходный код нескольких клиентов (Webogram, Telegram-cli (tg), tdesktop), и я нашел несколько реализаций https://core.telegram.org/mtproto
К сожалению, ни одна из них не поддерживает множественную авторизацию на их стороне, и после небольшого исследования я понятия не имею, где копать глубже, чтобы узнать больше информации.
Кроме того, эти реализации выглядят громоздкими и сложными (например, https://github.com/vysheng/tg):
Там я вижу группу серверов (./tg/tgl/tgl.h):
#define TG_SERVER_1 "149.154.175.50"
#define TG_SERVER_2 "149.154.167.51"
#define TG_SERVER_3 "149.154.175.100"
#define TG_SERVER_4 "149.154.167.91"
#define TG_SERVER_5 "149.154.171.5"
Я нашел несколько возможных функций (./tg/tgl/queries.c):
void empty_auth_file (void) {
if (TLS->test_mode) {
bl_do_dc_option (TLS, 1, "", 0, TG_SERVER_TEST_1, strlen (TG_SERVER_TEST_1), 443);
bl_do_dc_option (TLS, 2, "", 0, TG_SERVER_TEST_2, strlen (TG_SERVER_TEST_2), 443);
bl_do_dc_option (TLS, 3, "", 0, TG_SERVER_TEST_3, strlen (TG_SERVER_TEST_3), 443);
bl_do_set_working_dc (TLS, TG_SERVER_TEST_DEFAULT);
} else {
bl_do_dc_option (TLS, 1, "", 0, TG_SERVER_1, strlen (TG_SERVER_1), 443);
bl_do_dc_option (TLS, 2, "", 0, TG_SERVER_2, strlen (TG_SERVER_2), 443);
bl_do_dc_option (TLS, 3, "", 0, TG_SERVER_3, strlen (TG_SERVER_3), 443);
bl_do_dc_option (TLS, 4, "", 0, TG_SERVER_4, strlen (TG_SERVER_4), 443);
bl_do_dc_option (TLS, 5, "", 0, TG_SERVER_5, strlen (TG_SERVER_5), 443);
bl_do_set_working_dc (TLS, TG_SERVER_DEFAULT);
}
}
void bl_do_dc_option (struct tgl_state *TLS, int id, const char *name, int l1, const char *ip, int l2, int port) {
struct tgl_dc *DC = TLS->DC_list[id];
if (DC && !strncmp (ip, DC->ip, l2)) { return; }
clear_packet ();
out_int (CODE_binlog_dc_option);
out_int (id);
out_cstring (name, l1);
out_cstring (ip, l2);
out_int (port);
add_log_event (TLS, packet_buffer, 4 * (packet_ptr - packet_buffer));
}
и др.
Какие файлы следует перенести на PHP для реализации нескольких пользователей? Не могли бы вы помочь мне узнать, с чего начать и как сделать это проще, чем в настоящее время?
Заранее благодарю вас!