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 ...
随机推荐
- 201521123005《java程序设计》第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. ·继承(是什么,意义) -父类(被继承的类) -子类(继承父类) -多态(解决重复代码的问题 ...
- 201521145048《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢式(思维导图或其他)归纳总结多数据库相关内容. 1.数据库的定义:是为了实现一定目的按某种规则组织起来的"数据"的"集合". ...
- php数据库操作小要点
保留小数点后两位 $ba = floor(($v[2]/$sum[0][0])*10000); //取整数 $bb = $ba/100; //两位小数 列的值加一可以直接用自身,不用单独查询出来 $s ...
- 多线程面试题系列(14):读者写者问题继 读写锁SRWLock
在第十一篇文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题.问题虽然得到了解决,但代码有点复杂.本篇将介绍一种新方法--读写锁SRWLock来解决这一问题.读写锁在对资源进行保护的同时,还 ...
- Eclipse rap 富客户端开发总结(5): RAP国际化之路
Eclipse RCP 中的plugin.xml国际化实现 1. 在工程的根目录下面建立一个plugin.properties资源文件:在此资源文件中写入需要国际化的内容(键/值对),举例如下: h ...
- JSP第六篇【自定义标签之传统标签】
为什么要使用自定义标签? JSTL标签库只提供了简单的输出等功能,没有实现任何的HTML代码封装,并且某些复杂类型转换,或者逻辑处理的时候,JSTL标签库完成不了,需要自定义标签! 编写自定义标签的步 ...
- Java_注解_01_注解(Annotation)详解
一.注解的概念 Annotation(注解)是插入代码中的元数据(元数据从metadata一词译来,就是“描述数据的数据”的意思),在JDK5.0及以后版本引入.它可以在编译期使用预编译工具进行处理, ...
- 框架应用:Mybatis (一) - 入门案例
ORM框架 在实际开发中,工程中本质的任务是从数据库中获取数据,然后对数据进行操作,又或者写入数据.开发时语言是大多是面向对象的工程语言,这个时候就必须进行工程语言和数据库连接语言的转换,也就是所谓的 ...
- Spring c3p0连接池无法释放解决方案
通过c3p0配置连接池的时候,在进行压力测试的时候,日志出现了这样一个错误:Data source rejected establishment of connection, message from ...
- 【 js 基础 】关于this
this 关键字是 Javascript 中很特别的一个关键字,被自动定义在所有函数的作用域中.this提供了一种更优雅的方式隐式"传递"一个对象的引用.今天就来说说 this 的 ...