WeChat 開発をソース コードから分析します。
この2日間、プロジェクトはWeChat上でインターフェースを開く必要があったので、そのプロセスは非常に困難でしたが、結果は理想的でした。次に、WeChatを開発する際に注意する必要があることを紹介します。
1、アカウントの問題
/* まず第一に、パブリックプラットフォームを選択する必要があります(オープンプラットフォームはアプリケーション統合用のようです、私はこれを注意深く勉強していません、誰かが知っていれば幸いです)教えてください), パブリックプラットフォームにアカウントを登録する必要があります。アカウントには個人タイプとエンタープライズタイプの 2 種類があり、個人タイプはサブスクリプションアカウントのみを申請できます。サービス アカウントを取得するユーザーが送ったメッセージに別の内容で返信したら、あとは寝るだけです。 */
開発に携わっている人なら誰でも上記の段落の意味を知っています。今日サブスクリプション アカウントにログインしたところ、サブスクリプション アカウントにも高度な機能があることがわかりました。その時点でのレビューはOK、次の共有を妨げるものではありません。
2、開発モード
サービスアカウントを取得すると、機能に高度な機能があることがわかります(サブスクリプションアカウントには高度な機能オプションはありません)。どの方法をアクティブ化するかを選択できます。現在、開発と編集のために開始できるのは 1 つだけです。
WeChatインターフェイスにはURLが1つだけあり、このURL(GETまたはPOST)を介してサーバーに接続されるすべてのデータは、このインターフェイスを使用する必要があります。以下の2つについて説明します。 . 使用場所。
4、サーバーを確認します
サーバーの URL を入力すると、WeChat は URL にアクセスするためのいくつかのパラメーターを提供します。特定のメソッドについては、これを確認することもできます。 //mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
接続中 phpコードがいくつかあります参考までに、私のコードを以下に載せておきます。かなり寄り道したので、できるだけ完全に載せてみました
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 }
GetReturn関数を書いた理由はMVCだからです。文字列を返すたびに、WeChat はまだ愚かで、文字列を認識しません。 。 。 。この関数は主に MVC カプセル化を削除するためのものです 1 public static HttpResponseMessage GetReturn(string message)2 {3 return new HttpResponseMessage4 {5 Content = new StringContent(message, Encoding.UTF8, "text/html")6 };7 }
5、メッセージ受信インターフェース ユーザーがメッセージを送信
するとき、私は 1 つの機能だけに注目し、テキスト メッセージだけに注目します。他のタイプのメッセージも同様です)。 a. このインターフェースの ActionName は、上で検証したインターフェースと同じです。このように、外部では同じ URL にアクセスしますが、アクセスされるメソッドは異なります。1 [System.Web.Http.AcceptVerbs("POST")]2 [System.Web.Http.ActionName("Api")]3 [ApiExplorerSettings(IgnoreApi = false)]4 public HttpResponseMessage ReceiveMessage()
1 var message = Request.Content.ReadAsStringAsync().Result;
変数
をPOSTし、私はそれらを取得するために正規表現を使用しました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);
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 }
2. Xiaozhu CMS Lifetong O2O システム v2.0 専用バージョンのダウンロード
以上がWeChat 開発をソース コードから分析します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Linux でカールのバージョンを更新するには、以下の手順に従います。 現在のカールのバージョンを確認します。 まず、現在のシステムにインストールされているカールのバージョンを確認する必要があります。ターミナルを開き、次のコマンドを実行します。curl --version このコマンドは、現在のcurlバージョン情報を表示します。利用可能なcurlのバージョンを確認する:curlを更新する前に、利用可能な最新バージョンを確認する必要があります。 Curl の公式 Web サイト (curl.haxx.se) または関連ソフトウェア ソースにアクセスして、curl の最新バージョンを見つけることができます。 Curl ソース コードをダウンロードする:curl またはブラウザを使用して、選択した CURL バージョンのソース コード ファイル (通常は .tar.gz または .tar.bz2) をダウンロードします。

Linux カーネルは、ソース コードが専用のコード リポジトリに保存されているオープン ソース オペレーティング システム カーネルです。この記事では、Linux カーネル ソース コードのストレージ パスを詳細に分析し、読者の理解を助けるために具体的なコード例を使用します。 1. Linux カーネル ソース コードの保存パス Linux カーネル ソース コードは、[https://github.com/torvalds/linux](http) でホストされている linux という Git リポジトリに保存されます。

表示手順: 1. インストール ディレクトリを見つけるか、オンラインで表示します; 2. ソース コードを解凍します; 3. テキスト エディタまたは統合開発環境を使用します; 4. ソース コードに移動して表示します。詳細な紹介: 1. インストール ディレクトリを見つけるか、オンラインで表示します。JDK がインストールされている場合は、JDK インストール ディレクトリで Java ソース コードを見つけることができます。通常、JDK のインストール ディレクトリには、Java コア クラス ライブラリのソース コードを含む src.zip などの圧縮ファイルが存在し、Java ソース コードをオンラインなどで表示することもできます。

Tomcat ソース コードを表示する手順: 1. Tomcat ソース コードをダウンロードする; 2. Tomcat ソース コードを IDEA にインポートする; 3. ソース コードを表示する; 4. Tomcat の動作原理を理解する; 5. コミュニティに参加して貢献する; 6. 注意事項; 7. 継続的に学習して更新する; 8. ツールとプラグインを使用する。詳細な紹介: 1. Tomcat のソース コードをダウンロードするには、まず Tomcat のソース コードを入手する必要があり、Apache Tomcat の公式 Web サイトなどからソース コード パッケージをダウンロードできます。

PHP は、Web 開発およびサーバーサイド プログラミング、特に WeChat 開発で広く使用されているオープン ソースのスクリプト言語です。現在、ますます多くの企業や開発者が WeChat 開発に PHP を使用し始めています。これは、PHP が本当に学びやすく、使いやすい開発言語となっているためです。 WeChat の開発では、メッセージの暗号化と復号化はデータのセキュリティに関わるため、非常に重要な問題となります。暗号化と復号化の方法を持たないメッセージの場合、ハッカーは簡単にデータを入手でき、ユーザーに脅威を与える可能性があります。

Java では、ソース コード ファイルの接尾辞は通常 .java です。 Java プログラムを作成すると、Java ソース コードを含む .java 接尾辞が付いたソース コード ファイルが作成されます。たとえば、単純な Java ソース コード ファイルには MyClass.java という名前を付けることができます。MyClass はクラス名、.java はファイルの接尾辞です。

これは、Linux カーネルのソース コード配布を詳しく調査した 1500 ワードの記事です。スペースが限られているため、ここでは Linux カーネル ソース コードの組織構造に焦点を当て、読者の理解を深めるためにいくつかの具体的なコード例を示します。 Linux カーネルは、ソース コードが GitHub でホストされているオープン ソース オペレーティング システム カーネルです。 Linux カーネルのソース コード配布全体は非常に大きく、複数の異なるサブシステムとモジュールが関与する数十万行のコードが含まれています。 Linux カーネルのソース コードをより深く理解するには

ソース コードを読んで、最新の PHP コード仕様の背後にある設計原則と目標を理解するにはどうすればよいでしょうか?はじめに: 高品質の PHP コードを作成する場合、特定のコーディング標準に従うことが非常に重要です。コード仕様により、コードの可読性、保守性、拡張性を向上させることができます。 PHP 言語には、PSR (PHPStandardsRecommendations) という広く採用されているコード仕様があります。この記事では、最新のPHPコード仕様のソースコードの見方を紹介します。
