Heim  >  Artikel  >  WeChat-Applet  >  C# implementiert den Auftakt zur WeChat-Entwicklung

C# implementiert den Auftakt zur WeChat-Entwicklung

高洛峰
高洛峰Original
2017-02-13 11:13:091747Durchsuche

Ich will keinen Unsinn reden, schreib ihn einfach! Weil es Ihnen überlassen bleibt, Aufsätze zu schreiben, also beschweren Sie sich bitte nicht, wenn Sie es sehen...

1. Sie müssen über ein öffentliches WeChat-Konto verfügen

2. Das können Sie Beantragen Sie auch ein WeChat-Testkonto. Der Link wird Ihnen angezeigt http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

Dann erstellen Sie MVC , Sie müssen nur ein paar Mal klicken und vs erledigt das für Sie. Das ist kein Unsinn

Als nächstes müssen Sie einen allgemeinen Handler erstellen, ihm beiläufig einen Namen geben, das Bestehen des Tests ist der Schlüssel, beeilen Sie sich ...

/// <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;
        }

Dieser Code entspricht einem Eins-zu-eins-Token-Kommunikations-Handshake mit dem Token, den Sie in [Entwicklung] – „[Grundkonfiguration] des offiziellen WeChat-Kontos geschrieben haben. Solange sie kommunizieren miteinander, dann bist du fertig!

Es ist etwas, das später erledigt werden muss, es gibt noch viel zu tun, wischen Sie es ab und schreiben Sie weiter!

Wie konfiguriere ich es? Ich kann es nur mit Erdnussschalen testen, nachdem ich es lange gespielt habe.

Sehen Sie sich das Bild unten an: Erdnussschalenkonfiguration links ----- iis-Website-Publishing-Bindung rechts

C#实现微信开发前奏

Nachdem Sie dieses Bild gesehen haben, werden Sie verstehen, wie der nächste Schritt ausgeführt wird. Der lokale IIS ist mit einem Domänennamen ausgestattet. Das ist so großartig...

unten. Wir fügen Code hinzu. Richten Sie Sende- und automatische Antworttests ein und prüfen Sie, ob Sie

 #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

spielen können. Das obige sendet und das andere empfängt, immer noch im WhApi. Ashx-Handler-Datei. Ich möchte es nur klarstellen, haha!

Da Ihr Handshake mit der öffentlichen Plattform erfolgreich war, müssen Sie etwas zum Ausprobieren senden, richtig~~

Das Bild unten zeigt die Zuordnung zwischen einer Empfangsmethode und einer automatisch passenden Antwortdatei I werde diese Datei bald hochladen!

C#实现微信开发前奏

Es fehlt noch eine Konfiguration, nämlich die Einstellung [Debug] ---- [An Prozess anhängen] für vs, nur für Sie Sie müssen Folgendes ändern: [Alle anzeigen Wenn Sie ein Element unter „Benutzerprozess“ markieren, finden Sie w3wp.exe. Wenn es mehrere solcher Prozesse gibt, müssen Sie noch die Spalte „Benutzername“ bestätigen und den mit demselben auswählen Geben Sie den Namen als Ihren Programmpool ein, klicken Sie auf „OK“, klicken Sie auf „Anhängen“ und dann auf „Angehängt!“.

Weiter. Es macht Spaß…………………………………………………………………

Scannen Sie das öffentliche Testkonto auf WeChat und senden Sie eine individuelle Nachricht, um zu sehen, welche Antworten es gibt Es gibt sie, die obige mühsame Konfiguration kann durch Hinzufügen von Haltepunkten debuggt werden, sonst macht es keinen Sinn, so viel zu tun, oder? Stellen Sie einfach sicher, dass das Senden und Empfangen mit Ihren eigenen Einstellungen übereinstimmt, dann ist es in Ordnung.

Das ist es......es ist fertig.

Weitere C#-Implementierungen des WeChat-Entwicklungsvorspiels und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn