微信服务器配置接收页面示例代码

  1. /// <summary>
  2. /// 微信的Token
  3. /// </summary>
  4. const string Token = "Token令牌";
  5.  
  6. protected void Page_Load(object sender, EventArgs e)
  7. {
  8. string postStr = "";
  9. //配置信息,只有在微信做提交配置的时候才会执行。
  10. Valid();
  11. if (Request.HttpMethod.ToLower() == "post")
  12. {
  13. postStr = PostInput();
  14. if (false == string.IsNullOrEmpty(postStr))
  15. {
  16. ResponseMsg(postStr);
  17. }
  18. }
  19. }
  20. /// <summary>
  21. /// 返回信息结果(微信信息返回)
  22. /// </summary>
  23. /// <param name="weixinXML"></param>
  24.  
  25. private void ResponseMsg(string weixinXML)
  26. {
  27. //回复消息的部分:你的代码写在这里
  28. //根据关键词 自定义回复
  29. string ToUserName = "";
  30. string FromUserName = "";
  31. string CreateTime = "";
  32. try
  33. {
  34. WriteLog(weixinXML);
  35. var xDoc = XDocument.Parse(weixinXML);
  36. var q = (from c in xDoc.Elements() select c).ToList();
  37. var msgType = q.Elements("MsgType").First().Value; // 获取信息内容的类型
  38.  
  39. //按钮事件
  40. if ( == string.Compare("event", msgType, true))
  41. {
  42. ToUserName = q.Elements("ToUserName").First().Value;//开发者微信号
  43. FromUserName = q.Elements("FromUserName").First().Value;//发送方帐号(一个OpenID)
  44. #region 事件
  45. string strEvent = "";
  46. string strEventKey = "";
  47. strEvent = q.Elements("Event").First().Value;
  48. CreateTime = q.Elements("CreateTime").First().Value;
  49. //单击事件
  50. if (strEvent.ToLower() == "click")
  51. {
  52. //图文推送
  53. strEventKey = q.Elements("EventKey").First().Value;
  54. }
  55. //关注公众号
  56. else if (strEvent.ToLower() == "subscribe")
  57. {
  58. strEventKey = q.Elements("EventKey").First().Value;
  59.  
  60. //未关注扫描带参数的二维码
  61. if (strEventKey.Contains("qrscene_"))
  62. {
  63. string vaule = strEventKey.Replace("qrscene_", "");
  64. }
  65.  
  66. }
  67. //已关注扫描带参数的二维码
  68. else if (strEvent.ToLower() == "scan")
  69. {
  70. strEventKey = q.Elements("EventKey").First().Value;
  71. }
  72. #endregion
  73. }
  74. //用户文本信息
  75. else if ( == string.Compare("text", msgType, true))
  76. {
  77.  
  78. }
  79. }
  80. catch (Exception ex)
  81. {
  82. WriteLog(ex.ToString());
  83. }
  84. Response.End();
  85. }
  86.  
  87. /// <summary>
  88. /// 图片消息
  89. /// </summary>
  90. /// <param name="ToUsername"></param>
  91. /// <param name="FromUserName"></param>
  92. /// <returns></returns>
  93. public static bool SendWxPic(string ToUsername, string FromUserName, string MediaId)
  94. {
  95. var textTpl = "<xml>"
  96. + "<ToUserName><![CDATA[{0}]]></ToUserName>"
  97. + "<FromUserName><![CDATA[{1}]]></FromUserName>"
  98. + "<CreateTime>{2}</CreateTime>"
  99. + "<MsgType><![CDATA[image]]></MsgType>"
  100. +"<Image>"
  101. +"<MediaId><![CDATA[{3}]]></MediaId>"
  102. +"</Image>"
  103. + "</xml>";
  104. HttpResponse resp = System.Web.HttpContext.Current.Response;
  105. resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now), MediaId));
  106. return true;
  107. }
  108. /// <summary>
  109. /// 消息转发到客服
  110. /// </summary>
  111. /// <param name="ToUsername"></param>
  112. /// <param name="FromUserName"></param>
  113. /// <returns></returns>
  114. public static bool SendWx(string ToUsername, string FromUserName)
  115. {
  116. var textTpl = "<xml>"
  117. + "<ToUserName><![CDATA[{0}]]></ToUserName>"
  118. + "<FromUserName><![CDATA[{1}]]></FromUserName>"
  119. + "<CreateTime>{2}</CreateTime>"
  120. + "<MsgType><![CDATA[transfer_customer_service]]></MsgType>"
  121. + "</xml>";
  122. HttpResponse resp = System.Web.HttpContext.Current.Response;
  123. resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now)));
  124. return true;
  125. }
  126.  
  127. /// <summary>
  128. /// 回复文本消息
  129. /// </summary>
  130. /// <param name="ToUsername"></param>
  131. /// <param name="FromUserName"></param>
  132. /// <param name="_tmpContent"></param>
  133. /// <returns></returns>
  134. public static bool SendWx(string ToUsername, string FromUserName, string _tmpContent)
  135. {
  136. var textTpl = "<xml>"
  137. + "<ToUserName><![CDATA[{0}]]></ToUserName>"
  138. + "<FromUserName><![CDATA[{1}]]></FromUserName>"
  139. + "<CreateTime>{2}</CreateTime>"
  140. + "<MsgType><![CDATA[{3}]]></MsgType>"
  141. + "<Content><![CDATA[{4}]]></Content>"
  142. + "</xml>";
  143.  
  144. //_tmpContent = "你已经选择了明细,谢谢!";
  145. HttpResponse resp = System.Web.HttpContext.Current.Response;
  146. resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now), "text", _tmpContent));
  147. return true;
  148.  
  149. }
  150.  
  151. /// <summary>
  152. /// 检验signature
  153. /// </summary>
  154. private void Valid()
  155. {
  156. //微信服务器配置提交时,echoStr才不为空。
  157. string echoStr = Request.QueryString["echoStr"];
  158. if (echoStr != null)
  159. {
  160. if (CheckSignature())
  161. {
  162. if (!string.IsNullOrEmpty(echoStr))
  163. {
  164. Response.Write(echoStr); Response.End();
  165. }
  166. }
  167. }
  168. }
  169.  
  170. /// <summary>
  171. /// 验证微信签名
  172. /// </summary>
  173. /// * 将token、timestamp、nonce三个参数进行字典序排序
  174. /// * 将三个参数字符串拼接成一个字符串进行sha1加密
  175. /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
  176. /// <returns></returns>
  177. private bool CheckSignature()
  178. {
  179. string signature = Request.QueryString["signature"].ToString();
  180. string timestamp = Request.QueryString["timestamp"].ToString();
  181. string nonce = Request.QueryString["nonce"].ToString();
  182. string[] ArrTmp = { Token, timestamp, nonce };
  183. Array.Sort(ArrTmp); //字典排序
  184. string tmpStr = string.Join("", ArrTmp);
  185. tmpStr = Cryptography.SHA1_Hash(tmpStr);
  186. tmpStr = tmpStr.ToLower();
  187. if (tmpStr == signature)
  188. {
  189. return true;
  190. }
  191. else
  192. {
  193. return false;
  194. }
  195.  
  196. }
  197.  
  198. /// <summary>
  199. /// 获取POST返回来的数据
  200. /// </summary>
  201. /// <returns></returns>
  202. private string PostInput()
  203. {
  204. try
  205. {
  206. System.IO.Stream s = Request.InputStream;
  207. int count = ;
  208. byte[] buffer = new byte[s.Length];
  209. StringBuilder builder = new StringBuilder();
  210. while ((count = s.Read(buffer, , buffer.Length)) > )
  211. {
  212. builder.Append(Request.ContentEncoding.GetString(buffer, , count));
  213. }
  214. s.Flush();
  215. s.Close();
  216. s.Dispose();
  217. return builder.ToString();
  218. }
  219. catch (Exception ex)
  220. { throw ex; }
  221.  
  222. }
  223.  
  224. /// <summary>
  225. /// unix时间转换为datetime
  226. /// </summary>
  227. /// <param name="timeStamp"></param>
  228. /// <returns></returns>
  229. private DateTime UnixTimeToTime(string timeStamp)
  230. {
  231.  
  232. DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
  233. long lTime = long.Parse(timeStamp + "");
  234. TimeSpan toNow = new TimeSpan(lTime);
  235. return dtStart.Add(toNow);
  236. }
  237.  
  238. /// <summary>
  239. /// datetime转换为unixtime
  240. /// </summary>
  241. /// <param name="time"></param>
  242. /// <returns></returns>
  243. public static int ConvertDateTimeInt(System.DateTime time)
  244. {
  245. System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(, , ));
  246. return (int)(time - startTime).TotalSeconds;
  247. }
  248.  
  249. /// <summary>
  250. /// 写日志(用于跟踪)
  251. /// </summary>
  252. private void WriteLog(string strMemo)
  253. {
  254. string filename = Server.MapPath("~/logs/log.txt");
  255. if (!Directory.Exists(Server.MapPath("//logs//")))
  256. Directory.CreateDirectory(Server.MapPath("//logs//"));
  257. StreamWriter sr = null;
  258. try
  259. {
  260. if (!File.Exists(filename))
  261. {
  262. sr = File.CreateText(filename);
  263. }
  264. else
  265. {
  266. sr = File.AppendText(filename);
  267. }
  268. sr.WriteLine(strMemo);
  269. }
  270. catch
  271. {
  272. }
  273. finally
  274. {
  275. if (sr != null)
  276. sr.Close();
  277. }
  278. }

