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

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

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#的大神公开的代码,今天我学会了,也公开啦!无私奉献是一个程序员最美的美德。嘻嘻。

哈哈,嘻嘻,我的蔻蔻:1429677330.有需要源码的可以加一下。谢谢。

微信成为开发者C#代码相关推荐

  1. WePY框架开发的小程序如何在微信web开发者工具中运行起来

    2019独角兽企业重金招聘Python工程师标准>>> 一.首先需要安装node.js,安装步骤如下: 首先下载安装包 https://nodejs.org/en/download/ ...

  2. 在哪里能收到python实例代码-python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移 ...

  3. 微信公众平台万能代码详解-php语言(二)

    1.基础知识在上一篇地址有讲解和图片,内容大致包括微信开发者模式后台配置.微信公众开发者文档代码详解. 2.本篇将粘贴出包括所有类型在内的消息处理办法,在开发者模式下用代码完成所有编辑模式的基础内容. ...

  4. h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)

    记录一个最近在微信端页面开发时出现的问题:页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白). 原因:pc端微信浏览器不支持es6,而我的代码使用了 le ...

  5. 微信公众号的代码块插入,及一键排版

    微信公众号:颜家大少 本文所用排版工具:http://md.aclickall.com . 微信公众号的排版问题 前段时间,准备在微信公众号上写文章时,却发现公众号居然连个最基本的插入代码块的功能都没 ...

  6. 微信公众平台开发(二) 微信公众平台示例代码分析

    http://www.cnblogs.com/mchina/archive/2013/06/07/3120592.html 微信公众平台开发(二) 微信公众平台示例代码分析 一.摘要 微信公众平台提供 ...

  7. 微信开发者工具项目wap.php,微信web开发者工具

    微信web开发者工具 微信开发者工具是用node-webkit,基于node.js和chromium的应用程序实时运行环境开发的.界面功能用React编写,wxml.wxss经过编译生成html和cs ...

  8. 微信开发者工具命令行_在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折.注:带 * 的步骤或文件为不确定是否管用的步骤或文件. 本人系统为Linux ...

  9. 微信第三方开发者答网友问 微信创业靠谱吗

    一.基础常识 1.所谓的第三方开发,就是腾讯公众平台内开放的开发者模式.用户可以根据个人不同的需求开发不同的功能. 2.开发模式后,有两个需要我们去填写的东西:一个是ur,一个是token:简单的解释 ...

最新文章

  1. Wireshark如何单独导出包的列信息
  2. 的数据湖_一文读懂云原生数据湖体系
  3. web.xml 通过contextConfigLocation配置spring 的方式
  4. [日常] DNS的迭代查询过程
  5. 有关AutoCompleteBox组件的研究[5][Final]_集成搜索引擎搜索建议(Search Suggestion)——Silverlight学习笔记[40]...
  6. Android之通过ActivityLifecycleCallbacks判断程序是否运行在后台
  7. 用 Git 操作的数据库?这个项目火了!
  8. 1的准确率_库存准确率总是100%正常吗?
  9. JAVA内存模型与线程安全
  10. 华为Mate30 Pro高清渲染图曝光:后置四摄+挖孔全面屏
  11. 搜狗输入法精简_韩语输入法软件哪个好?(手机版amp;电脑版)
  12. 多个 ng-app 中 Controllers Services 之间的通信
  13. vue、cnpm不是内部文件_选购办公室钢制文件柜花都文件柜厂家为我们全面解读这一块的知识...
  14. JDK_API官方标准中文版(希望对大家有用)
  15. Weblogic部署项目
  16. 剔除水印软件Inpaint 7.2 中文破解版 微笑一刀作品
  17. C++11_lambda表达式
  18. ps cc2019版为什么做图一复制图层就卡死_你所不知道的十个被藏起来的PS功能,超级实用!...
  19. 微信小程序 - excel通过云函数导入云数据库
  20. JS-节点的属性 获取各种节点(全)

热门文章

  1. Web PostMessage
  2. 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
  3. linux下sock_raw和sock_stream读取缓存的区别
  4. JavaScript求两点之间相对于Y轴的顺时针旋转角度
  5. 规划收发你的邮件,使用qq邮箱接收阿里云企业邮邮件
  6. 【选型】项目方案总体设计--选型
  7. JavaScript的一些小技巧(转)
  8. T-SQL远程数据库备份还原
  9. Unity3d优化文章
  10. c#没有指针导致的性能问题研究一二