首页 > 技术文章 > C#微信开发回复信息

qishun 2016-08-09 23:17 原文

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Xml;


namespace ITCastWeiXin_demo
{
    /// <summary>
    /// weixin 的摘要说明
    /// </summary>
    public class weixin : IHttpHandler
    {
        //private static string msg;
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            if (context.Request.HttpMethod.ToLower().Equals("get"))
            {
                //context.Response.Write(msg);
                //校验url
                ValidateUrl();
            }
            else
            {
                //接收并响应
                HandleMsg();
            }
        }


        private void HandleMsg()
        {
            /*ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型*/
            HttpContext context = HttpContext.Current;
            //接收xml数据包
            Stream xmlStream = context.Request.InputStream;
            //构造xml对象
            XmlDocument doc = new XmlDocument();
            doc.Load(xmlStream);
            XmlElement rootElement = doc.DocumentElement;//获取根节点
            //接收xml
            /*<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>
             */
            //解析xml数据
            string toUserName = rootElement.SelectSingleNode("ToUserName").InnerText;
            string fromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
            string createTime = rootElement.SelectSingleNode("CreateTime").InnerText;
            string msgType = rootElement.SelectSingleNode("MsgType").InnerText;
            string content = rootElement.SelectSingleNode("Content").InnerText;
            string msgId = rootElement.SelectSingleNode("MsgId").InnerText;
            //msg = string.Format("{0}-{1}-{2}-{3}",toUserName,fromUserName,msgType,content);
            //响应
            /*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[郑州网站建设]]></Content>
</xml>
             */
            string xmlMsg = "<xml>" +
            "<ToUserName><![CDATA["+fromUserName+"]]></ToUserName>" +
            "<FromUserName><![CDATA["+toUserName+"]]></FromUserName>" +
            "<CreateTime>12345678</CreateTime>" +
            "<MsgType><![CDATA[text]]></MsgType>" +
            "<Content><![CDATA[郑州网站建设]]></Content>" +
            "</xml>";
            context.Response.Write(xmlMsg);
            sendMsgToManage(fromUserName, content);//把用户发送的消息发送给管理员
        }
        private int GetCreateTime()
        {
            DateTime startDate = new DateTime(1970,1,1,8,0,0);
            return (int)(DateTime.Now - startDate).TotalSeconds;
        }
        private void ValidateUrl()
        {
            /*signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串*/
            //接收请求过来的参数
            HttpContext context = HttpContext.Current;
            string signature = context.Request["signature"];
            string timestamp = context.Request["timestamp"];
            string nonce = context.Request["nonce"];
            string echostr = context.Request["echostr"];
            string token = "weixin";
            string[] str1 = { token, timestamp, nonce };
            Array.Sort(str1);
            string str2 = string.Join("", str1);
            //加密
            string str3 = FormsAuthentication.HashPasswordForStoringInConfigFile(str2, "SHA1");
            if (str3.ToLower().Equals(signature))
            {
                context.Response.Write(echostr);
            }
        }
        private void sendMsgToManage(string toUserName,string content)
        {
            string managerweixinid = "wuchangjian001";
            string xmlMsg = "<xml>" +
            "<ToUserName><![CDATA[" + managerweixinid + "]]></ToUserName>" +
            "<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
            "<CreateTime>12345678</CreateTime>" +
            "<MsgType><![CDATA[text]]></MsgType>" +
            "<Content><![CDATA["+content+"]]></Content>" +
            "</xml>";
            HttpContext context = HttpContext.Current;
            context.Response.Write(xmlMsg);
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

推荐阅读