以下代码来自网路,
微信开放平台开发模式 已经开启,
现在主要是想了解下 接受信息,以及自动回复是如何实现的,下面有代码,但是我这边测试没有成功!高手指点下,谢谢!<%@ WebHandler Language="C#" Class="WeixinInterface" %>
using System;
using System.Web;
public class WeixinInterface : IHttpHandler
{
HttpContext context = null;
string postStr = "";
public void ProcessRequest(HttpContext param_context)
{
context = param_context;
//以写日志为荣,以打断点为耻.
//WriteLog("before valid \n");
//valid();//用于验证
//WriteLog("after valid, before post \n");
if (context.Request.HttpMethod.ToLower() == "post")
{
System.IO.Stream s = context.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
postStr = System.Text.Encoding.UTF8.GetString(b);
if (!string.IsNullOrEmpty(postStr))
{
responseMsg(postStr);
}
//WriteLog("-------AfterResponseMsg:-------\n" + postStr);
}
}
public void valid()
{
var echostr = context.Request["echoStr"].ToString();
if (checkSignature() && !string.IsNullOrEmpty(echostr))
{
context.Response.Write(echostr);
context.Response.End();//推送...不然微信平台无法验证token
}
}
public bool checkSignature()
{
var signature = context.Request["signature"].ToString();
var timestamp = context.Request["timestamp"].ToString();
var nonce = context.Request["nonce"].ToString();
var token = "faketoken";
string[] ArrTmp = { token, timestamp, nonce };
Array.Sort(ArrTmp); //字典排序
string tmpStr = string.Join("", ArrTmp);
tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}
public string GetSha1(System.Collections.Generic.List<string> codelist)
{
codelist.Sort();
var combostr = string.Empty;
for (int i = 0; i < codelist.Count; i++)
{
combostr += codelist[i];
}
return EncryptToSHA1(combostr);
}
public string EncryptToSHA1(string str)
{
System.Security.Cryptography.SHA1CryptoServiceProvider sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] str1 = System.Text.Encoding.UTF8.GetBytes(str);
byte[] str2 = sha1.ComputeHash(str1);
sha1.Clear();
(sha1 as IDisposable).Dispose();
return Convert.ToBase64String(str2);
}
public void responseMsg(string postStr)
{
System.Xml.XmlDocument postObj = new System.Xml.XmlDocument();
postObj.LoadXml(postStr);
WriteLog("responseMsg:-------" + postStr);
var FromUserNameList = postObj.GetElementsByTagName("FromUserName");
string FromUserName = string.Empty;
for (int i = 0; i < FromUserNameList.Count; i++)
{
if (FromUserNameList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
{
FromUserName = FromUserNameList[i].ChildNodes[0].Value;
}
}
var toUsernameList = postObj.GetElementsByTagName("ToUserName");
string ToUserName = string.Empty;
for (int i = 0; i < toUsernameList.Count; i++)
{
if (toUsernameList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
{
ToUserName = toUsernameList[i].ChildNodes[0].Value;
}
}
var keywordList = postObj.GetElementsByTagName("Content");
string Content = string.Empty;
for (int i = 0; i < keywordList.Count; i++)
{
if (keywordList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
{
Content = keywordList[i].ChildNodes[0].Value;
}
}
var time = DateTime.Now;
var textpl = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>" +
"<CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType>" +
"<Content><![CDATA[欢迎来到微信世界---" + Content + "]]></Content><FuncFlag>0</FuncFlag></xml> ";
context.Response.Write(textpl);
context.Response.End();
}
private DateTime UnixTimeToTime(string timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
private int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
private void WriteLog(string strMemo)
{
string filename = "D:/WEBHOME/logs/log.txt";
if (!System.IO.Directory.Exists("D:/WEBHOME/logs/"))
System.IO.Directory.CreateDirectory("D:/WEBHOME/logs/");
System.IO.StreamWriter sr = null;
try
{
if (!System.IO.File.Exists(filename))
{
sr = System.IO.File.CreateText(filename);
}
else
{
sr = System.IO.File.AppendText(filename);
}
sr.WriteLine(strMemo);
}
catch
{
}
finally
{
if (sr != null)
sr.Close();
}
}
public bool IsReusable
{
get
{
return false;
}
}
} api 微信api
微信开放平台开发模式 已经开启,
现在主要是想了解下 接受信息,以及自动回复是如何实现的,下面有代码,但是我这边测试没有成功!高手指点下,谢谢!<%@ WebHandler Language="C#" Class="WeixinInterface" %>
using System;
using System.Web;
public class WeixinInterface : IHttpHandler
{
HttpContext context = null;
string postStr = "";
public void ProcessRequest(HttpContext param_context)
{
context = param_context;
//以写日志为荣,以打断点为耻.
//WriteLog("before valid \n");
//valid();//用于验证
//WriteLog("after valid, before post \n");
if (context.Request.HttpMethod.ToLower() == "post")
{
System.IO.Stream s = context.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
postStr = System.Text.Encoding.UTF8.GetString(b);
if (!string.IsNullOrEmpty(postStr))
{
responseMsg(postStr);
}
//WriteLog("-------AfterResponseMsg:-------\n" + postStr);
}
}
public void valid()
{
var echostr = context.Request["echoStr"].ToString();
if (checkSignature() && !string.IsNullOrEmpty(echostr))
{
context.Response.Write(echostr);
context.Response.End();//推送...不然微信平台无法验证token
}
}
public bool checkSignature()
{
var signature = context.Request["signature"].ToString();
var timestamp = context.Request["timestamp"].ToString();
var nonce = context.Request["nonce"].ToString();
var token = "faketoken";
string[] ArrTmp = { token, timestamp, nonce };
Array.Sort(ArrTmp); //字典排序
string tmpStr = string.Join("", ArrTmp);
tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}
public string GetSha1(System.Collections.Generic.List<string> codelist)
{
codelist.Sort();
var combostr = string.Empty;
for (int i = 0; i < codelist.Count; i++)
{
combostr += codelist[i];
}
return EncryptToSHA1(combostr);
}
public string EncryptToSHA1(string str)
{
System.Security.Cryptography.SHA1CryptoServiceProvider sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] str1 = System.Text.Encoding.UTF8.GetBytes(str);
byte[] str2 = sha1.ComputeHash(str1);
sha1.Clear();
(sha1 as IDisposable).Dispose();
return Convert.ToBase64String(str2);
}
public void responseMsg(string postStr)
{
System.Xml.XmlDocument postObj = new System.Xml.XmlDocument();
postObj.LoadXml(postStr);
WriteLog("responseMsg:-------" + postStr);
var FromUserNameList = postObj.GetElementsByTagName("FromUserName");
string FromUserName = string.Empty;
for (int i = 0; i < FromUserNameList.Count; i++)
{
if (FromUserNameList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
{
FromUserName = FromUserNameList[i].ChildNodes[0].Value;
}
}
var toUsernameList = postObj.GetElementsByTagName("ToUserName");
string ToUserName = string.Empty;
for (int i = 0; i < toUsernameList.Count; i++)
{
if (toUsernameList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
{
ToUserName = toUsernameList[i].ChildNodes[0].Value;
}
}
var keywordList = postObj.GetElementsByTagName("Content");
string Content = string.Empty;
for (int i = 0; i < keywordList.Count; i++)
{
if (keywordList[i].ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
{
Content = keywordList[i].ChildNodes[0].Value;
}
}
var time = DateTime.Now;
var textpl = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + ToUserName + "]]></FromUserName>" +
"<CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType>" +
"<Content><![CDATA[欢迎来到微信世界---" + Content + "]]></Content><FuncFlag>0</FuncFlag></xml> ";
context.Response.Write(textpl);
context.Response.End();
}
private DateTime UnixTimeToTime(string timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
private int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
private void WriteLog(string strMemo)
{
string filename = "D:/WEBHOME/logs/log.txt";
if (!System.IO.Directory.Exists("D:/WEBHOME/logs/"))
System.IO.Directory.CreateDirectory("D:/WEBHOME/logs/");
System.IO.StreamWriter sr = null;
try
{
if (!System.IO.File.Exists(filename))
{
sr = System.IO.File.CreateText(filename);
}
else
{
sr = System.IO.File.AppendText(filename);
}
sr.WriteLine(strMemo);
}
catch
{
}
finally
{
if (sr != null)
sr.Close();
}
}
public bool IsReusable
{
get
{
return false;
}
}
} api 微信api
解决方案 »
- 请问下ASP.NET 用什么CMS好,主要是简单,适用,稳定就行
- net怎么打印呀?
- 各位高手请你们帮小弟一个忙
- 像msdn这种文档帮助系统(b/s)是如何开发的?要有搜索,随时添加资料等功能~
- 动态新闻内容页如何分页?
- 静态变量是不是相当于application效果,我要它实现session功能,请问可以吗?
- 查询结果实现的问题(问题见文章内容,在线等)
- VS2005
- 谁有完整的会员系统视频教程啊!求前辈赐教!谢谢!asp.net(C#版)
- 水晶报表初级使用问题?
- 有两个文本框第一个写开始时间第二个写结束时间 点击搜索事件怎么写SQL语句啊 求帮忙
- 又到山寨学习的时间了,discuz x2.5后台管理静态页
到底哪一些管用呢?这段代码目前还没有完善,如何去写呢??public partial class wx_wxapi : System.Web.UI.Page
{
const string Token = "*****"; //你的token
protected void Page_Load(object sender, EventArgs e)
{
string postStr = ""; //Valid();
if (Request.HttpMethod.ToLower() == "post")
{
Stream s = System.Web.HttpContext.Current.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
postStr = Encoding.UTF8.GetString(b);
if (!string.IsNullOrEmpty(postStr))
{
ResponseMsg(postStr);
}
//WriteLog("postStr:" + postStr);
}
} /// <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 = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
} private void Valid()
{
string echoStr = Request.QueryString["echoStr"].ToString();
if (CheckSignature())
{
if (!string.IsNullOrEmpty(echoStr))
{
Response.Write(echoStr);
Response.End();
}
}
} /// <summary>
/// 返回信息结果(微信信息返回)
/// </summary>
/// <param name="weixinXML"></param>
private void ResponseMsg(string weixinXML)
{
//回复消息的部分:你的代码写在这里 } /// <summary>
/// unix时间转换为datetime
/// </summary>
/// <param name="timeStamp"></param>
/// <returns></returns>
private DateTime UnixTimeToTime(string timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
} /// <summary>
/// datetime转换为unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
private int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
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("//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();
}
}
}