Vor nicht allzu langer Zeit verwendete das Unternehmenskonto von WeChat eine obligatorische Nachrichtenverschlüsselung, und dann fügte das offizielle Konto auch optionale Nachrichtenverschlüsselungsoptionen hinzu. Derzeit sind die Verschlüsselungsmethoden für Unternehmenskonten und öffentliche Konten gleich (das Format wird geringfügig unterschiedlich sein).
Verschlüsselungseinstellungen
Rufen Sie das „Developer Center“ im Backend des offiziellen Kontos auf und wir können die Einstellungen für das URL-Docking sehen:
Klicken Sie auf [Einstellungen ändern], um die Änderungsseite aufzurufen:
Es gibt drei Verschlüsselungsmethoden:
Klartextmodus Originalnachrichtenformat
Kompatibilitätsmodus, Klartext und Chiffretext werden nebeneinander existieren. Es wird nicht empfohlen, offiziell veröffentlichte Produkte zu verwenden (da sie immer noch Klartext enthalten und den Verschlüsselungseffekt nicht erzielen können)
Sicherheitsmodus In diesem Modus wird die Nachricht verschlüsselt, und der Server des Entwicklers kann sie über den offiziellen Algorithmus entschlüsseln, um die ursprüngliche Nachricht im Klartextmodus zu erhalten.
Bei jeder verschlüsselten Nachricht müssen auch die zurückgegebenen Informationen verschlüsselt werden.
Verarbeitung verschlüsselter Informationen
Senparc.Weixin.MP hat die drei Arten von Nachrichten automatisch beurteilt. Während des Entwicklungsprozesses muss nicht auf Entschlüsselungs- und Verschlüsselungsprozesse geachtet werden verbleibt im Entwicklungsprozess im „Nur-Text-Modus“.
Im entsprechenden MessageHandler können wir den aktuellen Verschlüsselungsstatus anhand einiger Parameter ermitteln:
messageHandler.UsingEcryptMessage: Ob verschlüsselte Informationen verwendet werden (einschließlich Kompatibilitätsmodus und Sicherheitsmodus)
MessageHandler.UsingCompatibilityModelEcryptMessage: Ob der Kompatibilitätsmodus zum Verschlüsseln der Nachricht verwendet wird
Durch die Kombination der beiden oben genannten Eigenschaften können wir erkennen, welchen Verschlüsselungsmodus das Konto derzeit verwendet (in den meisten Fällen natürlich der Entwickler). muss sich nicht darum kümmern).
Um Informationen besser verfolgen zu können, hat MessageHandler das FinalResponseDocument-Attribut hinzugefügt:
messageHandler.ResponseDocument: Klartextstruktur des Antwortdaten-XML-Objekts
messageHandler.FinalResponseDocument: final Das XML-Objekt, das an den Server zurückgegeben wird, stimmt mit dem ResponseDocument überein, wenn es nicht verschlüsselt ist. Andernfalls wird es automatisch verschlüsselt.
Verschlüsselungsprinzip
Informationen zu Verschlüsselungsalgorithmen (einschließlich Beispiel-Downloads in mehrere Sprachen) ) finden Sie im offiziellen Hilfedokument: http://mp.weixin.qq.com/wiki/index.php?title=%E6%8A%80%E6%9C%AF%E6%96% B9%E6 %A1%88
Was ich hier erklären möchte, ist EncodingAESKey. Die offizielle Erklärung ist etwas verwirrend. Tatsächlich ist EncodingAESKey eine Base64-Kodierung von AESKey, und AESKey ist eine zufällige Zeichenfolge mit der Länge 32 (ausgewählt aus a-z, A-Z, 0-9). Da die Base64-Kodierungslänge von 32 Zeichen auf 44 festgelegt ist (das letzte Zeichen ist =), wird nach dem Entfernen des = der endgültige EncodingAESKey mit 43 Zeichen generiert. CodierungAESKey wird im Prozess der Nachrichtenverschlüsselung und -entschlüsselung verwendet und erfordert strenge Vertraulichkeit.
Das Folgende ist ein C#-Code zum Generieren von EncodingAESKey:
protected string CreateEncodingAESKey() { string aesKey = GetRadomStr(32);//获得a-z,A-Z,0-9的随机字符串 var encodingAesKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(aesKey), Base64FormattingOptions.None); return encodingAesKey.Substring(0, encodingAesKey.Length - 1); }
Weitere Artikel zur Entwicklung der öffentlichen WeChat-Plattform: Nachrichtenverschlüsselung finden Sie hier die chinesische PHP-Website!