您好,欢迎访问一九零五行业门户网

微信公众平台开发:消息加密

前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项。目前企业号和公众号的加密方式是一致的(格式会有少许差别)。
加密设置
进入公众号后台的“开发者中心”,我们可以看到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); }
更多微信公众平台开发:消息加密。
其它类似信息

推荐信息