• 正好最近在研究微信公众平台开发,索性就记录下,分享下自己的心得,也分享下本人简单模仿asp.net运行机制所写的通用的微信公众平台开发.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
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
         #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

    广交四海豪杰:Q390915549,T15002122201
    展开全文
  • 微信公众号主要有以下几个步骤 微信公众号的通讯机制 微信公众号简介 1.注册微信公众号 2.注册测试公众号 3.搭建微信本地调试环境 1)下载客户端natapp: 2)安装natapp: 4.微信公众号接入(校验签名) 第1步中...
  • 微信公众号运营教(一)申请一个微信公众号 我们要创建一个个人公众号,首先需要申请一个公众号. 下面详细说说申请过程. 注册地址:https://mp.weixin.qq.com/ 或者直接搜索:微信公众号平台 填写注册信息:...
  • 微信公众号开发C# DEMO 2020-07-06 23:30:09
    微信公众号开发C# DEMO
  • 微信公众号运营教程(二)设置公众号&amp;amp;了解公众号的一些基本功能 经过上一篇教程微信公众号运营教程(一)申请一个微信公众号 我们已经申请好了自己的公众号,接下来我们要对公众号进行一些设置...
  • 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码) 3.C#/ASP.NET MVC微信公众号接口开发之从零开发...
  • 微信支付开发教程JAVA编[008]-wxsdk4java:微信公众号和微信支付开发的所有API功能点的封装及调用实例>>下载.(注:NET就不提供了,哥不会.除了哪位财神打赏些银子我做.^_^) 封装了微信公众号和微信支付开发的...
  • 1.装填spring-boot-starter-weixin依赖并完成快速开发框架的前置代码(README.md) pom.xml填写依赖 完整依赖 <dependencies> <dependency> <groupId>org.springframework.boot&...
  • 开发微信公众号,第一步当然是要注册:微信公众平台官网:https://mp.weixin.qq.com。关于注册就不具体介绍了,前期开发测试只需要注册个人订阅号即可,真正开发使用的是开发者工具里的测试号。微信官网已经提供了...
  •  微信支付开发系统开发流程及完整Demo展示3. 微信公共服务平台开发Net实现获取Access Token4. 微信公众平台开发文档获取用户地理位置5. 微信公共服务平台开发Net实现解决Access Token过期的问题6. 微信...
  • 微信公众号运营教程(三) 熟悉一些实用的工具 &amp;amp; 编写第一篇公众号推文 实用的一些工具 ①浏览器:Google Chrome谷歌浏览器 ②图片素材 首先,我们编写文章的时候,需要一些配图,大家可以在千库网 ...
  • 原文:C#微信公众号开发系列教程三(消息体签名及加解密) C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) ...
  • 使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复 目录 一、前提 二、基本配置信息简析 三、配置服务器地址(URL) 四、请求处理   一、前提  先申请微信公众号的授权,找到或配置几个关键...
  • 使用微信现金红包的3个流程 申请现金红包功能 添加微信现金红包模板 发放现金红包 开发演示demo 发红包 demo 下载 一、开通现金红包权限 在使用现金红包之前,请前往开通现金红包功能。操作路径:【登录微信...
  • 今天给大家分享的关注公众号自动推送图文消息,以及做一个超牛逼的机器人。 先看看效果。 发错图了。。。这是我昨天开发的一款机器人chu了会骂人啥都不会了。 我今天将它词库进行了更新和升级,接入了...
  • C#微信公众号开发系列教程二(新手接入指南) 原文:C#微信公众号开发系列教程二(新手接入指南) 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的...
  • 写一个可以自动从教务系统获取课程表、在上课前提醒的课程表项目。微信公众号开发,纯后端,拿来练习 Golang .
  • 微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号; 2)服务号可以申请自定义菜单; 3)使用QQ登录的公众号,...
  • C#开发微信订阅号、服务号
  • 微信公众号内支付(.Net版本)开发详尽流程分享
1 2 3 4 5 ... 20
收藏数 849
精华内容 339