ホームページ  >  記事  >  WeChat アプレット  >  C# は WeChat 開発へのプレリュードを実装します

C# は WeChat 開発へのプレリュードを実装します

高洛峰
高洛峰オリジナル
2017-02-13 11:13:091661ブラウズ

くだらない話はしたくないので、とにかく書いてください!エッセイを書くのはあなたに任されているので、マスターはそれを見て文句を言わないでください...

1. WeChatの公開アカウントが必要です

2. WeChatのテストアカウントを申請することもできます。リンクは http://mp.weixin にあります。qq.com/debug/cgi-bin/sandbox?t=sandbox/login

その後、mvc を数回クリックするだけで作成できます。自分のためにやれ。これはナンセンスではありません

次に、一般的な処理プログラムを作成する必要があります。適当に名前を付けます。テストに合格することが重要です。急いでください...

/// <summary>
        /// 验证微信签名        
        /// </summary>
        /// <returns></returns>
        /// * 将token、timestamp、nonce三个参数进行字典序排序        
        /// * 将三个参数字符串拼接成一个字符串进行sha1加密        
        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
        private bool CheckSignature()
        {            var token = "token"; 
            var signature = HttpContext.Current.Request.QueryString["signature"];            var timestamp = HttpContext.Current.Request.QueryString["timestamp"];            var nonce = HttpContext.Current.Request.QueryString["nonce"];            var echostr = HttpContext.Current.Request.QueryString["echostr"];            string[] ArrTmp = { token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            var tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//加密方式            if (tmpStr.ToLower() == signature)
            {                return true;
            }            return false;
        }

このコードは、[開発コード]と同等です。 ] WeChat 公式アカウントで -- 》[基本構成] 書き込んだトークンは 1 対 1 のトークン通信ハンドシェイクであり、相互に通信できれば完了です。

完成は後のことです。まだやるべき仕事があるので、消去して書き続けてください。

どうやって設定するのですか? これが問題です。少なくとも、長時間プレイした後に動作するかどうかを確認する必要があります。

下の写真を見てください: 左側はピーナッツシェルの構成 ----- 右側はバインディングを公開している iis Web サイト

C#实现微信开发前奏

この図を見れば、次のステップのプレイ方法がわかります。ローカル iis にはドメイン名が付いています。これは本当に素晴らしいです...

以下。コードを追加していきます。送信テストと自動返信テストを設定して、再生できるかどうかを確認します

 #region 接收消息        /// <summary>
        /// 接收微信发送的XML消息并且解析        /// </summary>
        private void ReceiveXml()
        {            var requestStream = HttpContext.Current.Request.InputStream;            var requestByte = new byte[requestStream.Length];
            requestStream.Read(requestByte, 0, (int)requestStream.Length);            var requestStr = Encoding.UTF8.GetString(requestByte);            if (!string.IsNullOrEmpty(requestStr))
            {                //封装请求类
                var requestDocXml = new XmlDocument();
                requestDocXml.LoadXml(requestStr);                var rootElement = requestDocXml.DocumentElement;                if (rootElement == null) return;                var wxXmlModel = new WxXmlModel
                {
                    ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                    FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                    CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                    MsgType = rootElement.SelectSingleNode("MsgType").InnerText
                };                switch (wxXmlModel.MsgType)
                {                    case "text"://文本
                        wxXmlModel.Content = rootElement.SelectSingleNode("Content").InnerText;                        break;                    case "image"://图片
                        wxXmlModel.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;                        break;                    case "event"://事件
                        wxXmlModel.Event = rootElement.SelectSingleNode("Event").InnerText;                        if (wxXmlModel.Event != "TEMPLATESENDJOBFINISH")//关注类型                        {
                            wxXmlModel.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;
                        }                        break;                    default:                        break;
                }

                ResponseXML(wxXmlModel);//回复消息            }
        }        #endregion

        #region 回复消息        private void ResponseXML(WxXmlModel WxXmlModel)
        {            var QrCodeApi = new QrCodeApi();            var XML = "";            switch (WxXmlModel.MsgType)
            {                case "text"://文本回复
                    XML = ResponseMessage.GetText(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.Content);                    break;                case "event":                    switch (WxXmlModel.Event)
                    {                        case "subscribe":                            if (string.IsNullOrEmpty(WxXmlModel.EventKey))
                            {
                                XML = ResponseMessage.GetText(WxXmlModel.FromUserName, WxXmlModel.ToUserName, "关注成功");
                            }                            else
                            {
                                XML = ResponseMessage.SubScanQrcode(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.EventKey);//扫描带参数二维码先关注后推送事件                            }                            break;                        case "SCAN":
                            XML = ResponseMessage.ScanQrcode(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.EventKey);//扫描带参数二维码已关注 直接推送事件
                            break;
                    }                    break;                default://默认回复
                    break;
            }
            HttpContext.Current.Response.Write(XML);
            HttpContext.Current.Response.End();
        }        #endregion

上の 1 つは送信中、もう 1 つは受信中、またはまだ WhApi.ashx ハンドラー ファイル内にあります。はっきりさせておきたいのですが(笑)!

公開プラットフォームとのハンドシェイクが成功したので、何か送信してみてくださいね~~

下の図は受信方法と自動マッチング返信ファイルの関連付けを示していますので、心配しないでください。以下のファイルです!

C#实现微信开发前奏

不足している設定がまだ 1 つあります。それは、[デバッグ] ---- [プロセスにアタッチ] を設定することです。以下の [すべてのユーザー プロセスを表示] オプションをチェックするだけで、次のことが可能になります。このようなプロセスが複数ある場合は、[ユーザー名] 列を確認し、プログラム プールと同じ名前のプロセスを選択し、[OK] をクリックして、[添付] をクリックして、添付ファイルを確認する必要があります。

次。楽しいです…………………………………………………………

WeChat のテスト公開アカウントをスキャンし、カスタム メッセージを送信して、どのような返信があるかを確認してください。設定ではデバッグ用のブレークポイントを追加できますが、そうでない場合は、送信と受信が自分の設定と一致していることを確認するだけで大​​丈夫です。

以上……終わりました。

WeChat 開発の C# 実装の序文と関連記事の詳細については、PHP 中国語 Web サイトに注目してください。

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