Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstelle ich einen Telegram-Autorisierungsschlüssel in VB.Net?
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
<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 Try
Ende Sub
Private Sub ReadData(Optional wait As Integer = 0)
If Not IsConnected() Then Log("Connection Closed!", ConsoleColor.DarkRed) RaiseEvent Disconneted() Exit Sub End If Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep} AddHandler arg.Completed, AddressOf IO_Handler Dim b(BUFFER_SIZE - 1) As Byte arg.SetBuffer(b, 0, BUFFER_SIZE) Try If Not soc.ReceiveAsync(arg) Then IO_Handler(soc, arg) End If Catch ex As Exception Log("ReadMessages: " & ex.ToString, ConsoleColor.Red) End Try
End Sub
Private Sub IO_Handler(sender As Object, e As SocketAsyncEventArgs)
Log($"{e.LastOperation}:{e.SocketError}:{e.BytesTransferred}", ConsoleColor.Cyan) Select Case e.SocketError Case SocketError.Success Select Case e.LastOperation Case SocketAsyncOperation.Connect 'A socket Connect operation. Log("Connected to " & e.ConnectSocket.RemoteEndPoint.ToString, ConsoleColor.Green) are.Set() Case SocketAsyncOperation.Disconnect, SocketAsyncOperation.Connect RaiseEvent Disconneted() Case SocketAsyncOperation.Receive 'A socket Receive operation. HandleData(e) End Select Case SocketError.ConnectionAborted RaiseEvent Disconneted() End Select
Sub beenden
Privater Sub HandleData(e As SocketAsyncEventArgs)
<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
If Not IsConnected() Then Log("Connection Closed!", ConsoleColor.DarkRed) RaiseEvent Disconneted() Exit Sub End If Dim arg = New SocketAsyncEventArgs With {.RemoteEndPoint = ep} AddHandler arg.Completed, AddressOf IO_Handler Dim b(BUFFER_SIZE - 1) As Byte arg.SetBuffer(b, 0, BUFFER_SIZE) Try If Not soc.ReceiveAsync(arg) Then IO_Handler(soc, arg) End If Catch ex As Exception Log("ReadMessages: " & ex.ToString, ConsoleColor.Red) End TryEnde Funktion
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
Log($"{e.LastOperation}:{e.SocketError}:{e.BytesTransferred}", ConsoleColor.Cyan) Select Case e.SocketError Case SocketError.Success Select Case e.LastOperation Case SocketAsyncOperation.Connect 'A socket Connect operation. Log("Connected to " & e.ConnectSocket.RemoteEndPoint.ToString, ConsoleColor.Green) are.Set() Case SocketAsyncOperation.Disconnect, SocketAsyncOperation.Connect RaiseEvent Disconneted() Case SocketAsyncOperation.Receive 'A socket Receive operation. HandleData(e) End Select Case SocketError.ConnectionAborted RaiseEvent Disconneted() End SelectEnd Sub
Private Sub Send(m As EncryptedMessage)
If e.BytesTransferred = 0 Then --no pending data Log("The remote end has closed the connection.") Exit Sub End If Dim len As Integer = e.Buffer(0) Dim start = 1 If len = &H7F Then len = e.Buffer(1) len += e.Buffer(2) << 8 len += e.Buffer(3) << 16 start = 4 End If len = 4 * len Dim data(len - 1) As Byte Array.Copy(e.Buffer, start, data, 0, len) ProcessResponse(data) ReadData()End Sub
For jetzt ist nur noch UnencryptedMessage erforderlich
Dim a = New List(Of Byte) Dim len = CByte(b.Length / 4) If efSent = False Then --TCP abridged version efSent = True a.Add(&HEF) End If If len >= &H7F Then a.Add(&H7F) a.AddRange(BitConverter.GetBytes(len)) Else a.Add(len) End If a.AddRange(b) --only data, no sequence number, no CRC32 Return a.ToArrayDas obige ist der detaillierte Inhalt vonWie erstelle ich einen Telegram-Autorisierungsschlüssel in VB.Net?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!