zoukankan      html  css  js  c++  java
  • .NET 微信Token验证和消息接收和回复

    
    
     1  public class wxXmlModel
     2     {
     3         public string ToUserName { get; set; }
     4         public string FromUserName { get; set; }
     5         public string CreateTime { get; set; }
     6         public string MsgType { get; set; }
     7         public string Content { get; set; }
     8         public string MsgId { get; set; }
     9 
    10     }
    
    
    
     1   public string Token = "Token";
     2 
     3         protected void Page_Load(object sender, EventArgs e)
     4         {
     5             string echoStr = Request.QueryString["echoStr"];
     6 
     7 
     8 
     9             if (CheckSignature() && !string.IsNullOrEmpty(echoStr))
    10             {
    11                 Response.Write(echoStr);
    12                 Response.End();
    13             }
    14             else { 
    15                 //如果没有接收到echostr说明不在是使用token验证
    16                 //接收微信发送过来的xml消息并且解析
    17                  Stream requestSream=HttpContext.Current.Request.InputStream;
    18                 byte[] requestByte=new byte[requestSream.Length];
    19                 requestSream.Read(requestByte,0,(int)requestSream.Length);
    20                 string requestStr=Encoding.UTF8.GetString(requestByte);
    21 
    22                 if(!string.IsNullOrEmpty(requestStr))
    23                 {
    24                     //封装请求类
    25                      XmlDocument requestDocXml=new XmlDocument();
    26                     requestDocXml.LoadXml(requestStr);
    27                     XmlElement rootElement=requestDocXml.DocumentElement;
    28                     wxXmlModel wxXmlModel=new wxXmlModel();
    29                     wxXmlModel.ToUserName=rootElement.SelectSingleNode("ToUserName").InnerText;
    30                     wxXmlModel.FromUserName=rootElement.SelectSingleNode("FromUserName").InnerText;
    31                     wxXmlModel.CreateTime=rootElement.SelectSingleNode("CreateTime").InnerText;
    32                     wxXmlModel.MsgType=rootElement.SelectSingleNode("MsgType").InnerText;
    33                     switch(wxXmlModel.MsgType)
    34                     {
    35                         case "text":
    36                             wxXmlModel.Content=rootElement.SelectSingleNode("Content").InnerText;
    37                             break;
    38                         default:
    39                             break;
    40                        
    41                     }
    42                  string      xmlMsg = "<xml>" + "<ToUserName><![CDATA[" + wxXmlModel.FromUserName+ "]]></ToUserName>"
    43                        + "<FromUserName><![CDATA[" + wxXmlModel.ToUserName + "]]></FromUserName>"
    44                        + "<CreateTime>" + DateTime.Now + "</CreateTime>"
    45                        + "<MsgType><![CDATA[text]]></MsgType>"
    46                        + "<Content><![CDATA["+wxXmlModel.Content+"]]></Content>"
    47                        + "</xml>";
    48 
    49                    Response.Write(xmlMsg);
    50                 }
    51             }
    52         }
    53  private bool CheckSignature()
    54         {
    55             string signature = Request.QueryString["signature"];
    56             string timestamp = Request.QueryString["timestamp"];
    57             string nonce = Request.QueryString["nonce"];
    58           
    59             string[] arrTmp = { Token, timestamp, nonce };
    60             Array.Sort(arrTmp);
    61             string tmpStr = string.Join("", arrTmp);
    62             tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
    63             if (tmpStr != null)
    64             {
    65                 tmpStr = tmpStr.ToLower();
    66                 return tmpStr == signature;
    67             }
    68             return false;
    69         }
  • 相关阅读:
    学习完java基础,总结的一些东西,希望大佬们茶余饭后看看,如有错误还请指正
    JDK和JRE的简单概述
    堆排序
    mybatis的一级缓存
    重用执行器和批处理执行器
    JDBC statement和mybatis mapper statement
    深入浅出Mybatis技术原理与实战(杨开振)(带详细书签) PDF 下载 高清 完整版+源码
    mybatis执行器1
    mybatis执行器1---简单描述JDBC
    JDBC不再需要Class.forName()来显式加载jdbc驱动
  • 原文地址:https://www.cnblogs.com/WangJunZzz/p/5483699.html
Copyright © 2011-2022 走看看