网站地图    收藏   

主页 > 后端 > 微信开发 >

微信成为开发者C#代码 - 微信公众平台开发:微信

来源:自学PHP网    时间:2015-04-14 12:58 作者: 阅读:

[导读] 第一句话都会这么去写:程序猿就是苦逼,除了开发还要会写博文!今天咱就和大家探讨下如何让自己成为开发者!那么怎么才能成为开发者呢?首先给大家一个微信的截图,看到这个...

第一句话都会这么去写:程序猿就是苦逼,除了开发还要会写博文!今天咱就和大家探讨下如何让自己成为开发者!那么怎么才能成为开发者呢?

首先给大家一个微信的截图,看到这个截图,是不是有想去尝试的冲动?


 

C#开发微信,一般都要写一个一般处理程序,就像截图中的.../CommonCS/WeiXin.ashx,这个一般处理程序会接收用户消息或开发者进行的事件推送。例如:用户关注时,微信服务器会将关注的数据包转发到咱们写的一般处理程序上。再例如:取消关注,用户发送文本消息,开发者群发消息等等吧!好多呢,在此不一一举例了。

现在进入正题,直接贴代码,然后再作讲解:

 

      

  #region 程序入口
        /// <summary>
        /// 程序入口
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
           
            context.Response.ContentType = "text/plain";
            
            try
            {
                if (HttpContext.Current.Request.HttpMethod.ToUpper() == "GET")
                {
                    Auth(); //微信接入的测试  成为开发者第一步
                }
                if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
                {
                 
                }
            }
            catch(Exception ex)
            {
                LogHelper.WriteLog("系统故障。", ex);
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
        #endregion


 

LogHelper.WriteLog("系统故障。", ex);在此,我使用的是Log4Net,用于记录系统出现的错误。当然你也可以自己写一个日志类,不过没有Log4Net强大罢了。在此,我提供一些日志方法,仅供参考。如下:

 

#region 日志类 记录异常和消息  注:在本系统中,请勿使用。请使用Log4Net

   

     #region 字段
        public static object _lock = new object();
        #endregion

        #region 写文件
        /// <summary>
        /// 写文件
        /// </summary>
        public static void WriteFile(string log, string path)
        {
            Thread thread = new Thread(new ParameterizedThreadStart(delegate(object obj)
            {
                lock (_lock)
                {
                    if (!File.Exists(path))
                    {
                        using (FileStream fs = new FileStream(path, FileMode.Create)) { }
                    }

                    using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
                    {
                        using (StreamWriter sw = new StreamWriter(fs))
                        {
                            #region 日志内容
                            string value = string.Format(@"{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), obj.ToString());
                            #endregion

                            sw.WriteLine(value);
                            sw.Flush();
                        }
                    }
                }
            }));
            thread.Start(log);
        }
        #endregion

        #region 写日志
        /// <summary>
        /// 写日志
        /// </summary>
        public static void WriteLog(HttpContext context, string log)
        {
            string logPath = context.Request.MapPath(@"\CommonCS\WX_Log.txt");
            WriteFile(log, logPath);
        }
        #endregion

        #region 写错误日志
        /// <summary>
        /// 写错误日志
        /// </summary>
        public static void WriteErrorLog(HttpContext context, string log)
        {
            string logPath = context.Request.MapPath(@"\CommonCS\WX_ErrorLog.txt");
            WriteFile(log, logPath);
        }
        #endregion

        #endregion





#region 成为开发者
        /// <summary>
        /// 验证微信签名
        /// </summary>
        public bool CheckSignature(string token, string signature, string timestamp, string nonce)
        {
            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;
            }
        }


        /// <summary>
        /// 成为开发者的第一步,验证并相应服务器的数据
        /// </summary>
        private void Auth()
        {
            string token = GetXMLstr("URLToken");//自己填写的Token  和开启开发者模式时填写的一样。
            if (string.IsNullOrEmpty(token))
            {
                //LogTextHelper.Error(string.Format("WeixinToken 配置项没有配置!"));
            }

            string echoString = HttpContext.Current.Request.QueryString["echostr"];
            string signature = HttpContext.Current.Request.QueryString["signature"];
            string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
            string nonce = HttpContext.Current.Request.QueryString["nonce"];

            if (CheckSignature(token, signature, timestamp, nonce))
            {
                if (!string.IsNullOrEmpty(echoString))
                {
                    HttpContext.Current.Response.Write(echoString);
                    // HttpContext.Current.Response.End();
                }
            }
        }
        #endregion

将上述代码复制粘贴到你的一般处理程序中。

上述红色部分,和你启用开发者模式时填写的一样。不过,我将这些信息放在了XML文件中,你也可以直接赋值给它

string token="shengshiguanqian";这些代码网上很多,自己写好这个处理程序后,发布到服务器,然后按照要求进行微信开发的服务器配置,路径要写对,Token要和开发中的Token一样。也就是本博客中的红色字体。你懂得。

后续,我还会陆陆续续的写一些关于微信的博客。在此,感谢做C#的大神公开的代码,今天我学会了,也公开啦!无私奉献是一个程序员最美的美德。嘻嘻。

 

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论