Analysieren Sie die WeChat-Entwicklung anhand des Quellcodes
In den letzten zwei Tagen musste das Projekt eine Schnittstelle auf WeChat öffnen, daher habe ich einige Nachforschungen angestellt. Der Prozess war sehr schwierig, aber die Ergebnisse waren ideal. Jetzt werde ich vorstellen, worauf Sie bei der Entwicklung achten müssen WeChat.
1. Kontoproblem
/* Zunächst müssen Sie die öffentliche Plattform auswählen (die offene Plattform scheint für die Anwendung geeignet zu sein). Integration, ich habe das nicht sorgfältig studiert, lassen Sie es mich bitte wissen.) Auf der öffentlichen Plattform müssen wir zwei Arten von Konten registrieren, darunter den persönlichen Typ und den Unternehmenstyp. Der persönliche Typ kann nur eine Abonnementnummer beantragen, während Sie nur dann ein Dienstkonto erhalten können, indem Sie einige Schlüsselwörter konfigurieren. Das Dienstkonto kann nur verwendet werden Dienstkonto, wenn Sie erweiterte Entwicklungsberechtigungen benötigen. Wenn Sie also eine Einzelperson sind und gezielt auf Nachrichten antworten möchten, die von Benutzern mit unterschiedlichem Inhalt gesendet werden, dann schlafen Sie ein. */
Jeder, der sich mit der Entwicklung beschäftigt, kennt die Bedeutung des obigen Absatzes. Als ich mich heute im Abonnementkonto anmeldete, stellte ich fest, dass es möglicherweise auch erweiterte Funktionen gibt Ich hatte sie zu diesem Zeitpunkt noch nicht. Bestehen Sie die Rezension, OK, es behindert das Teilen unten nicht.
2. Entwicklungsmodus
Wenn Sie Ihr Dienstkonto erhalten, werden Sie feststellen, dass es eine erweiterte Funktion gibt (Im Abonnementkonto gibt es keine erweiterte Funktionsoption) und Sie können auswählen, welche Methode Sie später aktivieren möchten. Derzeit kann nur einer für die Entwicklung und Bearbeitung gestartet werden.
Die WeChat-Schnittstelle hat nur eine URL und alle Daten sind über sie mit Ihnen verbunden Diese URL Der Server muss diese Schnittstelle verwenden, um eine Verbindung herzustellen (GET oder POST). Im Folgenden werden zwei Orte beschrieben, an denen sie verwendet wird.
4. Verifizierungsserver
Nach dem Ausfüllen Ihrer Server-URL bringt WeChat mehrere Parameter mit, um auf Ihre URL zuzugreifen Für bestimmte Methoden können Sie auch diesen Link überprüfen: http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5 %E6% 8C%87%E5%8D%97
Im Anschluss sind einige PHP-Codes als Referenz enthalten. Ich habe hier viele Umwege gemacht, also versuche ich, ihn vollständig zu veröffentlichen
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 }
Der Grund, warum ich die GetReturn -Funktion geschrieben habe, ist, dass MVC meine Ergebnisse kapselt und jedes Mal, wenn ich eine Zeichenfolge zurückgebe, manchmal ein Paar Anführungszeichen hinzufügt Markierungen in der äußeren Schicht, und er war zu dumm, WeChat zu erkennen. . . . Diese Funktion dient für mich hauptsächlich dazu, die MVC-Kapselung zu entfernen
1 public static HttpResponseMessage GetReturn(string message)2 {3 return new HttpResponseMessage4 {5 Content = new StringContent(message, Encoding.UTF8, "text/html")6 };7 }
Die obige CheckSignature ist eine GET-Schnittstelle, die hauptsächlich zur Überprüfung des WeChat-Dienstes verwendet wird Natürlich können Sie auch herausfinden, ob Wenn Sie sorgfältig studieren, was WeChat sagt, ist es tatsächlich in Ordnung, es direkt und ohne zusätzliche Überprüfungsschritte zurückzusenden.
5, Nachrichtenempfangsschnittstelle
Ich habe mich nur auf eine Funktion konzentriert, nämlich wenn der Benutzer eine Nachricht sendet Manchmal möchte ich auf Benutzernachrichten antworten und es ist in Ordnung, mich nur auf Textnachrichten zu konzentrieren (tatsächlich sind die Prinzipien anderer Nachrichtentypen ähnlich).
Wir müssen hier auf einige Punkte achten:
a. Der ActionName dieser Schnittstelle ist derselbe wie die oben verifizierte Schnittstelle. Auf diese Weise wird dieselbe URL verwendet Der Zugriff von außen ist einfach anders.
1 [System.Web.Http.AcceptVerbs("POST")]2 [System.Web.Http.ActionName("Api")]3 [ApiExplorerSettings(IgnoreApi = false)]4 public HttpResponseMessage ReceiveMessage()
b. Ich habe diese Methode zum Erhalten von Nachrichteninhalten nach langer Recherche gefunden und sie hat viel Mühe gekostet.
1 var message = Request.Content.ReadAsStringAsync().Result;
c. In dieser Schnittstelle habe ich viele Variablen verwendet
d Ich konzentriere mich nur auf sie. Es gibt zwei Arten von Ereignissen: Ereignisse und Ereignisse, die es wert sind, beachtet zu werden. Für den gesendeten Text muss ich mich bedanken der Antwort.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);
e, alle Codes finden Sie hier:
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 }
Xiaozhu CMS Lifetong O2O System v2.0, exklusive Version herunterladen
Das obige ist der detaillierte Inhalt vonAnalysieren Sie die WeChat-Entwicklung anhand des Quellcodes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Um die Curl-Version unter Linux zu aktualisieren, können Sie die folgenden Schritte ausführen: Überprüfen Sie die aktuelle Curl-Version: Zunächst müssen Sie die im aktuellen System installierte Curl-Version ermitteln. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus: curl --version Dieser Befehl zeigt die aktuellen Informationen zur Curl-Version an. Verfügbare Curl-Version bestätigen: Bevor Sie Curl aktualisieren, müssen Sie die neueste verfügbare Version bestätigen. Sie können die offizielle Website von Curl (curl.haxx.se) oder verwandte Softwarequellen besuchen, um die neueste Version von Curl zu finden. Laden Sie den Curl-Quellcode herunter: Laden Sie mit Curl oder einem Browser die Quellcodedatei für die Curl-Version Ihrer Wahl herunter (normalerweise .tar.gz oder .tar.bz2).

