Maison Applet WeChat Développement WeChat Vous emmène analyser le développement de WeChat à partir du code source

Vous emmène analyser le développement de WeChat à partir du code source

May 05, 2017 am 10:49 AM

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.

3, Serveur de configuration

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         }
Copier après la connexion

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         }
Copier après la connexion

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()
Copier après la connexion

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;
Copier après la connexion

 c. Dans cette interface, il a posté beaucoup de variables d. se concentre uniquement sur eux. Il existe deux types d'

événements
1             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);
Copier après la connexion
 : les événements et les textes valent la peine d'être suivis et de ne plus être suivis. Lorsque vous y prêtez attention, vous devez exprimer votre gratitude. Pour le texte envoyé, j'ai besoin de trouver le contenu. de la réponse.

 e, tous les codes sont ici :

            switch (msgType)
            {                case "text":
                    {
                    }                case "event":
                    {
                    }                default:                    return Tools.GetReturn("error");
            }
Copier après la connexion

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);
Copier après la connexion
 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         }
Copier après la connexion
[Recommandations associées]
 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         }
Copier après la connexion
 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         }
Copier après la connexion
1.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Tutoriel sur la mise à jour de la version curl sous Linux ! Tutoriel sur la mise à jour de la version curl sous Linux ! Mar 07, 2024 am 08:30 AM

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).

Analyse du chemin de stockage du code source du noyau Linux Analyse du chemin de stockage du code source du noyau Linux Mar 14, 2024 am 11:45 AM

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

Comment afficher le code source Java Comment afficher le code source Java Dec 27, 2023 pm 04:41 PM

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.

Comment afficher le code source de Tomcat Comment afficher le code source de Tomcat Jan 25, 2024 pm 01:56 PM

É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.

Développement PHP WeChat : Comment implémenter le cryptage et le décryptage des messages Développement PHP WeChat : Comment implémenter le cryptage et le décryptage des messages May 13, 2023 am 11:40 AM

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.

Quel est le suffixe du code source Java ? Quel est le suffixe du code source Java ? Dec 27, 2023 pm 04:31 PM

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.

Une exploration approfondie de la distribution du code source du noyau Linux Une exploration approfondie de la distribution du code source du noyau Linux Mar 15, 2024 am 10:21 AM

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 ? 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 ? Sep 05, 2023 pm 02:46 PM

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.

See all articles