初始身份验证:在python中发送'auth.sendCode'并接收'msg_container',而不是'auth.SentCode'

初始身份验证:在python中发送'auth.sendCode'并接收'msg_container',而不是'auth.SentCode',python,authentication,telegram,Python,Authentication,Telegram,我下载了Telegram()的CLI版本。该CLI界面的不太完整版本是从以下位置下载的: 现在,身份验证总而言之工作正常,但实际功能仍在进行中 因此,我对JASON方案做了一点修改,并添加了初始身份验证所需的功能 {'id': '1988976461', 'method': 'sendCode', 'params': [{'name': 'phone_number', 'type': 'string'}, {'name': 'sms_type', 'type': '

我下载了Telegram()的CLI版本。该CLI界面的不太完整版本是从以下位置下载的:

现在,身份验证总而言之工作正常,但实际功能仍在进行中

因此,我对JASON方案做了一点修改,并添加了初始身份验证所需的功能

{'id': '1988976461',
 'method': 'sendCode',
 'params': [{'name': 'phone_number', 'type': 'string'},
            {'name': 'sms_type', 'type': 'int'},
            {'name': 'api_id', 'type': 'int'},
            {'name': 'api_hash', 'type': 'string'},
            {'name': 'lang_code', 'type': 'string'}],
 'type': 'SentCode'}
如文件中所述

现在,在我没有这样做之后,根据文档,在发送了一条请求SMS代码的消息之后,我应该收到
auth.SentCode
,在数据包
0xEFED51D9
的开头有十六进制代码,但是我收到的是来自服务器的响应,某种类型的
msg_container73f1f8dc
似乎与我的请求没有任何关联

总的来说,这看起来非常烦人和奇怪,我不知道是什么原因导致了这一切,总的来说,我遵循了文档,并试图按照要求实现

我正在发送的数据包看起来很好,而且我实际上已经将SmsCode发送到了我的手机上。。但由于某些原因,我得到的答复不好\不清楚

我调用JSON中实现的函数,如下所示:

auth = Session.method_call('sendCode', phone_number=PHONE_NUMBER, sms_type=0, api_id=MY_API_ID, api_hash=MY_API_HASH, lang_code="en")
因此,它正在发挥作用。。但是我需要
phone\u code\u hash
。请注意,出于某种原因,电报本身的文档也很奇怪。查看他们给出的一个查询示例,这些数字与文档中的内容不符(引用自他们的文档):

查询示例:

(auth.sendCode "79991234567" 1 32 "test-hash" "en")
=
(auth.sentCode
  phone_registered:(boolFalse)
  phone_code_hash:"2dc02d2cda9e615c84"
)

d16ff372 3939370b 33323139 37363534 00000001 00000020 73657409 61682d74 00006873 e77e812d
=
2215bcbd bc799737 63643212 32643230 39616463 35313665 00343863 e12b7901
摘自这里:

每个零件上预期的第一个DWORD应不同。。 例如:
768d5f4d
而不是
d16ff372

那么我错过了什么

一些参考(出于某种原因,如果我不把它作为代码部分,它不允许我发布)


问题是插座处理不当。。服务器刚刚发送了两个数据包

第一个数据包是一些
消息服务
,第二个数据包是我真正想要的数据


这很奇怪,因为它在文档中没有提到这些消息。大多数时候,电报都会将消息打包到一个msg_容器中

例如,您可能会收到前一条消息的Msg_acks以及上一条消息的预期响应

最好的方法是设置代码以处理接收到的容器的情况,检查容器中的项目数,然后循环接收到的消息,将不同的消息类型传递给相应的处理程序

还要注意,您可能会得到一个包含gzip消息的rpc_响应,在这种情况下,您需要解压,然后处理您的消息内容,该内容也可能包含消息集合


干杯

你能举个例子说明代码是如何编写的吗?我没有找到示例。我认为无法识别的构造函数ID来自这些函数/对象的旧版本。查看第2层的模式,我们看到旧版本是
auth.sendCode\d16ff372 phone\u number:string sms\u type:int-api\u id:int-api\u hash:string=auth.SentCode
auth.SentCode\2215bcbd phone\u注册:Bool phone\u code\u hash:string=auth.SentCode
。根据我的经验,旧的响应至少仍在测试服务器上使用。
https://core.telegram.org/constructor/auth.sentCode
https://core.telegram.org/mtproto/service_messages
https://core.telegram.org/method/auth.sendCode