C#中.net微信开发的示例分析
发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,这篇文章将为大家详细讲解有关C#中.net微信开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。成为开发者string[] ArrTmp = { "tok
千家信息网最后更新 2024年12月12日C#中.net微信开发的示例分析
这篇文章将为大家详细讲解有关C#中.net微信开发的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
成为开发者string[] ArrTmp = { "token", Request["timestamp"], Request["nonce"] };Array.Sort(ArrTmp); //字典排序string tmpStr = string.Join("", ArrTmp);tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");tmpStr = tmpStr.ToLower();if (tmpStr != Request["signature"].ToLower()){ Response.Write(Request["echostr"]);}关注帐号,触发消息,自动应答,事件响应
namespace ElegantWM.WebUI.Areas.WeiXin.Controllers{ ////// 微信公共服务类 /// public class RobotController : BaseController { ////// 接收微信请求接口,认证的接口 /// ///public ContentResult Index() { string result = AnalyzeXmlFromWeiXin(); return Content(result); } /// /// 分析微信POST到本服务器的XML数据 /// /// ///private string AnalyzeXmlFromWeiXin() { StreamReader reader = new StreamReader(Request.InputStream); string xml = reader.ReadToEnd(); //获取MsgType log.Info(xml); string msgType = XmlHelper.ReadXmlStr(xml, "/xml/MsgType", ""); switch (msgType) { case "event"://如果是事件 return OnAttention(xml); case "text"://如果是文本消息 return OnReceiveTextMsg(xml); default: return "不被支持的关键字!"; } } /// /// 响应文本消息 /// /// ///private string OnReceiveTextMsg(string xml) { WxTextMsg msg = XmlEntityExchange .ConvertXml2Entity(xml); //返回消息,互换收发用户 string toUser = msg.FromUserName; msg.FromUserName = msg.ToUserName; msg.ToUserName = toUser; switch (msg.Content.Trim()) { case "?": msg.Content = HelpDocument(); break; case "?": msg.Content = HelpDocument(); break; case "1": msg.Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); break; case "2": msg.Content = Tools.HttpCrossDomain.Get("http://www.weather.com.cn/data/sk/101210301.html"); break; case "3": msg.Content = "来吧,想唠点什么呢? [偷笑]"; break; case "你是男的女的": msg.Content = "姑娘一枚 [偷笑]"; break; default: msg.Content = "抱歉哦,我不认识您输入的命令。/害羞 /:,@-D"; break; } return XmlEntityExchange .ConvertEntity2Xml(msg); } /// /// 获取帮助菜单文档 /// ///private string HelpDocument() { StringBuilder sb = new StringBuilder(); sb.Append("HI,请回复数字,选择服务").Append("\n\n"); sb.Append("1. 当前时间").Append("\n"); sb.Append("2. 天气信息").Append("\n"); sb.Append("3. 聊天唠嗑").Append("\n"); sb.Append("n. 更多服务开发中...").Append("\n"); sb.Append("回复【?】显示此帮助菜单"); return sb.ToString(); } /// /// 当用户关注微信帐号的时候触发,事件响应 /// /// private string OnAttention(string xml) { WxEvent wxevent = XmlEntityExchange.ConvertXml2Entity(xml); WxTextMsg msg = new WxTextMsg(); msg.ToUserName = wxevent.FromUserName; msg.FromUserName = wxevent.ToUserName; msg.CreateTime = DateTime.Now.Ticks; msg.MsgType = "text"; //如果是关注,则发送欢迎消息 switch (wxevent.Event) { case "subscribe": msg.Content = System.Configuration.ConfigurationManager.AppSettings["DefaultWxMsg"]; break; case "CLICK": msg.Content = "您单击的是:" + wxevent.EventKey; break; default: msg.Content = "暂未处理的事件:Event" + wxevent.Event + ";EventKey:" + wxevent.EventKey; break; } string rst = XmlEntityExchange .ConvertEntity2Xml(msg); log.Info(rst); return rst; } }}
辅助类
//实体public class WxEvent { ////// 接收人 /// public string ToUserName { get; set; } ////// 发送人 /// public string FromUserName { get; set; } ////// 时间 /// public string CreateTime { get; set; } ////// 类型 /// public string MsgType { get; set; } ////// 事件 /// public string Event { get; set; } public string EventKey { get; set; } }public class WxTextMsg { ////// 接收人 /// public string ToUserName { get; set; } ////// 发送人 /// public string FromUserName { get; set; } ////// 时间 /// public long CreateTime { get; set; } ////// 类型 /// public string MsgType { get; set; } ////// 内容 /// public string Content { get; set; } }
//XML和实体对象间的相互转化namespace ElegantWM.WebUI.Areas.WeiXin{ public class XmlEntityExchangewhere T : new() { /// /// 将XML转换为对象 /// /// ///public static T ConvertXml2Entity(string xml) { XmlDocument doc = new XmlDocument(); PropertyInfo[] propinfos = null; doc.LoadXml(xml); XmlNodeList nodelist = doc.SelectNodes("/xml"); T entity = new T(); foreach (XmlNode node in nodelist) { //初始化propertyinfo if (propinfos == null) { Type objtype = entity.GetType(); propinfos = objtype.GetProperties(); } //填充entity类的属性 foreach (PropertyInfo pi in propinfos) { XmlNode cnode = node.SelectSingleNode(pi.Name); pi.SetValue(entity, Convert.ChangeType(cnode.InnerText, pi.PropertyType), null); } } return entity; } /// /// 构造微信消息 /// /// 对象实体 ///返回微信消息xml格式 public static string ConvertEntity2Xml(T t) { StringBuilder builder = new StringBuilder(); builder.Append(""); Type objtype = t.GetType(); //填充entity类的属性 foreach (PropertyInfo pi in objtype.GetProperties()) { object obj = pi.GetValue(t); string value = obj == null ? "" : obj.ToString(); if (pi.PropertyType.Name.ToLower() == "int64") builder.Append("<" + pi.Name + ">" + value + "" + pi.Name + ">"); else builder.Append("<" + pi.Name + ">" + pi.Name + ">"); } builder.Append(" "); return builder.ToString(); } }}
基础类:http请求
/* * * Copyright © 2013 CCT All Rights Reserved * 作者:JackChain * 时间:2013/8/23 18:21:23 * 功能:跨域访问 * 版本:V1.0 * * 修改人: * 修改点: * */namespace ElegantWM.Tools{ public class HttpCrossDomain { ////// 跨域访问 /// /// /// ///public static string Post(string url, string param, int time = 60000) { Uri address = new Uri(url); HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json;charset=utf-8"; //"application/x-www-form-urlencoded"; request.Timeout = time; byte[] byteData = UTF8Encoding.UTF8.GetBytes(param == null ? "" : param); request.ContentLength = byteData.Length; using (Stream postStream = request.GetRequestStream()) { postStream.Write(byteData, 0, byteData.Length); } string result = ""; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); result = reader.ReadToEnd(); } return (result); } /// /// 跨域访问 /// /// /// ///public static string Get(string url, int time = 60000) { Uri address = new Uri(url); HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.Method = "GET"; request.ContentType = "application/json;charset=utf-8"; //"application/x-www-form-urlencoded"; request.Timeout = time; string result = ""; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); result = reader.ReadToEnd(); } return (result); } }}
获取Token:
public class CommonController : Controller { ////// 获取微信凭证 /// ///public JsonResult GetWxCredential() { string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"; url = string.Format(url, ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"]); string rst = HttpCrossDomain.Get(url); if (rst.Contains("access_token")) { string tokenId=rst.Replace("{\"access_token\":\"", "").Replace("\",\"expires_in\":7200}", ""); CacheHelper.CacheInsertAddMinutes("access_token",tokenId,120); return Json(tokenId, JsonRequestBehavior.AllowGet); } else return Json(rst, JsonRequestBehavior.AllowGet); } }
获取和更新菜单
////// 获取微信菜单 /// ///public JsonResult Get() { string url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token="; if (CacheHelper.CacheValue("access_token") != null) { url = url + CacheHelper.CacheValue("access_token").ToString(); } string rst = HttpCrossDomain.Get(url); return Json(rst,JsonRequestBehavior.AllowGet); } /// /// 创建Menu /// /// ///[HttpPost] public JsonResult Create(string json) { string url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="; if (CacheHelper.CacheValue("access_token") != null) { url = url+CacheHelper.CacheValue("access_token").ToString(); } string rst = HttpCrossDomain.Post(url, json); return Json(rst); }
关于"C#中.net微信开发的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
消息
事件
开发
时间
菜单
服务
分析
实体
对象
更多
篇文章
帮助
示例
C#
内容
属性
接口
文本
用户
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海卓妍网络技术有限公司
千万级节点数据库
洗衣预约系统软件开发流程
浅谈access数据库及应用
高新区软件开发中心
徐州移动dns服务器是多少
服务器如何变成网站空间
沫晨网络技术有限公司
松江区创新数据库服务商有哪些
数据库ASC的作用
sql备份删除数据库
湖南网络棋牌软件开发价格
微软移动软件开发
重复数据如何找数据库
思科企业网络安全架构设计实验
芜湖机械软件开发平台
大数据库如何设置增长
深圳线下软件开发培训机构
千里马数据库如何查看密码
全球网络安全500强名单
一级网络安全法规定
计算机网络技术基础数据链路层
网络安全等级保护2.0总结
今日1234直播服务器出现问题
数据库的四大性能
同江行业专业软件开发
医院管理数据库
jsp数据库连接实验总结
加强网络安全防范图片
注册个人虚拟服务器