我一直在处理实现Telegram API的C#版本,但是我被困住了。我已经成功地找到了创建授权密钥的方法,但是我不知道从哪里开始。有人知道在创建授权密钥之后下一步的步骤吗?这些文件很难理解。
参考:电报API
注意:我没有使用Bot。我正在尝试使用常规API。
发布于 2016-02-18 21:32:44
在创建您的Auth_key之后,在继续之前,我发现最简单的方法是确保我已经连接到最近的DataCenter。此外,您应该发送一个InitConnection命令以及您的代码将要使用的当前层(API版本)。
这里是我发送的一个例子:
TL.invokewithlayer(@layer,TL.initconnection(@app_id,@device_model,@system_version,@app_version,@lang_code,TL.help_getnearestdc))
在您发送之前,这里有一些更多的背景:
1)电报服务器采用TL语言进行通信,它基本上是一种自定义开发的编码方案,用于表达从命令到所有类型的一切内容。您需要自己构建一个解码器和编码器,以便将原始字节转换为TL,反之亦然。
2)电报不时更新API版本,但网站上的版本已经过时。您可以轻松地获得他们官方开放源码项目的最新API规范。特别是,Webogram中的这和这对于生成您自己的TL解析器非常有用。当前图层版本为45。
3)所以当您发送init + nearestDc请求时,这很可能是您的第一条MTproto加密消息,因此您需要创建一个新的随机64位数字作为会话密钥,但也需要一个有效的server_salt.
4)您可能在创建Auth_Key时跳过了此操作,但是您可以从以下内容创建一个有效的初始server_salt:
server_salt = substr(new_nonce, 0, 8) XOR substr(server_nonce, 0, 8)5)您现在有了您的server_salt,这是一个新的随机64位session_id,您希望发送以下内容:
TL.invokewithlayer(@layer,TL.initconnection(@app_id,@device_model,@system_version,@app_version,@lang_code,TL.help_getnearestdc))
MTProto格式是: auth_id + msg_key + enc_payload
enc_payload =AES_IGE_enc(有效载荷)
有效载荷= salt + session_id + msg_id + seq_no + len( msg ) +msg+填充物
您可以从这里获得上述信息。
6)现在,您希望得到一个告诉您最近的dc_id的结果,如果这与dc_id =2不同(通常dc_id =2是您开始使用的默认值),那么您需要断开连接并启动到新dc_id的新连接,并重新生成连接到这个新dc的auth_key。您的dc_ids指向电报数据中心IP地址列表['149.154.175.50', '149.154.167.51', '149.154.175.100', '149.154.167.91', '149.154.171.5']。
7)一旦连接到正确的“最近的dc”,您现在可以执行用户授权,授权(您的)移动号码使用您的新电报客户端访问电报。
8)发送到电报的所有后续消息都将使用相同的session_id和salt发送,并遵循前面的MTProto加密步骤
9)请注意,盐通常只持续24小时。服务器将向您发送一个新的盐类,您可以使用它来替换过期的盐类。session_id通常寿命很长。
10)一旦掌握了以下几个步骤的窍门,就可以尝试发送消息或获取联系人列表和消息历史记录。
干杯。
https://stackoverflow.com/questions/34045353
复制相似问题