asp.net C# 实现微信服务器配置
微信服务器配置接收页面示例代码
- /// <summary>
- /// 微信的Token
- /// </summary>
- const string Token = "Token令牌";
- protected void Page_Load(object sender, EventArgs e)
- {
- string postStr = "";
- //配置信息,只有在微信做提交配置的时候才会执行。
- Valid();
- if (Request.HttpMethod.ToLower() == "post")
- {
- postStr = PostInput();
- if (false == string.IsNullOrEmpty(postStr))
- {
- ResponseMsg(postStr);
- }
- }
- }
- /// <summary>
- /// 返回信息结果(微信信息返回)
- /// </summary>
- /// <param name="weixinXML"></param>
- private void ResponseMsg(string weixinXML)
- {
- //回复消息的部分:你的代码写在这里
- //根据关键词 自定义回复
- string ToUserName = "";
- string FromUserName = "";
- string CreateTime = "";
- try
- {
- WriteLog(weixinXML);
- var xDoc = XDocument.Parse(weixinXML);
- var q = (from c in xDoc.Elements() select c).ToList();
- var msgType = q.Elements("MsgType").First().Value; // 获取信息内容的类型
- //按钮事件
- if ( == string.Compare("event", msgType, true))
- {
- ToUserName = q.Elements("ToUserName").First().Value;//开发者微信号
- FromUserName = q.Elements("FromUserName").First().Value;//发送方帐号(一个OpenID)
- #region 事件
- string strEvent = "";
- string strEventKey = "";
- strEvent = q.Elements("Event").First().Value;
- CreateTime = q.Elements("CreateTime").First().Value;
- //单击事件
- if (strEvent.ToLower() == "click")
- {
- //图文推送
- strEventKey = q.Elements("EventKey").First().Value;
- }
- //关注公众号
- else if (strEvent.ToLower() == "subscribe")
- {
- strEventKey = q.Elements("EventKey").First().Value;
- //未关注扫描带参数的二维码
- if (strEventKey.Contains("qrscene_"))
- {
- string vaule = strEventKey.Replace("qrscene_", "");
- }
- }
- //已关注扫描带参数的二维码
- else if (strEvent.ToLower() == "scan")
- {
- strEventKey = q.Elements("EventKey").First().Value;
- }
- #endregion
- }
- //用户文本信息
- else if ( == string.Compare("text", msgType, true))
- {
- }
- }
- catch (Exception ex)
- {
- WriteLog(ex.ToString());
- }
- Response.End();
- }
- /// <summary>
- /// 图片消息
- /// </summary>
- /// <param name="ToUsername"></param>
- /// <param name="FromUserName"></param>
- /// <returns></returns>
- public static bool SendWxPic(string ToUsername, string FromUserName, string MediaId)
- {
- var textTpl = "<xml>"
- + "<ToUserName><![CDATA[{0}]]></ToUserName>"
- + "<FromUserName><![CDATA[{1}]]></FromUserName>"
- + "<CreateTime>{2}</CreateTime>"
- + "<MsgType><![CDATA[image]]></MsgType>"
- +"<Image>"
- +"<MediaId><![CDATA[{3}]]></MediaId>"
- +"</Image>"
- + "</xml>";
- HttpResponse resp = System.Web.HttpContext.Current.Response;
- resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now), MediaId));
- return true;
- }
- /// <summary>
- /// 消息转发到客服
- /// </summary>
- /// <param name="ToUsername"></param>
- /// <param name="FromUserName"></param>
- /// <returns></returns>
- public static bool SendWx(string ToUsername, string FromUserName)
- {
- var textTpl = "<xml>"
- + "<ToUserName><![CDATA[{0}]]></ToUserName>"
- + "<FromUserName><![CDATA[{1}]]></FromUserName>"
- + "<CreateTime>{2}</CreateTime>"
- + "<MsgType><![CDATA[transfer_customer_service]]></MsgType>"
- + "</xml>";
- HttpResponse resp = System.Web.HttpContext.Current.Response;
- resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now)));
- return true;
- }
- /// <summary>
- /// 回复文本消息
- /// </summary>
- /// <param name="ToUsername"></param>
- /// <param name="FromUserName"></param>
- /// <param name="_tmpContent"></param>
- /// <returns></returns>
- public static bool SendWx(string ToUsername, string FromUserName, string _tmpContent)
- {
- var textTpl = "<xml>"
- + "<ToUserName><![CDATA[{0}]]></ToUserName>"
- + "<FromUserName><![CDATA[{1}]]></FromUserName>"
- + "<CreateTime>{2}</CreateTime>"
- + "<MsgType><![CDATA[{3}]]></MsgType>"
- + "<Content><![CDATA[{4}]]></Content>"
- + "</xml>";
- //_tmpContent = "你已经选择了明细,谢谢!";
- HttpResponse resp = System.Web.HttpContext.Current.Response;
- resp.Write(string.Format(textTpl, FromUserName, ToUsername, ConvertDateTimeInt(DateTime.Now), "text", _tmpContent));
- return true;
- }
- /// <summary>
- /// 检验signature
- /// </summary>
- private void Valid()
- {
- //微信服务器配置提交时,echoStr才不为空。
- string echoStr = Request.QueryString["echoStr"];
- if (echoStr != null)
- {
- if (CheckSignature())
- {
- if (!string.IsNullOrEmpty(echoStr))
- {
- Response.Write(echoStr); Response.End();
- }
- }
- }
- }
- /// <summary>
- /// 验证微信签名
- /// </summary>
- /// * 将token、timestamp、nonce三个参数进行字典序排序
- /// * 将三个参数字符串拼接成一个字符串进行sha1加密
- /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
- /// <returns></returns>
- private bool CheckSignature()
- {
- string signature = Request.QueryString["signature"].ToString();
- string timestamp = Request.QueryString["timestamp"].ToString();
- string nonce = Request.QueryString["nonce"].ToString();
- string[] ArrTmp = { Token, timestamp, nonce };
- Array.Sort(ArrTmp); //字典排序
- string tmpStr = string.Join("", ArrTmp);
- tmpStr = Cryptography.SHA1_Hash(tmpStr);
- tmpStr = tmpStr.ToLower();
- if (tmpStr == signature)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- /// <summary>
- /// 获取POST返回来的数据
- /// </summary>
- /// <returns></returns>
- private string PostInput()
- {
- try
- {
- System.IO.Stream s = Request.InputStream;
- int count = ;
- byte[] buffer = new byte[s.Length];
- StringBuilder builder = new StringBuilder();
- while ((count = s.Read(buffer, , buffer.Length)) > )
- {
- builder.Append(Request.ContentEncoding.GetString(buffer, , count));
- }
- s.Flush();
- s.Close();
- s.Dispose();
- return builder.ToString();
- }
- catch (Exception ex)
- { throw ex; }
- }
- /// <summary>
- /// unix时间转换为datetime
- /// </summary>
- /// <param name="timeStamp"></param>
- /// <returns></returns>
- private DateTime UnixTimeToTime(string timeStamp)
- {
- DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
- long lTime = long.Parse(timeStamp + "");
- TimeSpan toNow = new TimeSpan(lTime);
- return dtStart.Add(toNow);
- }
- /// <summary>
- /// datetime转换为unixtime
- /// </summary>
- /// <param name="time"></param>
- /// <returns></returns>
- public static int ConvertDateTimeInt(System.DateTime time)
- {
- System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(, , ));
- return (int)(time - startTime).TotalSeconds;
- }
- /// <summary>
- /// 写日志(用于跟踪)
- /// </summary>
- private void WriteLog(string strMemo)
- {
- string filename = Server.MapPath("~/logs/log.txt");
- if (!Directory.Exists(Server.MapPath("//logs//")))
- Directory.CreateDirectory(Server.MapPath("//logs//"));
- StreamWriter sr = null;
- try
- {
- if (!File.Exists(filename))
- {
- sr = File.CreateText(filename);
- }
- else
- {
- sr = File.AppendText(filename);
- }
- sr.WriteLine(strMemo);
- }
- catch
- {
- }
- finally
- {
- if (sr != null)
- sr.Close();
- }
- }
以上代码是公司要做微信一些功能做的代码总结,网上找的时候感觉代码虽然封装的很好。但是要用麻烦。觉得没必要封装的那么简洁。如果需要封装,自己在去封装。
asp.net C# 实现微信服务器配置的更多相关文章
- [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法
首先,请允许我说一句:shit! 因为这个问题不难,但是网上有关 ASP.NET WEBAPI的资料太少.都是PHP等等的. 我也是在看了某位大神的博客后有启发,一点点研究出来的. 来看正题! 1.微 ...
- 微信开发】【Asp.net MVC】-- 微信分享功能
[微信开发][Asp.net MVC]-- 微信分享功能 2017-01-15 09:09 by stoneniqiu, 12886 阅读, 15 评论, 收藏, 编辑 内嵌在微信中的网页,右上角都会 ...
- ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题
原文:ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MrTra ...
- 【课程分享】ASP.NET MVC5&微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)
对这个课程有兴趣的,能够联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲- ...
- asp.net C# 实现微信接口权限开发类
当前微信接口类已实现以下接口,代码上如果不够简洁的,请自行处理. 1.获取access_token 2.获取用户基本信息 3.生成带参数二维码 4.新增永久素材 5.新增临时素材 6.发送微信模版 7 ...
- asp代码写的,微信会员报名转发分享带上下级和邀约人关系并且能微信支付asp编号的
昨天晚上应一个客户要求写了一套代码,实现的功能是: 在微信公众号上注册会员,获取用户的头像和微信名称,进入会员中心报名,报名成功成功后,他如果转发链接给别人,别人打开后则成为他的下级,上面那个算是一个 ...
- 微信服务器配置令牌(Token)
实现步骤: 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAESKey,其中UR ...
- [转]ASP.NET Core集成微信登录
本文转自:http://www.cnblogs.com/early-moon/p/5819760.html 工具: Visual Studio 2015 update 3 Asp.Net Core 1 ...
- ASP.NET Core集成微信登录
工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com ...
随机推荐
- 201521123030《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 控制可见性的4个访问修饰符 private -- 仅对本类可见 public -- 对所有类 ...
- python 中的%s是什么意思呢?
今天忽然想写Python中的%s的意思,它怎么理解呢,我查阅了一下相关文献,然后结合了自己的理解,分析如下: 这是一个字符串格式化语法(这是从c 中调用的) 具体请参阅 http://www. ...
- C#设计模式(6)-原型模式
引言 上一篇介绍了设计模式中的抽象工厂模式-C#设计模式(3)-建造者模式,本篇将介绍原型模式: 点击这里查看全部设计模式系列文章导航 原型模式简介 原型模式:用原型实例指定创建对象的种类,并且通过拷 ...
- 纳税服务系统【信息发布管理、Ueditor、异步信息交互】
需求分析 我们现在来到了纳税服务系统的信息发布管理模块,首先我们跟着原型图来进行需求分析把: 一些普通的CRUD,值得一做的就是状态之间的切换了.停用和发布切换. 值得注意的是:在信息内容中,它可以带 ...
- String类的一些常见的比较方法(4)
1:boolean equals(Object obj); //比较字符穿的内容是否相同 区分大小写的 2:boolean equalsIgnoreCase(String str); //比较字符穿的 ...
- angular学习笔记01
angular.js路由功能 用于实现单页应用 //html 代码 <div ng-view></div> //js代码 angular.module('myM1',['ng' ...
- 数据库服务器构建和部署列表(For SQL Server 2012)
前言 我们可能经常安装和部署数据库服务器,但是可能突然忘记了某个设置,为后来的运维造成隐患.下面是国外大牛整理的的检查列表. 其实也包含了很多我们平时数据库配置的最佳实践.比如TEMPDB 文件的个数 ...
- Linux入门之常用命令(4)vi编辑器
vi分为三种模式 一般模式:删除字符.删除整行.复制粘贴等操作 编辑模式:i o a r进入 输入字符 Esc退出 命令行模式::或/ 将光标移动到最末行 搜寻数据 读取或替换 退出vi 显示行号 ...
- hdu 4090--GemAnd Prince(搜索)
题目链接 Problem Description Nowadays princess Claire wants one more guard and posts the ads throughout ...
- Hive简记
在大数据工作中难免遇到数据仓库(OLAP)架构,以及通过Hive SQL简化分布式计算的场景.所以想通过这篇博客对Hive使用有一个大致总结,希望道友多多指教! 摘要: 1.Hive安装 2.Hive ...