asp.net C# 实现微信服务器配置

摘要:
[CDATA[{3}]]˃"+""+"";HttpResponseresp=System.Web.HttpContext.Current.Response;resp.Write;returntrue;}//////消息转发到客服////////////publicstaticboolSendWx{vartextTpl=""+"˂!

微信服务器配置接收页面示例代码

         /// <summary>      
        ///微信的Token      
        /// </summary>      
        const string Token = "Token令牌";
        protected void Page_Load(objectsender, EventArgs e)
        {
            string postStr = "";
            //配置信息,只有在微信做提交配置的时候才会执行。
Valid();
            if (Request.HttpMethod.ToLower() == "post")
            {
                postStr =PostInput();
                if (false == string.IsNullOrEmpty(postStr))
                {
                    ResponseMsg(postStr);
                }
            }     
        }
        /// <summary>      
        ///返回信息结果(微信信息返回)      
        /// </summary>      
        /// <param name="weixinXML"></param>  
        private void ResponseMsg(stringweixinXML)
        {
            //回复消息的部分:你的代码写在这里          
            //根据关键词 自定义回复  
            string ToUserName = "";
            string FromUserName = "";
            string CreateTime = "";
            try
            {
                WriteLog(weixinXML);
                var xDoc =XDocument.Parse(weixinXML);
                var q = (from c in xDoc.Elements() selectc).ToList();
                var msgType = q.Elements("MsgType").First().Value; //获取信息内容的类型
                //按钮事件
                if (0 == string.Compare("event", msgType, true))
                {
                    ToUserName = q.Elements("ToUserName").First().Value;//开发者微信号
                    FromUserName = q.Elements("FromUserName").First().Value;//发送方帐号(一个OpenID)
                    #region 事件
                    string strEvent = "";
                    string strEventKey = "";
                    strEvent = q.Elements("Event").First().Value;
                    CreateTime = q.Elements("CreateTime").First().Value;
                    //单击事件
                    if (strEvent.ToLower() == "click")
                    {
                        //图文推送
                        strEventKey = q.Elements("EventKey").First().Value;
                    }
                    //关注公众号
                    else if (strEvent.ToLower() == "subscribe")
                    {
                        strEventKey = q.Elements("EventKey").First().Value;
                        //未关注扫描带参数的二维码
                        if (strEventKey.Contains("qrscene_"))
                        {
                            string vaule = strEventKey.Replace("qrscene_", "");
                        }
                    }
                    //已关注扫描带参数的二维码
                    else if (strEvent.ToLower() == "scan")
                    {
                        strEventKey = q.Elements("EventKey").First().Value;
                    }
                    #endregion
                }
                //用户文本信息
                else if (0 == string.Compare("text", msgType, true))
                {
                }
            }
            catch(Exception ex)
            {
                WriteLog(ex.ToString());
            }
            Response.End();
        }
        /// <summary>
        ///图片消息
        /// </summary>
        /// <param name="ToUsername"></param>
        /// <param name="FromUserName"></param>
        /// <returns></returns>
        public static bool SendWxPic(string ToUsername, string FromUserName, stringMediaId)
        {
            var textTpl = "<xml>"
                + "<ToUserName><![CDATA[{0}]]></ToUserName>"
                + "<FromUserName><![CDATA[{1}]]></FromUserName>"
                + "<CreateTime>{2}</CreateTime>"
                + "<MsgType><![CDATA[image]]></MsgType>"
                +"<Image>"
                +"<MediaId><![CDATA[{3}]]></MediaId>"
                +"</Image>"
                + "</xml>";
            HttpResponse resp =System.Web.HttpContext.Current.Response;
            resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now), MediaId));
            return true;
        }
        /// <summary>
        ///消息转发到客服
        /// </summary>
        /// <param name="ToUsername"></param>
        /// <param name="FromUserName"></param>
        /// <returns></returns>
        public static bool SendWx(string ToUsername, stringFromUserName)
        {
            var textTpl = "<xml>"
                + "<ToUserName><![CDATA[{0}]]></ToUserName>"
                + "<FromUserName><![CDATA[{1}]]></FromUserName>"
                + "<CreateTime>{2}</CreateTime>"
                + "<MsgType><![CDATA[transfer_customer_service]]></MsgType>"
                + "</xml>";
            HttpResponse resp =System.Web.HttpContext.Current.Response;
            resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now)));
            return true;
        }
        /// <summary>
        ///回复文本消息
        /// </summary>
        /// <param name="ToUsername"></param>
        /// <param name="FromUserName"></param>
        /// <param name="_tmpContent"></param>
        /// <returns></returns>
        public static bool SendWx(string ToUsername, string FromUserName, string_tmpContent)
        {
            var textTpl = "<xml>"
                + "<ToUserName><![CDATA[{0}]]></ToUserName>"
                + "<FromUserName><![CDATA[{1}]]></FromUserName>"
                + "<CreateTime>{2}</CreateTime>"
                + "<MsgType><![CDATA[{3}]]></MsgType>"
                + "<Content><![CDATA[{4}]]></Content>"
                + "</xml>";
            //_tmpContent = "你已经选择了明细,谢谢!";
            HttpResponse resp =System.Web.HttpContext.Current.Response;
            resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now), "text", _tmpContent));
            return true;
        }
        /// <summary>
        ///检验signature
        /// </summary>
        private voidValid()
        {
            //微信服务器配置提交时,echoStr才不为空。
            string echoStr = Request.QueryString["echoStr"];
            if (echoStr != null)
            {
                if(CheckSignature())
                {
                    if (!string.IsNullOrEmpty(echoStr))
                    {
                        Response.Write(echoStr); Response.End();
                    }
                }
            }
        }
        /// <summary>      
        ///验证微信签名      
        /// </summary>      
        ///* 将token、timestamp、nonce三个参数进行字典序排序      
        ///* 将三个参数字符串拼接成一个字符串进行sha1加密      
        ///* 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。      
        /// <returns></returns>  
        private boolCheckSignature()
        {
            string signature = Request.QueryString["signature"].ToString();
            string timestamp = Request.QueryString["timestamp"].ToString();
            string nonce = Request.QueryString["nonce"].ToString();
            string[] ArrTmp ={ Token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序          
            string tmpStr = string.Join("", ArrTmp);
            tmpStr =Cryptography.SHA1_Hash(tmpStr);
            tmpStr =tmpStr.ToLower();
            if (tmpStr ==signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>      
        ///获取POST返回来的数据      
        /// </summary>      
        /// <returns></returns>
        private stringPostInput()
        {
            try
            {
                System.IO.Stream s =Request.InputStream;
                int count = 0;
                byte[] buffer = new byte[s.Length];
                StringBuilder builder = newStringBuilder();
                while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
                {
                    builder.Append(Request.ContentEncoding.GetString(buffer, 0, count));
                }
                s.Flush();
                s.Close();
                s.Dispose();
                returnbuilder.ToString();
            }
            catch(Exception ex)
            { throwex; }
        }
        /// <summary>      
        ///unix时间转换为datetime      
        /// </summary>      
        /// <param name="timeStamp"></param>      
        /// <returns></returns>
        private DateTime UnixTimeToTime(stringtimeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = newTimeSpan(lTime);
            returndtStart.Add(toNow);
        }
        /// <summary>      
        ///datetime转换为unixtime      
        /// </summary>      
        /// <param name="time"></param>      
        /// <returns></returns>      
        public static intConvertDateTimeInt(System.DateTime time)
        {
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
            return (int)(time -startTime).TotalSeconds;
        }
        /// <summary>      
        ///写日志(用于跟踪)      
        /// </summary>      
        private void WriteLog(stringstrMemo)
        {
            string filename = Server.MapPath("~/logs/log.txt");
            if (!Directory.Exists(Server.MapPath("//logs//")))
                Directory.CreateDirectory(Server.MapPath("//logs//"));
            StreamWriter sr = null;
            try
            {
                if (!File.Exists(filename))
                {
                    sr =File.CreateText(filename);
                }
                else
                {
                    sr =File.AppendText(filename);
                }
                sr.WriteLine(strMemo);
            }
            catch
            {
            }
            finally
            {
                if (sr != null)
                    sr.Close();
            }
        }

以上代码是公司要做微信一些功能做的代码总结,网上找的时候感觉代码虽然封装的很好。但是要用麻烦。觉得没必要封装的那么简洁。如果需要封装,自己在去封装。

免责声明:文章转载自《asp.net C# 实现微信服务器配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇未能加载文件或程序集“log4net,Vue 1-- ES6 快速入门、vue的基本语法、vue应用示例,vue基础语法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

webapi获取请求地址的IP

using System.Net.Http; public static class HttpRequestMessageExtensions { private const string HttpContext = "MS_HttpContext"; private const string RemoteEndpointMessa...

获取Android设备唯一标识码

概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码。虽然Android系统中提供了这样设备识别码,但是由于Android系统版本、厂商定制系统中的Bug等限制,稳定性和唯一性并不理想。而通过其他硬件信息标识也因为系统版本、手机硬件等限制存在不同程度的问题。 下面收集了一些“有能力”或“有一定能力”作为设备标识的串码。 DE...

【Android】是时候为你的应用加上WebDav同步了

WebDav是什么? WebDAV (Web-based Distributed Authoring and Versioning) 一种基于HTTP1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(...

Java Servlet 中文API说明

JavaServlet中文API说明 这份文档描述了Java Servlet API的最新版本2.1版。所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。 Java Servlet API的组成 Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时...

Kotlin入门(14)继承的那些事儿

上一篇文章介绍了类对成员的声明方式与使用过程,从而初步了解了类的成员及其运用。不过早在《Kotlin入门(12)类的概貌与构造》中,提到MainActivity继承自AppCompatActivity,而Kotlin对于类继承的写法是“class MainActivity : AppCompatActivity() {}”,这跟Java对比有明显差异,那么...

windows下安装配置phpjavabridge,PHP调用自己的JAVA文件

方法一:(推荐方法 ) 使用php/java桥 JavaBridge.jar  转自:http://zhengdl126.iteye.com/blog/418574http://sourceforge.net/projects/php-java-bridge http://mirror.optus.net/sourceforge/p/ph/php-java...