前不久,微信的企業號使用了強制的訊息加密方式,隨後公眾號也加入了可選的訊息加密選項。目前企業號和公眾號的加密方式是一致的(格式會有少許差別)。
加密設定
進入公眾號後臺的“開發者中心”,我們可以看到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
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(一):微信公眾平臺註冊
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(二):成為開發者
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(三):微信公眾平臺開發驗證
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(四):Hello World
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(五):使用Senparc.Weixin.MP SDK
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(六):瞭解MessageHandler
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(七):解決使用者上下文(Session)問題
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(八):通用介面說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(九):自定義選單介面說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十):多客服介面說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十一):高階介面說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十二):OAuth2.0說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十三):地圖相關介面說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十四):請求訊息去重
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十五):訊息加密
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十六):AccessToken自動管理機制
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十七):個性化選單介面說明
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(十八):Web代理功能