- 
								<%@ 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;
 
							 
							- 
								
 
							 
							- 
								//Ԍ־s,Դcu.
 
							 
							- 
								//WriteLog("before valid n");
 
							 
							- 
								//valid();//C
 
							 
							- 
								//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();//...Ȼƽ_oCtoken
 
							 
							- 
								}
 
							 
							- 
								}
 
							 
							- 
								
 
							 
							- 
								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 codelist)
 
							 
							- 
								{
 
							 
							- 
								codelist.Sort();
 
							 
							- 
								var combostr = string.Empty;
 
							 
							- 
								for (int i = 0; i < codelist.Count; i++)
 
							 
							- 
								{
 
							 
							- 
								combostr += codelist;
 
							 
							- 
								}
 
							 
							- 
								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.ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
 
							 
							- 
								{
 
							 
							- 
								FromUserName = FromUserNameList.ChildNodes[0].Value;
 
							 
							- 
								}
 
							 
							- 
								}
 
							 
							- 
								var toUsernameList = postObj.GetElementsByTagName("ToUserName");
 
							 
							- 
								string ToUserName = string.Empty;
 
							 
							- 
								for (int i = 0; i < toUsernameList.Count; i++)
 
							 
							- 
								{
 
							 
							- 
								if (toUsernameList.ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
 
							 
							- 
								{
 
							 
							- 
								ToUserName = toUsernameList.ChildNodes[0].Value;
 
							 
							- 
								}
 
							 
							- 
								}
 
							 
							- 
								var keywordList = postObj.GetElementsByTagName("Content");
 
							 
							- 
								string Content = string.Empty;
 
							 
							- 
								for (int i = 0; i < keywordList.Count; i++)
 
							 
							- 
								{
 
							 
							- 
								if (keywordList.ChildNodes[0].NodeType == System.Xml.XmlNodeType.CDATA)
 
							 
							- 
								{
 
							 
							- 
								Content = keywordList.ChildNodes[0].Value;
 
							 
							- 
								}
 
							 
							- 
								}
 
							 
							- 
								var time = DateTime.Now;
 
							 
							- 
								var textpl = "" +
 
							 
							- 
								"" +
 
							 
							- 
								"" + ConvertDateTimeInt(DateTime.Now) + "" +
 
							 
							- 
								"0 ";
 
							 
							- 
								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;
 
							 
							- 
								}
 
							 
							- 
								}
 
							 
							- 
								}
							
 
						 
					 
ƴa
				 
1.ǞCŽӿڵtokenǷͨ^, validעȥ 
 
2.ҪؽoÑֵ, עጵvalid
			 |