1.到万网申请免费主机
2.登录微信公众平台
安装新手开发说明,一步一步看下去
第一步:填写服务器配置,就是刚才从万网上申请来的
Token自己随便取
为了方便测试加密方式选择明文模式
第二步,验证服务器的地址的有效性
#region 1.0验证消息的真实性 - private void ValidateUrl() private void ValidateUrl() { #region 获取微信服务器Get发送过来的四个参数 //开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数: HttpContext context = HttpContext.Current; //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 string signature = context.Request.QueryString["signature"]; //时间戳 string timestamp = context.Request.QueryString["timestamp"]; //随机数 string nonce = context.Request.QueryString["nonce"]; //随机字符串 string echostr = context.Request.QueryString["echostr"]; #endregion #region 加密/校验来自微信服务器的请求 string token = "Kim2015";//必须跟公共账号上的一致 //1. 将token、timestamp、nonce三个参数进行字典序排序 string[] temp1 = { token, timestamp, nonce }; Array.Sort(temp1); //2. 将三个参数字符串拼接成一个字符串进行sha1加密 string temp2 = string.Join("", temp1); string temp3 = FormsAuthentication.HashPasswordForStoringInConfigFile(temp2, FormsAuthPasswordFormat.SHA1.ToString()); //3. 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容 if (temp3.ToLower().Equals(signature)) { context.Response.Write(echostr); } #endregion
注意验证请求时,http发送的方式是get请求
下面来试试接收文本消息的要求
以及回复文本消息的要求
#region 2.0接收并处理文本信息 - private void HandleTextMsg() private void HandleTextMsg() { #region 接收微信服务器POST发送过来的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> */ HttpContext context = HttpContext.Current; //接收xml数据包 Stream xmlStream = context.Request.InputStream; //构造xml对象 XmlDocument doc = new XmlDocument(); doc.Load(xmlStream); //获取根节点 XmlElement rootElement = doc.DocumentElement; //解析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; #endregion #region 解析xml数据包,并按照一定格式返回 /* <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>" + GetCreateTime() + "</CreateTime>" + "<MsgType><![CDATA[text]]></MsgType>" + "<Content><![CDATA[“很高兴认识你”]]></Content>" + "</xml>"; context.Response.Write(xmlMsg); #endregion } #endregion
该执行文件的PR方法如下:
public void ProcessRequest(HttpContext context) { if (context.Request.HttpMethod.ToLower().Equals("get")) { context.Response.Write(msg); //校验 ValidateUrl(); } else { //当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上 HandleTextMsg(); } }
2.配置微信服务器,配置好之后,按提交,然后按启动
开始测试,测试地址:http://debug.fangbei.org/
总结:其实微信服务器开发,就是在微信端发送到自己的服务器之间,都了一个微信服务器的步骤。处理过程,依旧和http请求一样。
发送报文-处理报文-响应报文