C# 微信服务号开发基础 完整代码
来源:互联网 发布:比特币矿池源码 编辑:程序博客网 时间:2024/05/16 05:16
C# 微信服务号开发基础 完整代码
作为一个新手,开发微信公众号各种不知道、各种无从下手。很希望能找到一个连引用命名空间都有的完整代码的demo拿来就用。经过两天辛苦的查阅,总结如下代码,直接可用,没有什么自定义基类,也没有需要隐藏的部分。代码中有注释,请童鞋边看边操作。
新建一个一般处理程序,粘到里面就好。只有简单的类型判断自动回复。
代码块:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Xml;using System.Web.Security;using System.IO;using System.Text;namespace BigDataMedia.Web.WeiXin{ /// <summary> /// WeixinApi 测试所用,简单判断类型自动回复。 /// </summary> //post请求 public class WeixinApi : IHttpHandler { public void ProcessRequest(HttpContext context) { weixin wx = new weixin(); String postStr = String.Empty; if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST") { Stream s = HttpContext.Current.Request.InputStream; Byte[] b = new Byte[s.Length]; s.Read(b, 0, (Int32)s.Length); postStr = Encoding.UTF8.GetString(b); if (!String.IsNullOrEmpty(postStr)) { wx.Handle(postStr); } } else { wx.Auth(); } } public bool IsReusable { get { return false; } } } //验证token public class weixin { private String Token = "你的token"; public void Auth() { String echoStr = HttpContext.Current.Request.QueryString["echoStr"]; if (CheckSignature()) { if (!String.IsNullOrEmpty(echoStr)) { HttpContext.Current.Response.Write(echoStr); HttpContext.Current.Response.End(); } } } //验证微信签名 private bool CheckSignature() { String signature = HttpContext.Current.Request.QueryString["signature"]; String timestamp = HttpContext.Current.Request.QueryString["timestamp"]; String nonce = HttpContext.Current.Request.QueryString["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; } } //判断回复类型 public void Handle(String postStr) { XmlDocument doc = new XmlDocument(); doc.LoadXml(postStr); XmlElement rootElement = doc.DocumentElement; XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); RequestXML requestXML = new RequestXML(); requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText; requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText; requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText; requestXML.MsgType = MsgType.InnerText; if (requestXML.MsgType == "text") { requestXML.Content = rootElement.SelectSingleNode("Content").InnerText; } else if (requestXML.MsgType == "location") { requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText; requestXML.MapInfo = rootElement.SelectSingleNode("Label").InnerText; } else if (requestXML.MsgType == "image") { requestXML.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; } ResponseMsg(requestXML); } /// <summary> /// 回复消息 /// </summary> /// <param name="weixinXML"></param> private void ResponseMsg(RequestXML requestXML) { String responseContent = String.Empty; if (requestXML.MsgType == "text") { responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "已收到消息!"); } else if (requestXML.MsgType == "location") { responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName, "已知道您的位置!"); } else if (requestXML.MsgType == "image") { responseContent = FormatTextXML(requestXML.FromUserName,requestXML.ToUserName,"图片已接收!"); } HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.Write(responseContent); } //返回格式化文本XML内容 private String FormatTextXML(String fromUserName, String toUserName, String content) { return "<xml><ToUserName><![CDATA[" + fromUserName + "]]></ToUserName><FromUserName><![CDATA[" + toUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + content + "]]></Content><FuncFlag>1</FuncFlag></xml>"; } private int ConvertDateTimeInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; } } //微信请求类 public class RequestXML { private String toUserName = String.Empty; /// <summary> /// 公众号 /// </summary> public String ToUserName { set;get; } private String fromUserName = ""; /// <summary> /// 发送方微信号 /// </summary> public String FromUserName { set;get; } private String createTime = String.Empty; /// <summary> /// 创建时间 /// </summary> public String CreateTime { set;get; } private String msgType = String.Empty; /// <summary> /// 信息类型 地理位置:location,文本消息:text,消息类型:image /// </summary> public String MsgType { set;get; } private String content = String.Empty; /// <summary> /// 信息内容 /// </summary> public String Content { set;get; } private String location_X = String.Empty; /// <summary> /// 地理位置纬度 /// </summary> public String Location_X { set;get; } private String location_Y = String.Empty; /// <summary> /// 地理位置经度 /// </summary> public String Location_Y { set;get; } private String scale = String.Empty; /// <summary> /// 地图缩放大小 /// </summary> public String Scale { set;get; } private String mapInfo = String.Empty; /// <summary> /// 地理位置信息 /// </summary> public String MapInfo { set;get; } private String picUrl = String.Empty; /// <summary> /// 图片链接 /// </summary> public String PicUrl { set;get; } }}
由于本人也是一个新手,不喜勿喷。欢迎一些有经验的前辈来指教。
0 0
- C# 微信服务号开发基础 完整代码
- C#开发Windows服务的基础代码
- 微信服务号开发
- 微信服务号开发
- 【微信服务号】微信服务号开发常见问题
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
- 微信公众号自定义菜单完整代码
- 微信服务号开发-获取用户信息
- 微信服务号开发-----创建菜单
- 微信服务号开发----基本配置
- 微信服务号开发----发送消息
- 微信服务号相关接口开发
- Springmvc集成jfinal微信 微信服务号开发
- 微信服务号 微信支付开发
- 微信服务号 微信支付开发
- 微信企业转账【完整DEMO代码】
- HTML+CSS+JavaScript基础知识
- android 编程规范
- grep正则表达
- 链表的应用~
- [UnityUI]循环滑动列表
- C# 微信服务号开发基础 完整代码
- Spinner下拉列表
- ios-画图
- VNC连接ubuntu14:No matching security types
- 剑指off-求最小数字组合
- 二、Solr安装(Tomcat)
- Num 2: 九度: 题目1192:回文字符串
- URL编码
- linux中fork()函数详解