zoukankan      html  css  js  c++  java
  • 微信公众平台入门开发教程.Net(C#)框架

    一、序言

      一直在想第一次写博客,应该写点什么好?正好最近在研究微信公众平台开发,索性就记录下,分享下自己的心得,也分享下本人简单模仿asp.net运行机制所写的通用的微信公众平台开发.Net(c#)框架吧。由于本人知识有限、文字组织能力有限,如有错误或不足,请多多指教!

    二、微信公众平台.Net(C#)框架介绍

     

      运行流程:WeiXinRequestHandler.ashx接收微信服务器post请求,创建WeiXinApplication实例,构造函数中设置WeiContext(WeiXinRequest,WeiXinResponse)请求上下文属性,执行WeiXinApplication的GetResponseXml()方法,使用WeiXinHandlerFactory工厂类动态加载程序集,遍历程序集里的Type集合,反射获取控制器中的WeiXinMsgType属性值判断是否与请求消息上下文WeiXinRequest的WeiXinMsgType属性值一致创建相对应的消息处理控制器实例,并返回这个实例,赋值给WeiXinApplication中IWeiXinHandler属性值,调用ProcessWeiXin(WeiXinContext context)方法,执行完毕后,返回WeiXinResponse对象中的响应消息。

    三、微信公众平台注册/接入相关事宜

    1、注册:

      填写基本信息,激活邮箱,登记信息......公众号信息。值得一提的是:目前个人只允许注册订阅号,公司单位才能注册服务号,服务号可以实现自定义菜单;公众号名称一经确认就无法修改!

    2、接入:(必须条件:拥有自己的公网可访问的服务器)

       ①、成为开发者:在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,根据官方文档填写相关接口配置信息并提交。

       ②、验证url有效性:开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

    参数描述
    signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
    timestamp 时间戳
    nonce 随机数
    echostr 随机字符串

      开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

    加密/校验流程如下:
    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    验证工具类:UtilityHelper

         #region 检查加密签名是否一致 - public static bool CheckSignature(string signature, string timestamp, string nonce)
    
            /// <summary>
            /// 检查加密签名是否一致
            /// </summary>
            /// <param name="signature">微信加密签名</param>
            /// <param name="timestamp">时间戳</param>
            /// <param name="nonce">随机数</param>
            /// <returns></returns>
            public static bool CheckSignature(string signature, string timestamp, string nonce)
            {
                List<string> stringList = new List<string> {Token, timestamp, nonce};
                // 字典排序
                stringList.Sort();
                return Sha1Encrypt(string.Join("", stringList)) == signature;
            }
    
            #endregion
    
            #region 对字符串SHA1加密 - public static string Sha1Encrypt(string targetString)
    
            /// <summary>
            /// 对字符串SHA1加密
            /// </summary>
            /// <param name="targetString">源字符串</param>
            /// <returns>加密后的十六进制字符串</returns>
            private static string Sha1Encrypt(string targetString)
            {
                byte[] byteArray = Encoding.Default.GetBytes(targetString);
                HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider();
                byteArray = hashAlgorithm.ComputeHash(byteArray);
                StringBuilder stringBuilder = new StringBuilder();
                foreach (byte item in byteArray)
                {
                    stringBuilder.AppendFormat("{0:x2}", item);
                }
                return stringBuilder.ToString();
            }
    
            #endregion
    
            #region 根据加密类型对字符串SHA1加密 - public static string Sha1Encrypt(string targetString, string encryptType)
    
            /// <summary>
            /// 根据加密类型对字符串SHA1加密
            /// </summary>
            /// <param name="targetString">源字符串</param>
            /// <param name="encryptType">加密类型:MD5/SHA1</param>
            /// <returns>加密后的字符串</returns>
            private static string Sha1Encrypt(string targetString, string encryptType)
            {
                return FormsAuthentication.HashPasswordForStoringInConfigFile(targetString, encryptType);
            }
    
            #endregion
    

      

    四、微信公众平台运行原理介绍

     

    五、结束

      字穷了...~~~!附源码吧。看web.config,打开Test.html进行测试。添加自己的消息控制器必须继承WeiXinHandlerType,程序集生成插件目录bin/WeiXinPlugins。

    源码下载:WeiXin.Framework

  • 相关阅读:
    unsupported jsonb version number 123
    如何在MPlayer上支持RTSP
    TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos
    如何使用IoTSharp对接ModBus?
    如何从源码启动和编译IoTSharp
    Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
    MQTTnet 的Asp.Net Core 认证事件的扩展
    Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
    The remote certificate is invalid according to the validation procedure 远程证书验证无效
    settings插拔式源码
  • 原文地址:https://www.cnblogs.com/GodX/p/3678651.html
Copyright © 2011-2022 走看看