Q 为什么要上线消息加密功能?
A 为了更好的保护用户和公众账号的信息安全。
Q 接入消息加解密功能复杂吗?
A 开发者接入消息加解密功能并不复杂,微信团队提供了5种语言的示例代码(包括C++、php、Python、Java和C#),对于使用这个5种语言的开发者,只需根据《消息加解密接入指引》,参考示例代码,调用微信公众平台提供的函数即可;而对于其他语言的开发者,需根据《消息加解密详细技术方案》编写相关代码。
Q 消息加密功能将带来哪些重要变化?
A 有如下几个方面:
选择明文模式时,收发消息的方式和原先相同,但安全系数较低,微信团队推荐开发者在兼容模式下开发调试,并升级到安全模式;
选择兼容模式时,消息包同时包括明文和密文,消息包的长度会相应增加到原来的3倍左右,开发者需检查系统,做好预留,防止因消息变长而接收出错;
兼容模式和安全模式下,公众平台服务器向公众账号服务器配置地址URL推送消息时,将会增加两个参数;
安全模式下,内容为纯密文,请提前做好接收消息的解密工作和回复消息的加密工作。
Q 什么是EncodingAESKey?
A 微信公众平台采用AES对称加密算法对推送给公众帐号的消息体对行加密,EncodingAESKey则是加密所用的秘钥。公众帐号用此秘钥对收到的密文消息体进行解密,回复消息体也用此秘钥加密。
Q 开发者如何判断消息是否被加密?什么情况下需要对回包进行加密?
A 请开发者根据URL参数来判断:url上无encrypt_type参数或者其值为raw,表示消息体仅含有明文,公众账号回复明文。encrypt_type为aes则表示消息体含有密文,公众账号回复密文(兼容模式期间回复明文或密文均可)。
Q 公众账号开发者上线加解密版本后,还需要保留明文解包和回包逻辑吗?
A 暂时先保留之前的逻辑,根据参数判断,也做成兼容模式比较好。
Q 常见错误举例
A 常见错误原因如:
xml格式不对:如<TimeStamp>写成了<Timestamp > (s小写了且p和>中间有空格)
公众平台网站提供了修改EncodingAESKey的功能,公众账号需要保存当前的和上一次的EncodingAESKey,若当前的EncodingAESKey解密失败,则尝试用上一次的EncodingAESKey解密。回包时,用哪个Key解密成功,则用此Key加密对应的回包
调用DecryptMsg解密时,传入的是url上的msg_signature,而不是signature
Java要求jdk 1.6及1.6以上
异常java.security.InvalidKeyException:illegal Key Size的解决方案:在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本, 例如JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt,如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件;如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件
Q 微信公众平台接口调试工具是否支持消息体加解密的在线调试?
A 点击http://mp.weixin.qq.com/debug