


Vous emmène analyser le développement de WeChat à partir du code source
Au cours des deux derniers jours, le projet devait ouvrir une interface sur WeChat, j'ai donc fait quelques recherches. Le processus a été très difficile, mais les résultats ont été idéaux. Je vais maintenant vous présenter ce à quoi vous devez faire attention lors du développement. WeChat.
1. Problème de compte
/* Tout d'abord, il faut choisir la plateforme publique (la plateforme ouverte semble être destinée à l'application intégration, je n'ai pas étudié cela attentivement. Si quelqu'un le sait, faites-le-moi savoir.) Sur la plateforme publique, nous devons créer un compte, il existe deux types de comptes, le type personnel et le type d'entreprise. ne peut demander qu'un numéro d'abonnement, tandis que le type d'entreprise. Ce n'est qu'alors que vous pouvez obtenir un compte de service. Les comptes d'abonnement ne peuvent être créés que manuellement ou en configurant certains mots-clés. Les autorisations de développement avancées ne sont requises que pour les comptes de service. Donc, si vous êtes un particulier et que vous souhaitez cibler les réponses aux messages envoyés par des utilisateurs avec un contenu différent, allez dormir. */
Quiconque est engagé dans le développement connaît la signification du paragraphe ci-dessus. Oui, je l'ai commenté aujourd'hui, j'ai découvert que le compte d'abonnement avait également des fonctions avancées. Je ne les avais pas à ce moment-là. Passez l'avis, OK, cela ne gêne pas le partage ci-dessous.
2. Mode développement
C'est très simple Lorsque vous obtenez votre compte de service, vous constaterez qu'il existe une fonction avancée. (il n'y a pas d'option de fonction avancée dans le compte d'abonnement), et vous pouvez choisir la méthode pour l'activer plus tard. Actuellement, un seul peut être démarré pour le développement et l’édition.
L'interface WeChat n'a qu'une seule URL et toutes les données vous sont connectées via cette URL Le serveur doit utiliser cette interface pour se connecter (GET ou POST). Ce qui suit parlera de deux endroits où il est utilisé.
4. Serveur de vérification
Après avoir renseigné l'URL de votre serveur, WeChat apportera plusieurs paramètres pour accéder à votre URL. renvoyer des données spécifiques. Pour des méthodes spécifiques, vous pouvez également consulter ce lien : http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5 %E6%. 8C%87%E5%8D%97
Il y a quelques codes PHP dans la connexion pour référence. Je publierai mon code ci-dessous. J'ai fait de nombreux détours ici, donc je fais de mon mieux pour le publier dans son intégralité.
1 /// <summary> 2 /// 验证微信签名 3 /// </summary> 4 /// <param name="sigNature">微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。</param> 5 /// <param name="timestamp">时间戳</param> 6 /// <param name="nonce">随机数</param> 7 /// <param name="echoStr">随机字符串</param> 8 /// <returns>开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。</returns> 9 [System.Web.Http.AcceptVerbs("GET")]10 [System.Web.Http.ActionName("Api")]11 [ApiExplorerSettings(IgnoreApi = false)]12 public HttpResponseMessage CheckSignature(string sigNature, string timestamp, string nonce, string echoStr)13 {14 var content =15 string.Format("SigNature:{0}\nTimestamp:{1}\nNonce:{2}\nEchoStr:{3}",16 sigNature, timestamp, nonce, echoStr);17 logger.Debug(content); // 此处的log你可以删掉18 19 var list = new string[] { timestamp, nonce, TOKEN };20 Array.Sort(list);21 var tmpArr = string.Join("", list);22 var tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpArr, "SHA1").ToLower();23 24 if (tmpStr == sigNature && !string.IsNullOrEmpty(echoStr)) //根据微信的验证规则做判断25 return Tools.GetReturn(echoStr);26 27 return Tools.GetReturn("error");28 }
La raison pour laquelle j'ai écrit la fonction GetReturn est parce que MVC encapsule mes résultats, et chaque fois que je renvoie une chaîne, parfois il ajoutait une paire de citations des marques sur la couche externe, et il était trop stupide pour reconnaître WeChat. . . . Cette fonction sert principalement à supprimer l'encapsulation MVC pour moi
1 public static HttpResponseMessage GetReturn(string message)2 {3 return new HttpResponseMessage4 {5 Content = new StringContent(message, Encoding.UTF8, "text/html")6 };7 }
La CheckSignature ci-dessus est une interface GET, qui est principalement utilisée pour vérifier le service WeChat Bien sûr, vous pouvez également savoir si. Si vous étudiez attentivement ce que dit WeChat, lorsque vous recevez echoStr, vous pouvez le renvoyer directement, sans étapes de vérification supplémentaires.
5, interface de réception de messages
Je me suis concentré uniquement sur une fonction, lorsque l'utilisateur envoie un message Parfois, j'ai envie de répondre aux messages des utilisateurs, et c'est normal de me concentrer uniquement sur les messages texte (en fait, les principes des autres types de messages sont similaires).
Nous devons faire attention à quelques points ici :
a. L'ActionName de cette interface est le même que l'interface vérifiée ci-dessus. De cette façon, ils utiliseront la même URL lorsque. accessible de l’extérieur. La méthode est simplement différente.
1 [System.Web.Http.AcceptVerbs("POST")]2 [System.Web.Http.ActionName("Api")]3 [ApiExplorerSettings(IgnoreApi = false)]4 public HttpResponseMessage ReceiveMessage()
b. J'ai trouvé cette méthode pour obtenir le contenu des messages après de longues recherches, et cela a demandé beaucoup d'efforts.
1 var message = Request.Content.ReadAsStringAsync().Result;
c. Dans cette interface, il a posté beaucoup de variables d. se concentre uniquement sur eux. Il existe deux types d'
événements1 var toUserName = GetItemValue(message, ToUserNameReg);2 var fromUserName = GetItemValue(message, FromUserNameReg);3 var createTime = GetItemValue(message, CreateTimeReg);4 var msgType = GetItemValue(message, MsgTypeReg);5 var content = GetItemValue(message, ContentReg);6 var msgId = GetItemValue(message, MsgIdReg);7 var eventStr = GetItemValue(message, EventReg);8 var eventKey = GetItemValue(message, EventKeyReg);
switch (msgType) { case "text": { } case "event": { } default: return Tools.GetReturn("error"); }
1 private static readonly Regex ToUserNameReg = new Regex(@"(?<=<ToUserName><!\[CDATA\[).*?(?=\]\]></ToUserName>)", RegexOptions.Compiled);2 private static readonly Regex FromUserNameReg = new Regex(@"(?<=<FromUserName><!\[CDATA\[).*?(?=\]\]></FromUserName>)", RegexOptions.Compiled);3 private static readonly Regex CreateTimeReg = new Regex(@"(?<=<CreateTime>)\d*?(?=</CreateTime>)", RegexOptions.Compiled);4 private static readonly Regex MsgTypeReg = new Regex(@"(?<=<MsgType><!\[CDATA\[).*?(?=\]\]></MsgType>)", RegexOptions.Compiled);5 private static readonly Regex ContentReg = new Regex(@"(?<=<Content><!\[CDATA\[).*?(?=\]\]></Content>)", RegexOptions.Compiled);6 private static readonly Regex MsgIdReg = new Regex(@"(?<=<MsgId>)\d*?(?=</MsgId>)", RegexOptions.Compiled);7 private static readonly Regex EventReg = new Regex(@"(?<=<Event><!\[CDATA\[).*?(?=\]\]></Event>)", RegexOptions.Compiled);8 private static readonly Regex EventKeyReg = new Regex(@"(?<=<EventKey><!\[CDATA\[).*?(?=\]\]></EventKey>)", RegexOptions.Compiled);
1 /// <summary> 2 /// 接受微信消息,如果需要反馈,则调用回复接口进行答复 3 /// </summary> 4 /// <param name="ToUserName">开发者微信号</param> 5 /// <param name="FromUserName">发送方帐号(一个OpenID)</param> 6 /// <param name="CreateTime">消息创建时间 (整型)</param> 7 /// <param name="MsgType">text</param> 8 /// <param name="Content">文本消息内容</param> 9 /// <param name="MsgId">消息id,64位整型</param>10 /// <returns>successful or not</returns>11 [System.Web.Http.AcceptVerbs("POST")]12 [System.Web.Http.ActionName("Api")]13 [ApiExplorerSettings(IgnoreApi = false)]14 public HttpResponseMessage ReceiveMessage()15 {16 var message = Request.Content.ReadAsStringAsync().Result;17 18 var toUserName = GetItemValue(message, ToUserNameReg);19 var fromUserName = GetItemValue(message, FromUserNameReg);20 var createTime = GetItemValue(message, CreateTimeReg);21 var msgType = GetItemValue(message, MsgTypeReg);22 var content = GetItemValue(message, ContentReg);23 var msgId = GetItemValue(message, MsgIdReg);24 var eventStr = GetItemValue(message, EventReg);25 var eventKey = GetItemValue(message, EventKeyReg);26 27 var logStr = string.Format("Message:{8}\n\nToUserName:{0}\nFromUserName:{1}\nCreateTime:{2}\nMsgType:{3}\nContent:{4}\nMsgId:{5}\nEvent:{6}\nEventKey:{7}",28 toUserName, fromUserName, createTime, msgType, content, msgId, eventStr, eventKey, message);29 logger.Debug(logStr);30 31 switch (msgType)32 {33 case "text":34 {35 var returnMessage = Tools.GetCategory(content); // 这块是获取反馈信息的方法,你的和我的应该不一样,所以这块你得修改一下。36 var sendMessage = GetSendMessage(fromUserName, returnMessage, toUserName);37 logger.Debug("MsgId:" + msgId + Environment.NewLine + sendMessage);38 39 return Tools.GetReturn(sendMessage); // 这个函数在上面已经贴出来了,在这块就不在贴了40 }41 case "event":42 {43 if (eventStr == "subscribe") // 关注事件44 {45 var returnMessage = "欢迎关注**账号 [微笑]";46 var sendMessage = GetSendMessage(fromUserName, returnMessage, toUserName);47 return Tools.GetReturn(sendMessage);48 }49 return Tools.GetReturn("error");50 }51 default:52 return Tools.GetReturn("error");53 }54 }
1 /// <summary> 2 /// 获取消息体中正则所能匹配到的内容 3 /// </summary> 4 /// <param name="message">消息内容</param> 5 /// <param name="regex">正则</param> 6 /// <returns>返回正则匹配的所有内容</returns> 7 [ApiExplorerSettings(IgnoreApi = true)] 8 private string GetItemValue(string message, Regex regex) 9 {10 if(regex.IsMatch(message))11 return regex.Match(message).Value;12 return "";13 }
1 /// <summary> 2 /// 发送被动响应消息 3 /// </summary> 4 /// <param name="ToUserName">接收方帐号(收到的OpenID)</param> 5 /// <param name="Content">回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)</param> 6 /// <param name="FromUserName">开发者微信号</param> 7 /// <param name="CreateTime">消息创建时间 (整型)</param> 8 /// <param name="MsgType">text</param> 9 /// <returns></returns>10 [System.Web.Http.AcceptVerbs("POST")]11 [System.Web.Http.ActionName("GetSendMessage")]12 [ApiExplorerSettings(IgnoreApi = false)]13 public string GetSendMessage(string ToUserName, string Content, string FromUserName = Developer,14 string MsgType = "text")15 {16 var createTime = Tools.ConvertDateTimeToInt(DateTime.Now);17 18 return19 string.Format(@"<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[{3}]]></MsgType><Content><![CDATA[{4}]]></Content></xml>", ToUserName, FromUserName, createTime, MsgType, Content);20 }
WeChat. Téléchargement du code source de la plateforme de compte officiel
2. Téléchargement de la version exclusive du système Xiaozhu CMS Lifetong O2O v2.0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pour mettre à jour la version curl sous Linux, vous pouvez suivre les étapes ci-dessous : Vérifiez la version actuelle de curl : Tout d'abord, vous devez déterminer la version de curl installée dans le système actuel. Ouvrez un terminal et exécutez la commande suivante : curl --version Cette commande affichera les informations sur la version actuelle de curl. Confirmer la version curl disponible : Avant de mettre à jour curl, vous devez confirmer la dernière version disponible. Vous pouvez visiter le site officiel de curl (curl.haxx.se) ou des sources de logiciels associées pour trouver la dernière version de curl. Téléchargez le code source de curl : à l'aide de curl ou d'un navigateur, téléchargez le fichier de code source pour la version curl de votre choix (généralement .tar.gz ou .tar.bz2).

Le noyau Linux est un noyau de système d'exploitation open source dont le code source est stocké dans un référentiel de code dédié. Dans cet article, nous analyserons en détail le chemin de stockage du code source du noyau Linux et utiliserons des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 1. Chemin de stockage du code source du noyau Linux Le code source du noyau Linux est stocké dans un référentiel Git appelé Linux, hébergé sur [https://github.com/torvalds/linux](http

Afficher les étapes : 1. Recherchez le répertoire d'installation ou affichez-le en ligne ; 2. Décompressez le code source ; 3. Utilisez un éditeur de texte ou un environnement de développement intégré. 4. Naviguez et affichez le code source ; Introduction détaillée : 1. Recherchez le répertoire d'installation ou affichez-le en ligne : Si JDK est installé, vous pouvez trouver le code source Java dans le répertoire d'installation de JDK. Dans le répertoire d'installation du JDK, il existe généralement un fichier compressé src.zip ou similaire, qui contient le code source de la bibliothèque de classes Java Core. Il est également possible de visualiser le code source Java en ligne, etc.

Étapes pour afficher le code source de Tomcat : 1. Téléchargez le code source de Tomcat ; 2. Importez le code source de Tomcat dans IDEA ; 3. Affichez le code source ; 4. Comprendre le principe de fonctionnement de Tomcat ; 5. Participez à la communauté et contribuez ; ; 6. Précautions ; 7. Apprendre et mettre à jour en permanence ; 8. Utiliser des outils et des plug-ins. Introduction détaillée : 1. Pour télécharger le code source de Tomcat, vous devez d'abord obtenir le code source de Tomcat. Vous pouvez télécharger le package de code source depuis le site officiel d'Apache Tomcat, etc.

PHP est un langage de script open source largement utilisé dans le développement Web et la programmation côté serveur, notamment dans le développement de WeChat. Aujourd'hui, de plus en plus d'entreprises et de développeurs commencent à utiliser PHP pour le développement de WeChat, car il est devenu un langage de développement vraiment facile à apprendre et à utiliser. Dans le développement de WeChat, le cryptage et le décryptage des messages sont une question très importante car ils impliquent la sécurité des données. Pour les messages sans méthodes de cryptage et de décryptage, les pirates peuvent facilement obtenir les données, ce qui constitue une menace pour les utilisateurs.

En Java, le suffixe des fichiers de code source est généralement .java. Lors de l'écriture d'un programme Java, un fichier de code source avec un suffixe .java est créé, qui contient le code source Java. Par exemple, un simple fichier de code source Java pourrait être nommé MyClass.java, où MyClass est le nom de la classe et .java est le suffixe du fichier.

Il s'agit d'un article de 1 500 mots qui explore en profondeur la distribution du code source du noyau Linux. En raison de l'espace limité, nous nous concentrerons sur la structure organisationnelle du code source du noyau Linux et fournirons quelques exemples de code spécifiques pour aider les lecteurs à mieux comprendre. Le noyau Linux est un noyau de système d'exploitation open source dont le code source est hébergé sur GitHub. La distribution entière du code source du noyau Linux est très vaste, contenant des centaines de milliers de lignes de code, impliquant plusieurs sous-systèmes et modules différents. Pour mieux comprendre le code source du noyau Linux

Comment pouvez-vous comprendre les principes et les objectifs de conception derrière la dernière spécification de code PHP en lisant son code source ? Introduction : lors de l'écriture de code PHP de haute qualité, il est très important de suivre certaines normes de codage. Grâce aux spécifications du code, la lisibilité, la maintenabilité et l’évolutivité du code peuvent être améliorées. Pour le langage PHP, il existe une spécification de code largement adoptée, à savoir PSR (PHPStandardsRecommendations). Cet article explique comment lire le code source de la dernière spécification de code PHP.
