zoukankan      html  css  js  c++  java
  • asp.net C# 实现微信服务器配置

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

             /// <summary>      
            /// 微信的Token      
            /// </summary>      
            const string Token = "Token令牌";
    
            protected void Page_Load(object sender, 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(string weixinXML)
            {
                //回复消息的部分:你的代码写在这里          
                //根据关键词 自定义回复  
                string ToUserName = "";
                string FromUserName = "";
                string CreateTime = "";
                try
                {
                    WriteLog(weixinXML);
                    var xDoc = XDocument.Parse(weixinXML);
                    var q = (from c in xDoc.Elements() select c).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, string MediaId)
            {
                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, string FromUserName)
            {
                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 void Valid()
            {
                //微信服务器配置提交时,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 bool CheckSignature()
            {
                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 string PostInput()
            {
                try
                {
                    System.IO.Stream s = Request.InputStream;
                    int count = 0;
                    byte[] buffer = new byte[s.Length];
                    StringBuilder builder = new StringBuilder();
                    while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        builder.Append(Request.ContentEncoding.GetString(buffer, 0, count));
                    }
                    s.Flush();
                    s.Close();
                    s.Dispose();
                    return builder.ToString();
                }
                catch (Exception ex)
                { throw ex; }
    
            }
    
            /// <summary>      
            /// unix时间转换为datetime      
            /// </summary>      
            /// <param name="timeStamp"></param>      
            /// <returns></returns>
            private DateTime UnixTimeToTime(string timeStamp)
            {
    
                DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                long lTime = long.Parse(timeStamp + "0000000");
                TimeSpan toNow = new TimeSpan(lTime);
                return dtStart.Add(toNow);
            }
    
            /// <summary>      
            /// datetime转换为unixtime      
            /// </summary>      
            /// <param name="time"></param>      
            /// <returns></returns>      
            public static int ConvertDateTimeInt(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(string strMemo)
            {
                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();
                }
            }

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

  • 相关阅读:
    Pikachu漏洞练习平台实验——SQL注入(四)
    ELMO,BERT和GPT简介
    Self-Attention 和 Transformer
    Seq2Seq和Attention机制入门介绍
    循环神经网络(RNN)入门介绍
    XGBoost的推导和说明
    在Azure DevOps Server中运行基于Spring Boot和Consul的微服务项目单元测试
    Azure DevOps Server(TFS) 客户端分析
    传统码头建设企业:Azure DevOps Server 流水线技术沟通
    ItelliJ Idea 2019提交TFVC变更,系统提示Validation must be performed before checking in
  • 原文地址:https://www.cnblogs.com/caiyt/p/5855621.html
Copyright © 2011-2022 走看看