Bisher konnte ich die Telegram-Autorisierung vollständig umsetzen, allerdings nicht in Ihrer gewünschten Sprache - PHP, ich habe vb.Net verwendet. Ich glaube jedoch, dass die gleiche Logik gelten sollte.
Das Erstellen eines Telegram-Autorisierungsschlüssels
Telegram API ist kein Kinderspiel im Park. Das Studium des vorhandenen Quellcodes könnte (meiner Meinung nach) ziemlich entmutigend sein. Daher bestand mein Ansatz darin, die Online-API-Dokumentation zu studieren und den in den Links beschriebenen „sample-auth_key“ zu implementieren unten.
https://core.telegram.org/mtproto/auth_key
https://core.telegram.org/mtproto/ Samples-auth_key
Mit diesem Ansatz erhalten Sie ein besseres Verständnis und Einführung in die Grundelemente, die in der gesamten Telegram-API verwendet werden, und möglicherweise dabei helfen, Ihre eigenen Funktionen und Routinen zu organisieren, die Sie für die nächsten Schritte benötigen – Implementierung anderer Funktionen der API, da die Generierung eines AuthKey nur der Anfang ist.< ;/p>
Schritt 1
Die gesamte Kommunikation erfolgt einmalig über TCP Sie eine eindeutige api_id erhalten haben (https://core.telegram.org/api/obtaining_api_id#obtaining-api-id), finden Sie die folgende IP, die zur Verwendung in Tests angekündigt wird: 149.154.167.40:433 Die api_id ist zu diesem Zeitpunkt zum Generieren einer nicht erforderlich AuthKey
Richten Sie Ihre bevorzugte Methode der Sende-/Empfangs-TCP-Verarbeitungsschleife ein
was ich habe, ist ein privates SendData, das einfach ein Byte an einen Live-Socket sendet verbunden mit der oben angegebenen IP-Adresse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Ende Sub
Private Sub ReadData(Optional wait As Integer = 0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
End Sub
Private Sub IO_Handler(sender As Object, e As SocketAsyncEventArgs)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Sub beenden
Privater Sub HandleData(e As SocketAsyncEventArgs)
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">If Not IsConnected() Then Log("Connection Closed!", ConsoleColor.DarkRed) RaiseEvent Disconneted() Exit Sub End If b = TCPPack(b) Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep} AddHandler arg.Completed, AddressOf IO_Handler arg.SetBuffer(b, 0, b.Length) Try If Not soc.SendAsync(arg) Then IO_Handler(soc, arg) End If If read Then ReadData() End If Catch ex As Exception Log("SendData: " & ex.ToString, ConsoleColor.Red) End TryEnd Sub
Abschließend benötigen wir für diesen Schritt eine TcpPack()-Methode, die uns hilft, unsere Daten in dem von Telegram erwarteten Format aufzufüllen – siehe Code unten mit Kommentaren
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
SCHRITT 2
Nachdem die grundlegenden TCP-Sende-/Empfangsroutinen eingerichtet sind, können wir mit der Vorbereitung beginnen Datenpakete zum Senden an Telegram und Unterroutinen zur Verarbeitung der spezifischen empfangenen Antworten - ProcessResponse(data)
Was wir als Nächstes verstehen müssen, ist die Tatsache, dass Telegram zwei große Kategorien von Nachrichten verarbeitet –
Dies sind reine Textnachrichten mit ihrer auth_key_id =0. Beim Generieren eines AuthKey wird dieser Nachrichtentyp durchgehend verwendet
Verschlüsselt - https://core.telegram.org/mtproto/description#encrypted-message-encrypted-data
Die gesamte weitere Kommunikation mit Telegram-Servern erfolgt über verschlüsselte Nachrichten
Ich wähle zwei Klassen, um beide Nachrichtentypen zu kapseln. Ich kann dann zwei Send(m)-Methoden haben, die jeden Typ verarbeiten
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
For jetzt ist nur noch UnencryptedMessage erforderlich
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|