以下代码来自网路,
微信开放平台开发模式 已经开启,
现在主要是想了解下  接受信息,以及自动回复是如何实现的,下面有代码,但是我这边测试没有成功!高手指点下,谢谢!<%@ 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

解决方案 »

  1.   

    又在网上找到了这段代码,
    到底哪一些管用呢?这段代码目前还没有完善,如何去写呢??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();
            }
        }
    }