Der Linux-Kernel ist ein Open-Source-Betriebssystemkernel, dessen Quellcode in einem speziellen Code-Repository gespeichert ist. In diesem Artikel analysieren wir den Speicherpfad des Linux-Kernel-Quellcodes im Detail und verwenden spezifische Codebeispiele, um den Lesern ein besseres Verständnis zu ermöglichen. 1. Speicherpfad für den Linux-Kernel-Quellcode Der Linux-Kernel-Quellcode wird in einem Git-Repository namens Linux gespeichert, das unter [https://github.com/torvalds/linux](http://github.com/torvalds/linux) gehostet wird

Schritte anzeigen: 1. Suchen Sie das Installationsverzeichnis oder zeigen Sie es online an. 3. Verwenden Sie einen Texteditor oder eine integrierte Entwicklungsumgebung. 4. Navigieren Sie zum Quellcode und zeigen Sie ihn an. Ausführliche Einführung: 1. Suchen Sie das Installationsverzeichnis oder sehen Sie es online an: Wenn JDK installiert ist, finden Sie den Java-Quellcode im JDK-Installationsverzeichnis. Im JDK-Installationsverzeichnis befindet sich normalerweise eine src.zip oder eine ähnlich komprimierte Datei, die den Quellcode der Java-Kernklassenbibliothek enthält. Es ist auch möglich, den Java-Quellcode online usw. anzuzeigen.

Schritte zum Anzeigen des Tomcat-Quellcodes: 1. Laden Sie den Tomcat-Quellcode in IDEA herunter. 3. Sehen Sie sich das Funktionsprinzip von Tomcat an 6. Vorsichtsmaßnahmen; 7. Kontinuierlich lernen und aktualisieren; 8. Tools und Plug-Ins verwenden. Detaillierte Einführung: 1. Um den Tomcat-Quellcode herunterzuladen, müssen Sie zunächst den Tomcat-Quellcode herunterladen. Sie können das Quellcodepaket von der offiziellen Website von Apache Tomcat usw. herunterladen.

PHP ist eine Open-Source-Skriptsprache, die in der Webentwicklung und serverseitigen Programmierung, insbesondere in der WeChat-Entwicklung, weit verbreitet ist. Heutzutage beginnen immer mehr Unternehmen und Entwickler, PHP für die WeChat-Entwicklung zu verwenden, da es sich zu einer wirklich leicht zu erlernenden und benutzerfreundlichen Entwicklungssprache entwickelt hat. Bei der WeChat-Entwicklung sind die Nachrichtenverschlüsselung und -entschlüsselung ein sehr wichtiges Thema, da sie die Datensicherheit betreffen. Bei Nachrichten ohne Verschlüsselungs- und Entschlüsselungsmethoden können Hacker leicht an die Daten gelangen, was eine Bedrohung für Benutzer darstellt.

In Java lautet das Suffix für Quellcodedateien normalerweise .java. Beim Schreiben eines Java-Programms wird eine Quellcodedatei mit dem Suffix .java erstellt, die den Java-Quellcode enthält. Beispielsweise könnte eine einfache Java-Quellcodedatei MyClass.java heißen, wobei MyClass der Name der Klasse und .java das Suffix der Datei ist.

Dies ist ein Artikel mit 1500 Wörtern, der die Verteilung des Linux-Kernel-Quellcodes eingehend untersucht. Aufgrund des begrenzten Platzes konzentrieren wir uns auf die Organisationsstruktur des Linux-Kernel-Quellcodes und stellen einige spezifische Codebeispiele bereit, um den Lesern ein besseres Verständnis zu ermöglichen. Der Linux-Kernel ist ein Open-Source-Betriebssystemkernel, dessen Quellcode auf GitHub gehostet wird. Die gesamte Quellcodeverteilung des Linux-Kernels ist sehr umfangreich und enthält Hunderttausende Codezeilen, die mehrere verschiedene Subsysteme und Module umfassen. Um ein tieferes Verständnis des Linux-Kernel-Quellcodes zu erlangen

Wie können Sie die Designprinzipien und Ziele hinter der neuesten PHP-Codespezifikation verstehen, indem Sie den Quellcode lesen? Einführung: Beim Schreiben von hochwertigem PHP-Code ist es sehr wichtig, bestimmte Codierungsstandards einzuhalten. Durch Codespezifikationen können die Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes verbessert werden. Für die PHP-Sprache gibt es eine weit verbreitete Codespezifikation, nämlich PSR (PHPStandardsRecommendations). In diesem Artikel erfahren Sie, wie Sie den Quellcode der neuesten PHP-Codespezifikation lesen
