asp.net微信公众平台
来源:互联网 发布:带有知字的诗句 编辑:程序博客网 时间:2024/05/16 11:30
进入微信公众平台网站,这里用测试账号进行演示
点击开发者中心>公众平台测试账号>接口配置信息
在这里输入url和token
测试通过就可以使用填写的url作为服务端来操作了。
下面主要介绍服务端代码
首页代码:
/// <summary> /// IndexHander 的摘要说明 /// </summary> public class IndexHander : IHttpHandler { private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); //http://blueummser-001-site1.site4future.com/IndexHander.ashx public void ProcessRequest(HttpContext context) { Log.Debug("\ncomein"); //由微信服务接收请求,具体处理请求 WeiXinService wxService = new WeiXinService(context.Request); string responseMsg = wxService.Response(); context.Response.Clear(); context.Response.Charset = "UTF-8"; context.Response.Write(responseMsg); context.Response.End(); Log.Debug("responseMsg:" + responseMsg); Log.Debug("comeout\n"); } public bool IsReusable { get { return false; } }Services代码:注:除去token验证之外,所有的请求方式都为post方式,,微信服务器发来的是一串xml字符串,这里将其转换为xml文档
public class WeiXinService { private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly string TOKEN = "bluesummer"; private HttpRequest Request; public WeiXinService(HttpRequest httpRequest) { Request = httpRequest; } public string Response() { string method = Request.HttpMethod.ToUpper(); Log.Debug("method:" + method); //验证签名 if (method == "GET") { bool checkResult = CheckSignature(); Log.Debug("checkResult:" + checkResult); if (checkResult) return Request.QueryString["echostr"]; else return "error"; } //处理消息 if (method == "POST") return ResponseMsg(); else return "无法处理"; } /// <summary> /// 处理请求 /// </summary> /// <returns></returns> private string ResponseMsg() { string requestXml = Common.ReadRequest(this.Request); Log.Debug("requestXml:" + requestXml); IHandler handler = HanderFactory.CreateHander(Common.ConvertXmlStr(requestXml)); if (handler != null) { return handler.HandleRequest(); } return string.Empty; } /// <summary> /// 检查签名 /// </summary> /// <param name="request"></param> /// <returns></returns> private bool CheckSignature() { string signature = this.Request.QueryString["signature"]; string timestamp = this.Request.QueryString["timestamp"]; string nonce = this.Request.QueryString["nonce"]; Log.Debug("signature:" + signature); Log.Debug("timestamp:" + timestamp); Log.Debug("nonce:" + nonce); string[] ArrTmp = { TOKEN, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); if (tmpStr == signature) { return true; } else { return false; } } /// <summary> /// SHA1加密 /// </summary> /// <param name="intput">输入字符串</param> /// <returns>加密后的字符串</returns> public static string SHA1Encrypt(string intput) { byte[] StrRes = Encoding.Default.GetBytes(intput); HashAlgorithm mySHA = new SHA1CryptoServiceProvider(); StrRes = mySHA.ComputeHash(StrRes); StringBuilder EnText = new StringBuilder(); foreach (byte Byte in StrRes) { EnText.AppendFormat("{0:x2}", Byte); } return EnText.ToString(); } }HandlerFactory:主要负责事件和普通文本两种请求的处理
public class HanderFactory { private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static IHandler CreateHander(XmlDocument xmldoc) { XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType"); Log.Debug("MsgType:" + MsgType.InnerText); if (MsgType != null) { switch (MsgType.InnerText.ToLower()) { case "event": return new EventHandler(xmldoc);//事件处理 case "text": return new TextHandler(xmldoc);;//接受文本消息处理 default: break; } } return null; } }附上texthandler代码:
public class TextHandler : IHandler { private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); /// <summary> /// 请求的xml /// </summary> private XmlDocument RequestXml { get; set; } /// <summary> /// 构造函数 /// </summary> /// <param name="requestXml"></param> public TextHandler(XmlDocument xmlDoc) { this.RequestXml = xmlDoc; } /// <summary> /// 处理请求 /// </summary> /// <returns></returns> public string HandleRequest() { Log.Debug("TextHander:HandleRequest"); string response = string.Empty; try { TextMessage tm = TextMessage.LoadFromXml(RequestXml); IReplay replaydemo = new IReplay() { ToUserName = tm.FromUserName, FromUserName = tm.ToUserName, CreateTime = Common.GetNowTime() }; IReplay replay = new TextReplay(replaydemo, "文字格式错误"); ; Log.Debug("TextHander:new TextMessage()ok"); switch (tm.Content) { case "你好": replay = new TextReplay(replaydemo, "你好"); break; case "图文列表": List<NewsItem> list = new List<NewsItem>(); NewsItem item = new NewsItem("title", "descrip", "http://b.hiphotos.baidu.com/image/pic/item/9f510fb30f2442a7f0a17475d243ad4bd01302b6.jpg", "http://www.soso.com/"); NewsItem item2 = new NewsItem("title2", "descrip2", "http://d.hiphotos.baidu.com/image/pic/item/f7246b600c33874438f06f7d530fd9f9d72aa0fe.jpg", "http://www.soso.com/"); list.Add(item); list.Add(item2); replay = new NewsMainReplay(replaydemo, "2", list); break; } Log.Debug("TextHander:new TextReplay()ok"); response = replay.GetReplayXml(); Log.Debug("response:" + response); } catch (Exception e) { Log.Debug("Exception:" + e.Message); } return response; } }回复的文字格式同样要以xml格式回复
public class TextReplay : IReplay { private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public string Content { get; set; } public TextReplay(IReplay replay, string Content) { this.ToUserName = replay.ToUserName; this.FromUserName = replay.FromUserName; this.CreateTime = replay.CreateTime; this.Content = Content; } public override string GetReplayXml() { Log.Debug("come TextReplay GetReplayXml()"); string xmlStr = @"<xml> <ToUserName><![CDATA[{0}]]></ToUserName> <FromUserName><![CDATA[{1}]]></FromUserName> <CreateTime>{2}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> </xml>"; return string.Format(xmlStr, ToUserName, FromUserName, CreateTime, Content); } }
0 0
- asp.net微信公众平台开发
- asp.net微信公众平台开发
- asp.net微信公众平台开发
- asp.net微信公众平台开发
- asp.net微信公众平台
- 微信公众平台接口,asp.net实现
- Asp.net微信公众平台模拟登陆
- 微信公众平台接口,asp.net实现
- 微信公众平台接口,asp.net实现
- 微信公众平台接口,asp.net实现
- asp.net实现微信公众平台接口的调用
- asp.net微信公众平台开发的技术研究
- 微信.NET:开源的ASP.NET微信公众号应用平台 .
- 微微信.NET:开源的ASP.NET微信公众号应用平台
- asp.net 微信公众平台开发(一)公众账号的注册、设置、登录
- asp.net 微信公众平台开发(二)公众账号开发模式
- asp.net微信公众平台开发(3)微信消息封装及反射赋值
- ASP微信公众平台接口开发
- wamp 2.4开启xDebug
- opencv 从原始的图像中找出ROI区域
- 解决easyui-datagrid在IE中无法reload问题
- 第十节 蜂鸣器
- OPENCV249 编译静态库(含CUDA,OPENCL)
- asp.net微信公众平台
- Machine Learning week 7 quiz: programming assignment-Support Vector Machines
- 安卓系统虚拟机原理 -- 初试DVM创建
- IATF信息保障技术框架的核心思想--纵深防护
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 解决无法从windows配置的odbc数据源连接到linux下的TimesTen1122。
- 12月2日,上海Cloud Foundry Summit, Azure Cloud Foundry 团队期待和你见面!
- [Built-in Functions] - O
- solr解决访问安全