ホームページ WeChat アプレット WeChatの開発 WeChat 開発をソース コードから分析します。

WeChat 開発をソース コードから分析します。

May 05, 2017 am 10:49 AM

この2日間、プロジェクトはWeChat上でインターフェースを開く必要があったので、そのプロセスは非常に困難でしたが、結果は理想的でした。次に、WeChatを開発する際に注意する必要があることを紹介します。

1、アカウントの問題

/* まず第一に、パブリックプラットフォームを選択する必要があります(オープンプラットフォームはアプリケーション統合用のようです、私はこれを注意深く勉強していません、誰かが知っていれば幸いです)教えてください), パブリックプラットフォームにアカウントを登録する必要があります。アカウントには個人タイプとエンタープライズタイプの 2 種類があり、個人タイプはサブスクリプションアカウントのみを申請できます。サービス アカウントを取得するユーザーが送ったメッセージに別の内容で返信したら、あとは寝るだけです。 */

開発に携わっている人なら誰でも上記の段落の意味を知っています。今日サブスクリプション アカウントにログインしたところ、サブスクリプション アカウントにも高度な機能があることがわかりました。その時点でのレビューはOK、次の共有を妨げるものではありません。

2、開発モード

サービスアカウントを取得すると、機能に高度な機能があることがわかります(サブスクリプションアカウントには高度な機能オプションはありません)。どの方法をアクティブ化するかを選択できます。現在、開発と編集のために開始できるのは 1 つだけです。

3、サーバーを構成する

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 カプセル化を削除するためのものです

上記の CheckSignature は、主に WeChat サービスを検証するために使用される GET インターフェイスです

もちろん、WeChat が言ったことを注意深く調べれば、それがいつであるかを見つけることもできます。 echoStr を受け取った場合は、追加の検証手順を行わずに直接返しても問題ありません。

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()
ログイン後にコピー

b. 私はこのメッセージコンテンツを取得する方法を見つけるまで長い間研究してきましたが、大変な労力がかかりました。

1   var message = Request.Content.ReadAsStringAsync().Result;
ログイン後にコピー

c. このインターフェイスでは、彼はたくさんの

変数

を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);
ログイン後にコピー
d 私はイベントとテキスト、イベントの2種類のイベント

だけに注目します。誰かのフォローを解除するには、送信されたテキストに対して感謝の意を表明する必要があります。返信の内容を確認する必要があります。

            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         }
ログイン後にコピー
rree
 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. WeChat パブリック アカウント プラットフォームのソース コードのダウンロード

2. Xiaozhu CMS Lifetong O2O システム v2.0 専用バージョンのダウンロード

以上がWeChat 開発をソース コードから分析します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Linux での CURL バージョンの更新に関するチュートリアル! Linux での CURL バージョンの更新に関するチュートリアル! Mar 07, 2024 am 08:30 AM

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

Linux カーネルのソース コードのストレージ パスの分析 Linux カーネルのソース コードのストレージ パスの分析 Mar 14, 2024 am 11:45 AM

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

Javaのソースコードを表示する方法 Javaのソースコードを表示する方法 Dec 27, 2023 pm 04:41 PM

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

Tomcat のソース コードを表示する方法 Tomcat のソース コードを表示する方法 Jan 25, 2024 pm 01:56 PM

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

PHP WeChat 開発: メッセージの暗号化と復号化を実装する方法 PHP WeChat 開発: メッセージの暗号化と復号化を実装する方法 May 13, 2023 am 11:40 AM

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

Javaソースコードの接尾辞は何ですか? Javaソースコードの接尾辞は何ですか? Dec 27, 2023 pm 04:31 PM

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

Linux カーネルのソースコード配布の詳細な調査 Linux カーネルのソースコード配布の詳細な調査 Mar 15, 2024 am 10:21 AM

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

ソース コードを読んで、最新の PHP コード仕様の背後にある設計原則と目標を理解するにはどうすればよいでしょうか? ソース コードを読んで、最新の PHP コード仕様の背後にある設計原則と目標を理解するにはどうすればよいでしょうか? Sep 05, 2023 pm 02:46 PM

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

See all articles