2015-12-02 104 views
2

我一直在搞实施C#版本的电报API,但我被卡住了。我已经成功地想出了如何创建授权密钥,但我不知道从哪里开始。有没有人知道创建授权密钥后的下一步?文档很难遵循。为电报API创建授权密钥后的步骤

相关信息:Telegram API

注:我没有使用机器人API。我正在尝试使用常规API。

+1

我已经记录了这里的步骤http://stackoverflow.com/a/34929980/44080 –

回答

3

创建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)Telegram不时更新他们的API版本,但他们网站上的版本已过时。您可以轻松获得官方开源项目的最新API规范。特别是来自Webogram的thisthis对于生成您自己的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) 

you can look that up here: STEP 9) DH key exchange complete

5 )你现在有你的server_salt,一个新的随机64位session_id,您想发送以下内容:

msg = 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(有效载荷)

有效载荷=盐+ SESSION_ID + MSG_ID + seq_no + LEN(MSG)+ MSG +填充

您可以从here

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”你现在可以进行User Authorization,授权一(你)的手机号码用来访问电报您新的电报客户

8)发送到电报的所有后续消息将使用相同的session_id和盐发送,并按照像以前一样

9)注意,盐MTProto加密步骤通常只是24小时好。服务器将向您发送新的盐,您可以使用它来替换过期的盐。 session_id通常是长期存在的。

10),一旦你得到的这几个步骤,那么你可以尝试发送信息或让你的联系人列表和消息历史

干杯的窍门。