以上代码是公司要做微信一些功能做的代码总结,网上找的时候感觉代码虽然封装的很好。但是要用麻烦。觉得没必要封装的那么简洁。如果需要封装,自己在去封装。

asp.net C# 实现微信服务器配置的更多相关文章

  1. [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法

    首先,请允许我说一句:shit! 因为这个问题不难,但是网上有关 ASP.NET WEBAPI的资料太少.都是PHP等等的. 我也是在看了某位大神的博客后有启发,一点点研究出来的. 来看正题! 1.微 ...

  2. 微信开发】【Asp.net MVC】-- 微信分享功能

    [微信开发][Asp.net MVC]-- 微信分享功能 2017-01-15 09:09 by stoneniqiu, 12886 阅读, 15 评论, 收藏, 编辑 内嵌在微信中的网页,右上角都会 ...

  3. ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题

    原文:ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MrTra ...

  4. 【课程分享】ASP.NET MVC5&amp;微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)

    对这个课程有兴趣的,能够联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲- ...

  5. asp.net C# 实现微信接口权限开发类

    当前微信接口类已实现以下接口,代码上如果不够简洁的,请自行处理. 1.获取access_token 2.获取用户基本信息 3.生成带参数二维码 4.新增永久素材 5.新增临时素材 6.发送微信模版 7 ...

  6. asp代码写的,微信会员报名转发分享带上下级和邀约人关系并且能微信支付asp编号的

    昨天晚上应一个客户要求写了一套代码,实现的功能是: 在微信公众号上注册会员,获取用户的头像和微信名称,进入会员中心报名,报名成功成功后,他如果转发链接给别人,别人打开后则成为他的下级,上面那个算是一个 ...

  7. 微信服务器配置令牌(Token)

    实现步骤: 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAESKey,其中UR ...

  8. [转]ASP.NET Core集成微信登录

    本文转自:http://www.cnblogs.com/early-moon/p/5819760.html 工具: Visual Studio 2015 update 3 Asp.Net Core 1 ...

  9. ASP.NET Core集成微信登录

    工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com ...

