• 微信公共账号代码(简单版)


      1 using System;
      2 using System.IO;
      3 using System.Text;
      4 using System.Web;
      5 using System.Web.Security;
      6 using System.Xml;
      7 
      8 namespace WebWeiXin
      9 {
     10     public partial class weixinmsgread : System.Web.UI.Page
     11     {
     12 
     13         const string Token = "king";        //与那边填写的token一致
     14         protected void Page_Load(object sender, EventArgs e)
     15         {
     16             string postStr = "";
     17             if (Request.HttpMethod.ToLower() == "post")
     18             {
     19                 Stream s = HttpContext.Current.Request.InputStream;
     20                 byte[] b = new byte[s.Length];
     21                 s.Read(b, 0, (int)s.Length);
     22                 postStr = Encoding.UTF8.GetString(b);
     23                 WriteTxt(postStr);
     24 
     25                 if (!string.IsNullOrEmpty(postStr))
     26                 {
     27                     try
     28                     {
     29 
     30 
     31                         //封装请求类  
     32                         XmlDocument doc = new XmlDocument();
     33                         doc.LoadXml(postStr);
     34                         XmlElement rootElement = doc.DocumentElement;
     35 
     36                         XmlNode MsgType = rootElement.SelectSingleNode("MsgType");
     37 
     38                         RequestXML requestXML = new RequestXML();
     39                         requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
     40                         requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
     41                         requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
     42                         requestXML.MsgType = MsgType.InnerText;
     43 
     44                         if (requestXML.MsgType == "text")
     45                         {
     46                             requestXML.Content = rootElement.SelectSingleNode("Content").InnerText;
     47                         }
     48                         else if (requestXML.MsgType == "location")
     49                         {
     50                             requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;
     51                             requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;
     52                             requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
     53                             requestXML.Label = rootElement.SelectSingleNode("Label").InnerText;
     54                         }
     55                         else if (requestXML.MsgType == "image")
     56                         {
     57                             requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;
     58                         }
     59 
     60                         PrintMsg(requestXML);
     61                     }
     62                     catch (Exception ex)
     63                     {
     64                         WriteTxt(ex + "");
     65                         //throw;
     66                     }
     67                 }
     68             }
     69             else
     70             {
     71                 Valid();
     72             }
     73         }
     74 
     75         private void PrintMsg(RequestXML requestXML)
     76         {
     77             string resMsg;
     78             string resxml;
     79             switch (requestXML.MsgType)
     80             {
     81                 case "text":
     82                     resMsg = "您输入的是:" + requestXML.Content;
     83                     break;
     84                 case "location":
     85                     resMsg = "您输入的是:" + requestXML.Location_X + "," + requestXML.Location_Y;
     86                     break;
     87                 case "image":
     88                     resMsg = "您输入的是:" + requestXML.PicUrl;
     89                     break;
     90                 default:
     91                     resMsg = "<![CDATA[正在建设中,稍等时日,更多精彩……]]>";
     92                     break;
     93             }
     94 
     95             resxml = "<xml><ToUserName><![CDATA[" + requestXML.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" +
     96                      requestXML.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) +
     97                      "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content>"
     98                      + resMsg
     99                      + "</Content><FuncFlag>0</FuncFlag></xml>";
    100             WriteTxt(resxml);
    101             Response.Write(resxml);
    102         }
    103 
    104         /// <summary>
    105         /// 验证微信签名
    106         /// </summary>
    107         /// * 将token、timestamp、nonce三个参数进行字典序排序
    108         /// * 将三个参数字符串拼接成一个字符串进行sha1加密
    109         /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
    110         /// <returns></returns>
    111         private bool CheckSignature()
    112         {
    113             string signature = Request.QueryString["signature"];
    114             string timestamp = Request.QueryString["timestamp"];
    115             string nonce = Request.QueryString["nonce"];
    116             string[] ArrTmp = { Token, timestamp, nonce };
    117             Array.Sort(ArrTmp);     //字典排序
    118             string tmpStr = string.Join("", ArrTmp);
    119             tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
    120             tmpStr = tmpStr.ToLower();
    121 
    122             if (tmpStr == signature)
    123             {
    124                 return true;
    125             }
    126             else
    127             {
    128                 return false;
    129             }
    130         }
    131 
    132         private void Valid()
    133         {
    134             string echoStr = Request.QueryString["echoStr"];
    135             if (CheckSignature())
    136             {
    137                 if (!string.IsNullOrEmpty(echoStr))
    138                 {
    139                     Response.Write(echoStr);
    140                     Response.End();
    141                 }
    142             }
    143         }
    144 
    145 
    146 
    147         /// <summary>
    148         /// unix时间转换为datetime
    149         /// </summary>
    150         /// <param name="timeStamp"></param>
    151         /// <returns></returns>
    152         private DateTime UnixTimeToTime(string timeStamp)
    153         {
    154             DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
    155             long lTime = long.Parse(timeStamp + "0000000");
    156             TimeSpan toNow = new TimeSpan(lTime);
    157             return dtStart.Add(toNow);
    158         }
    159 
    160         /// <summary>
    161         /// datetime转换为unixtime
    162         /// </summary>
    163         /// <param name="time"></param>
    164         /// <returns></returns>
    165         private int ConvertDateTimeInt(System.DateTime time)
    166         {
    167             System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
    168             return (int)(time - startTime).TotalSeconds;
    169         }
    170 
    171         /// <summary>
    172         /// 记录bug,以便调试
    173         /// </summary>
    174         /// <returns></returns>
    175         public bool WriteTxt(string str)
    176         {
    177             try
    178             {
    179                 FileStream fs = new FileStream(Server.MapPath("/bugLog.txt"), FileMode.Append);
    180                 StreamWriter sw = new StreamWriter(fs);
    181                 //开始写入
    182                 sw.WriteLine(str);
    183                 //清空缓冲区
    184                 sw.Flush();
    185                 //关闭流
    186                 sw.Close();
    187                 fs.Close();
    188             }
    189             catch (Exception)
    190             {
    191                 return false;
    192             }
    193             return true;
    194         }
    195 
    196 
    197 
    198 
    199 
    200 
    201     }
    202 
    203     //微信请求类
    204     public class RequestXML
    205     {
    206         private string toUserName;
    207         /// <summary>
    208         /// 消息接收方微信号,一般为公众平台账号微信号
    209         /// </summary>
    210         public string ToUserName
    211         {
    212             get { return toUserName; }
    213             set { toUserName = value; }
    214         }
    215 
    216         private string fromUserName;
    217         /// <summary>
    218         /// 消息发送方微信号
    219         /// </summary>
    220         public string FromUserName
    221         {
    222             get { return fromUserName; }
    223             set { fromUserName = value; }
    224         }
    225 
    226         private string createTime;
    227         /// <summary>
    228         /// 创建时间
    229         /// </summary>
    230         public string CreateTime
    231         {
    232             get { return createTime; }
    233             set { createTime = value; }
    234         }
    235 
    236         private string msgType;
    237         /// <summary>
    238         /// 信息类型 地理位置:location,文本消息:text,消息类型:image
    239         /// </summary>
    240         public string MsgType
    241         {
    242             get { return msgType; }
    243             set { msgType = value; }
    244         }
    245 
    246         private string content;
    247         /// <summary>
    248         /// 信息内容
    249         /// </summary>
    250         public string Content
    251         {
    252             get { return content; }
    253             set { content = value; }
    254         }
    255 
    256         private string location_X;
    257         /// <summary>
    258         /// 地理位置纬度
    259         /// </summary>
    260         public string Location_X
    261         {
    262             get { return location_X; }
    263             set { location_X = value; }
    264         }
    265 
    266         private string location_Y;
    267         /// <summary>
    268         /// 地理位置经度
    269         /// </summary>
    270         public string Location_Y
    271         {
    272             get { return location_Y; }
    273             set { location_Y = value; }
    274         }
    275 
    276         private string scale;
    277         /// <summary>
    278         /// 地图缩放大小
    279         /// </summary>
    280         public string Scale
    281         {
    282             get { return scale; }
    283             set { scale = value; }
    284         }
    285 
    286         private string label;
    287         /// <summary>
    288         /// 地理位置信息
    289         /// </summary>
    290         public string Label
    291         {
    292             get { return label; }
    293             set { label = value; }
    294         }
    295 
    296         private string picUrl;
    297         /// <summary>
    298         /// 图片链接,开发者可以用HTTP GET获取
    299         /// </summary>
    300         public string PicUrl
    301         {
    302             get { return picUrl; }
    303             set { picUrl = value; }
    304         }
    305     }
    306 }

    个人小站 欢迎来踩 http://bbsspace.net/

  • 相关阅读:
    python 面向对象编程
    用python写个快排
    函数(参数,作用域,返回函数,匿名函数,偏函数)
    SpringBoot学习4:springboot整合listener
    SpringBoot学习1:创建第一个SpringBoot项目
    SpringBoot学习2:springboot整合servlet
    SpringBoot学习3:springboot整合filter
    使用FreeMarker导出word文档(支持导出图片)
    MySQL中实现递归查询
    MySQL中find_in_set()函数的使用
  • 原文地址:https://www.cnblogs.com/jzb-dev/p/3458769.html
Copyright © 2020-2023  润新知