Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

  前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项。目前企业号和公众号的加密方式是一致的(格式会有少许差别)。

加密设置

  进入公众号后台的“开发者中心”,我们可以看到Url对接的设置:

  

  点击【修改设置】,可以进入到修改页面:

  

  加密的方式一共有3种:

  • 明文模式,即原始的消息格式
  • 兼容模式,明文、密文将共存,正式发布的产品不建议使用(因为仍然包含了明文,达不到加密的效果)
  • 安全模式,这种模式下消息将会被加密,开发者的服务器可以通过官方给出的算法进行解密,得到明文模式下的消息原文。

  凡是加密的消息,返回的信息也需要经过加密。

处理加密信息

  Senparc.Weixin.MP已经对三类消息作了自动判断,开发的过程中无需关注任何解密和加密的过程,仍然保持“明文模式”下的开发过程即可。

  对应的MessageHandler中,我们可以通过一些参数得知目前的加密状态:

  messageHandler.UsingEcryptMessage:是否使用了加密信息(包括兼容模式和安全模式)

  messageHandler.UsingCompatibilityModelEcryptMessage:是否使用了兼容模式加密信息

  通过上面2个属性的组合,我们便可以知道目前账号使用的是哪种加密模式(当然,大多数情况下开发者已经无需关心)。

  为了可以更好地跟踪信息,MessageHandler新加入了FinalResponseDocument这个属性:

  messageHandler.ResponseDocument:明文结构的响应数据XML对象

  messageHandler.FinalResponseDocument:最终会返回给服务器的XML对象,在不加密的情况下将和ResponseDocument一致,否则会自动进行加密

加密原理

  有关加密的算法(包括几种语言的示例下载)在官方的帮助文档里面可以找到:http://mp.weixin.qq.com/wiki/index.php?title=%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88

  这里要说明一下的是EncodingAESKey,官方的解释有点绕。实际上EncodingAESKey是对AESKey的一次Base64编码处理,而AESKey是一个长度为32的随机字符串(从a-z,A-Z,0-9中选取)。由于32个字符的Base64编码长度为固定的44(最后一个字符为=),所以去掉=之后,就生成了最终的43个字符长度的EncodingAESKey。EncodingAESKey在消息加密和解密的过程中都会用到,需要进行严格的保密。

  下面是一段C#生成EncodingAESKey的代码:

protected string CreateEncodingAESKey()
        {
            string aesKey = GetRadomStr(32);//获得a-z,A-Z,0-9的随机字符串
            var encodingAesKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(aesKey), Base64FormattingOptions.None);
            return encodingAesKey.Substring(0, encodingAesKey.Length - 1);
        }

 

  系列教程索引:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

时间: 2024-09-14 22:19:24

Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密的相关文章

Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK     Senparc.Weixin.MP SDK已经涵盖了微信5.0的所有公共API,以及2013年10月29日升级之后大部分实用的接口.     整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu/WeiXinMPSDK       我们现在从无到有建立一个ASP.NET MVC项目,来看一下如何与微

Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler     上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK对接微信最基础的验证API,这一篇我们将具体讲一下这个SDK处理微信消息的核心:MessageHandler.     有关MessageHandler的实现原理和说明,在这篇Wiki中已经

Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明 紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAuth2.0的运作模式: 从上图我们可以看到,整个过程进行了2次"握手",最终利用授权的AccessToken进行一系列的请求,相关的过程说明如下: A:由客户端向服务器发出验证请求,请求中

Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明     这里所说的高级接口是指面向通过认证的服务号开通的高级功能.     高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账号都可开通) OAuth2.0(相对比较复杂,后面会有专门介绍) 以上所有的接口都包含在Senparc.Weixin.MP.AdvancedAPIs命名空间下. 一些共同的操作 几乎所有的高

Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明 一.基础说明     这里说的"通用接口(CommonAPIs)"是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式).     我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(AccessToken),然后使用访问令牌去使用各项需要身份验证的高级功能,例如自定义菜单.获取用户信息.单发消息.群发消息等等.     目前所有的服务号和通过认证的订阅号,都可以在微信公众账

Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册     微信公众平台(下面简称"公众平台")注册步骤和导航还是比较流畅的,因此这个教程对于上网经验丰富的朋友来说,有点多余.不过为了保持教程系列的完整性,这里还是认认真真把流程梳理一遍.   第一步:进入公众平台地址:https://mp.weixin.qq.com  第二步:如果还没有账号,点击右上角的立即注册按钮. 第三步:填写"1.基本信息",并点击[注册]: 第四

Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者     这一篇主要讲作为一名使用公众平台接口的开发者,你需要知道的一些东西.其中也涉及到一些微信官方的规定或比较掩蔽的注意点.欢迎补充!     我觉得做好成为开发者的准备比稀里糊涂开通微信后台的"高级"功能更重要,所以这一节先放在前面说. 一.公众平台的通讯过程     作为开发者,我们需要面对的主要有两个对象:微信服务器和应用程序(网站)服务器.     当微信用户向你的公众平台发送一条消息,

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证     要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现"高级功能"菜单.     使用"高级功能">"开发模式"之前,必须有一个已经部署在Internet

Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明 为了方便大家开发LBS应用,SDK对常用计算公式,以及百度和谷歌的地图接口做了封装. 常用计算: 用于计算2个坐标点之间的直线距离:Senparc.Weixin.MP.Helpers.Distance(double n1, double e1, double n2, double e2) 根据距离获取维度差:Senparc.Weixin.MP.Helpers.GetLatitudeDifferenc

Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重 为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都是一致的. 这种机制确保了在诸如网络状况不佳的情况下消息的回复成功率,但是有时候由于服务器负荷.本身请求过程就需要好几秒才能完成等情况,多次重复的消息反而成了服务器的负担,甚至对业务和数据也可能造成影响.