我想使用PHP实现多个授权,以便与Telegram REST API进行交互.
我想解决什么任务?嗯,这很简单:几十个用户(他们都有像这里的卡玛(+ 10,-2,+ 1000等)和相关的群体分类:网站管理员和客户)在我的网站上有一个用户档案.在他们达到一定数量的carma之后,由于他们在他们的个人资料中被授权,他们将根据为他们自动生成的Telegram加入私人聊天.
经过一些研究,我发现它非常复杂,因为:
我看了一下https://core.telegram.org/api/auth,但是如何使用PHP或任何其他语言实现这些函数(例如auth.sendCode)是完全不明显的.如果这些命令应该作为JSON发送到服务器,那么它看起来不像JSON:
auth.sentCode#efed51d9 phone_registered:Bool phone_code_hash:string send_call_timeout:int is_password:Bool = auth.SentCode;
Run Code Online (Sandbox Code Playgroud)
它是什么?用哪种语言写的?
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"
Run Code Online (Sandbox Code Playgroud)
我找到了几个可能合适的函数(./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, "", …Run Code Online (Sandbox Code Playgroud) 例如,我创建了一个新页面,我想使用例如backbone.js,自定义css文件和一些图像集合.我应该在哪里宣布Yii2中的所有这些东西?我找到了AppAsset.php模块,但这只适用于css/js文件,当我在那里声明我的css/js文件和路径时,我没有注意到任何变化:
class AppAsset extends AssetBundle {
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'css/site.css',
'js/jquery.mobile-1.4.2.min.css',
];
public $js = [
'js/jsquery-2.1.0.min.js',
'js/jquery.mobile-1.4.2.min.js',
'js/script.js',
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想在表单中添加一个类,如:
<form role="form" action="/login" method="POST" class="userform">
Run Code Online (Sandbox Code Playgroud)
我应该如何为Yii 2.0 ActiveForm类重写这个?
同样的问题是在form标签内部的这个结构:
<div class="ui-grid-solo">
<div class="ui-grid-a">
<label for="name">Full Name</label>
<input type="text" name="login" id="login" value="" data-clear-btn="true" data-mini="true">
<label for="password">Password</label>
<input type="password" name="password" id="password" value="" data-clear-btn="true" autocomplete="off" data-mini="true">
<input type="checkbox" name="remind" id="remind" value="1">
<label for="remind">Remember me</label>
<br>
<input type="submit" value="Login" onclick="this.form.submit();">
</div>
</div>
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚我的网站和电报服务之间的交互究竟用于什么(首先 - 如何使用PHP和其他用户之间的聊天来完成身份验证过程).
在这个页面上:https://core.telegram.org/api我还不知道如何在PHP中使用这些函数.
根据这个页面:https://telegram.org/apps 我有两个选择:
1)CLI界面(非官方的,顺便说一下):https://github.com/vysheng/tg ,它没有其他的识别功能.为了验证自己,您需要运行:
bin/telegram-cli -k tg-server.pub
Run Code Online (Sandbox Code Playgroud)
在应用程序内部,您必须输入手机和SMS发送的密码 - 之后您将获得授权.然后安装https://github.com/zyberspace/php-telegram-cli-client并运行telegram-cli作为守护进程:
./bin/telegram-cli -dWS /tmp/tg.sck -k tg-server.pub &
Run Code Online (Sandbox Code Playgroud)
这是否意味着我必须为每个尝试登录的用户使用PHP手动创建tg-server.pub?
2)网页:https://github.com/zhukov/webogram - 但它是用JavaScript编写的,代码非常复杂.
亲爱的Stackoverflow大师,也许你比我更专心,可以帮助我识别基于Telegram和PHP的用户聊天的正确解决方案(或者例子,我不知道,PHP代码段或其他什么)?
我将不胜感激!
谢谢!
我正在尝试模拟VKAuth类中的“ self.api.friends.get”方法:
import vk
class VKAuth(object):
def __init__(self, access_token, user):
self.session = vk.Session(access_token = access_token)
self.api = vk.API(self.session)
def follow(self):
vk_friends = self.api.friends.get()
Run Code Online (Sandbox Code Playgroud)
来自测试模块test_views.py:
from mock import patch
from ..auth_backends.vk_backend import VKAuth
class AddUsersToList(TestCase):
def test_auth_vk(self, mock_get):
... etc ...
auth_token = 'ceeecdfe0eb4bf68ceeecdfe0eb4bf68ceeecdfe0eb4bf68652530774ced6cbc8cba0'
token = user.auth_token.key
self.client.defaults['HTTP_AUTHORIZATION'] = 'Token {}'.format(token)
with patch.object(accounts.auth_backends.vk_backend.VKAuth, 'api'): #point where we're mocking
response = self.client.post(reverse('auth-social', kwargs=dict(backend='vk')), dict(access_token=auth_token), follow=True)
Run Code Online (Sandbox Code Playgroud)
在基于SNView基于类的视图中对“ auth-social”的上述调用期间创建了VKAuth类的实例:
class SNView(generics.GenericAPIView):
serializer_class = serializers.AuthSocialSerializer
permission_classes = (rest_permissions.IsAuthenticated)
def post(self, request, backend, *args, **kwargs):
s …Run Code Online (Sandbox Code Playgroud) php ×4
api ×2
telegram ×2
yii2 ×2
algorithm ×1
assets ×1
chat ×1
css ×1
django ×1
mocking ×1
python ×1
python-mock ×1
rest ×1
unit-testing ×1
web-services ×1
yii-widgets ×1