随机推荐

  1. 201521123030《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 控制可见性的4个访问修饰符 private -- 仅对本类可见 public -- 对所有类 ...

  2. python 中的%s是什么意思呢?

    今天忽然想写Python中的%s的意思,它怎么理解呢,我查阅了一下相关文献,然后结合了自己的理解,分析如下: 这是一个字符串格式化语法(这是从c 中调用的) 具体请参阅     http://www. ...

  3. C#设计模式(6)-原型模式

    引言 上一篇介绍了设计模式中的抽象工厂模式-C#设计模式(3)-建造者模式,本篇将介绍原型模式: 点击这里查看全部设计模式系列文章导航 原型模式简介 原型模式:用原型实例指定创建对象的种类,并且通过拷 ...

  4. 纳税服务系统【信息发布管理、Ueditor、异步信息交互】

    需求分析 我们现在来到了纳税服务系统的信息发布管理模块,首先我们跟着原型图来进行需求分析把: 一些普通的CRUD,值得一做的就是状态之间的切换了.停用和发布切换. 值得注意的是:在信息内容中,它可以带 ...

  5. String类的一些常见的比较方法(4)

    1:boolean equals(Object obj); //比较字符穿的内容是否相同 区分大小写的 2:boolean equalsIgnoreCase(String str); //比较字符穿的 ...

  6. angular学习笔记01

    angular.js路由功能 用于实现单页应用 //html 代码 <div ng-view></div> //js代码 angular.module('myM1',['ng' ...

  7. 数据库服务器构建和部署列表(For SQL Server 2012)

    前言 我们可能经常安装和部署数据库服务器,但是可能突然忘记了某个设置,为后来的运维造成隐患.下面是国外大牛整理的的检查列表. 其实也包含了很多我们平时数据库配置的最佳实践.比如TEMPDB 文件的个数 ...

  8. Linux入门之常用命令(4)vi编辑器

    vi分为三种模式 一般模式:删除字符.删除整行.复制粘贴等操作 编辑模式:i o a r进入 输入字符  Esc退出 命令行模式::或/ 将光标移动到最末行 搜寻数据 读取或替换 退出vi 显示行号 ...

  9. hdu 4090--GemAnd Prince(搜索)

    题目链接 Problem Description Nowadays princess Claire wants one more guard and posts the ads throughout ...

  10. Hive简记

    在大数据工作中难免遇到数据仓库(OLAP)架构,以及通过Hive SQL简化分布式计算的场景.所以想通过这篇博客对Hive使用有一个大致总结,希望道友多多指教! 摘要: 1.Hive安装 2.Hive ...