Il n'y a pas si longtemps, le compte d'entreprise de WeChat utilisait le cryptage obligatoire des messages, puis le compte officiel a également ajouté des options facultatives de cryptage des messages. Actuellement, les méthodes de cryptage des comptes d'entreprise et des comptes officiels sont les mêmes (les formats seront légèrement différents).
Paramètres de cryptage
Entrez dans le « Centre des développeurs » dans le backend du compte officiel, et nous pouvons voir les paramètres d'amarrage d'URL :
Cliquez sur [Modifier les paramètres], vous pouvez accéder à la page de modification :
Il existe trois méthodes de cryptage :
Le mode texte clair, qui est le format de message original
Le mode de compatibilité, le texte en clair et le texte chiffré coexisteront. Il n'est pas recommandé d'utiliser des produits officiellement publiés (car ils contiennent toujours du texte en clair et ne peuvent pas obtenir l'effet de cryptage)
Mode de sécurité, en ce mode, le message sera Il sera crypté et le serveur du développeur pourra le déchiffrer via l'algorithme officiel pour obtenir le message original en mode texte brut.
Pour tout message chiffré, les informations renvoyées doivent également être chiffrées.
Traitement des informations cryptées
Senparc.Weixin.MP a automatiquement jugé les trois types de messages. Il n'est pas nécessaire de prêter attention aux processus de décryptage et de cryptage pendant le processus de développement, et cela continue. reste dans le processus de développement « mode texte brut ».
Dans le MessageHandler correspondant, nous pouvons connaître l'état actuel du cryptage grâce à certains paramètres :
messageHandler.UsingEcryptMessage : indique si les informations cryptées sont utilisées (y compris le mode de compatibilité et le mode de sécurité)
MessageHandler.UsingCompatibilityModelEcryptMessage : Si le mode de compatibilité est utilisé pour chiffrer le message
Grâce à la combinaison des deux propriétés ci-dessus, nous pouvons savoir quel mode de chiffrement le compte utilise actuellement (bien sûr, dans la plupart des cas, le développeur n'a pas besoin de s'en soucier).
Afin de mieux suivre les informations, MessageHandler a ajouté l'attribut FinalResponseDocument :
messageHandler.ResponseDocument : structure en texte brut de l'objet XML des données de réponse
messageHandler.FinalResponseDocument : final L'objet XML qui sera renvoyé au serveur sera cohérent avec le ResponseDocument s'il n'est pas chiffré, sinon il sera automatiquement chiffré
Principe de chiffrement
À propos des algorithmes de chiffrement (y compris des exemples de téléchargements dans plusieurs langues) ) peut être trouvé dans le document d'aide officiel : http://mp.weixin.qq.com/wiki/index.php?title=Technical Solution
Ce que je veux expliquer ici, c'est EncodingAESKey. L'explication officielle est un peu floue. En fait, EncodingAESKey est un codage Base64 d'AESKey, et AESKey est une chaîne aléatoire de longueur 32 (sélectionnée parmi a-z, A-Z, 0-9). Puisque la longueur de codage Base64 de 32 caractères est fixée à 44 (le dernier caractère est =), après avoir supprimé le =, la EncodingAESKey finale de 43 caractères est générée. EncodingAESKey est utilisé dans le processus de cryptage et de déchiffrement des messages, et une confidentialité stricte est requise.
Ce qui suit est un code C# pour générer 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); }
Pour plus de développement de la plateforme publique WeChat : articles liés au cryptage des messages, veuillez prêter attention à le site PHP chinois !