多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 微信公眾平臺消息體簽名及加解密實例(Java)

微信公眾平臺消息體簽名及加解密實例(Java)

來源:程序員人生   發布時間:2014-12-15 09:22:27 閱讀次數:7102次

前言:

      最近在研究微信公眾平臺的開發,玩得不亦樂乎。基本的回復功能已實現了,而且回復用到了圖靈機器人的接口。其實圖靈機器人已有微信接口可以直接調用。如果項目的需要,想要做個性化需求的話,用這類方式是行不通的。我現在的解決方案是,我開發的利用A作為中間層,連接微信接口與圖靈機器人接口。有點扯遠了,如題,微信官方為了更高的安全性,10月份推出了消息體簽名驗證。網上關于此項的實例不多,其實根據官方的例子,重新封裝1下,就能夠了。


1、準備工作:

1.已申請了相干的定閱號或服務號(可以用虛擬器,具體的方式沒試過,百度1下,有很多介紹);

2.已有了原來的公眾平臺交互利用A;

3.依照官網提示下載相干的示例代碼;

4.保證利用的JDK是1.6以上;

2、具體實現:

1.去官網設置消息加密方式,點擊“開發者中心”-》“修改配置”,這里為了調試,設置為“兼容模式”:


2.將官網下載的示例代碼導入利用中,我們只需關注其中重要的接口類:WXBizMsgCrypt和它的具體利用展現Program類;


3.根據自己的代碼利用場景,將WXBizMsgCrypt重新封裝1下:

AuthProcess.java

package cn.qtone.xxt.base.wechat.utils; import javax.servlet.http.HttpServletRequest; import cn.qtone.xxt.base.wechat.utils.aes.AesException; import cn.qtone.xxt.base.wechat.utils.aes.WXBizMsgCrypt; public class AuthProcess { public final static String Token = "xxxx";//公眾平臺上面自己填寫的Token public final static String EncodingAESKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//公眾平臺上面自己填寫的43位EncodingAESKey public final static String AppID = "wx488885e67d6c19e2";//利用的appid(微信生成的) /** * 將加密后的原文進行解密重新封裝 * @param request * @param originalXml 原xml * @return 重新解密后的xml */ public static String decryptMsg(HttpServletRequest request,String originalXml) { // 微信加密簽名 //String sVerifyMsgSig = request.getParameter("signature"); String msgSignature = request.getParameter("msg_signature"); // 時間戳 String timestamp = request.getParameter("timestamp"); // 隨機數 String nonce = request.getParameter("nonce"); try { WXBizMsgCrypt pc = new WXBizMsgCrypt(Token, EncodingAESKey, AppID); return pc.decryptMsg(msgSignature, timestamp, nonce, originalXml); } catch (AesException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 對需要回復的原文進行加密重新封裝 * @param request * @param replyXml 需要回復的xml * @return 重新加密后的xml */ public static String encryptMsg(HttpServletRequest request,String replyXml) { // 時間戳 String timestamp = request.getParameter("timestamp"); // 隨機數 String nonce = request.getParameter("nonce"); try { WXBizMsgCrypt pc = new WXBizMsgCrypt(Token, EncodingAESKey, AppID); return pc.encryptMsg(replyXml, timestamp, nonce); } catch (AesException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }

4.找到原來自動回復接口的流程代碼,在處理數據前后,加上要求數據解密,回復數據加密的流程(下面為關鍵代碼部份):

//加密消息處理 String encrypt_type =request.getParameter("encrypt_type"); if (StringTools.nil(encrypt_type) || encrypt_type.equals("raw")) {//不用加密 // 正常的微信處理流程 result = weChatService.processWechatMag(xml); } else {//需走加解密流程 //解密要求消息體 String nXmlString = AuthProcess.decryptMsg(request, xml); //履行原處理 String originalResult = weChatService.processWechatMag(nXmlString); //加密回復消息體 result = AuthProcess.encryptMsg(request, originalResult); }
總結:經測試,以上流程是成功的,但中間出現1點小狀態,需要特別說明1下,這里引述1下官方FAQ的其中1個我遇到的問題及他們的解決方案:

  • 異常java.security.InvalidKeyException:illegal Key Size的解決方案:在官方網站下載JCE無窮制權限策略文件(請到官網下載對應的版本, 例如JDK7的下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jce⑺-download⑷32124.html下載后解壓,可以看到local_policy.jar和US_export_policy.jar和readme.txt,如果安裝了JRE,將兩個jar文件放到%JRE_HOME%libsecurity目錄下覆蓋原來的文件;如果安裝了JDK,將兩個jar文件放到%JDK_HOME%jrelibsecurity目錄下覆蓋原來文件
我用的是jdk1.6.0_31,所以需要下載相干的文件并進行了覆蓋,下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jce⑹-download⑷29243.html


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品在线视频观看 | 中文字幕中文字幕在线 | 双性h啪啪樱桃动漫直接观看 | 在线播放一区二区三区 | 91久久精品一区二区三区 | 国产精品一区二区久久精品 | 欧美一级日韩一级 | 中文字幕天堂 | 中文字幕视频在线观看 | 亚洲国产成人99精品激情在线 | 午夜色站 | 一区二区成人国产精品 | 波多野结衣一二区 | 亚洲精品视频在线看 | 国产福利在线免费观看 | 久久国产精品亚洲 | 成人免费视频一区 | 亚洲色大成网站www 亚洲色大成网站www久久九九 | 九一精品 | 成人69视频在线观看免费 | 中文字幕 亚洲 一区二区三区 | 欧美日韩成人在线观看 | 精品国产精品 | 国产中的精品suv一区二区 | 成人淫片免费视频95视频 | 伊人成伊人成综合网2222 | 五月天婷五月天综合网在线 | 国产精品福利网站 | 2021国产精品一区二区在线 | 日本一区2区 | 波多野结衣在线观看3人 | 精品国产免费人成在线观看 | 尤物网站永久在线观看 | 亚洲久久在线 | 高清欧美性猛交xxxx黑人猛交 | 一区二区三区 亚洲区 | 日韩欧美亚洲另类 | 久久福利资源站免费观看i 久久高清一级毛片 | 亚洲天堂图片 | 我的奶好大想被男人吃奶 | 国产精品亚洲专一区二区三区 |