這幾天申請了一個企業公眾號玩一玩。當我們想在基於微信平台再次開發時,首先需要解決的是開啟開發者模式。
1.怎樣申請企業公眾號,請見相關參考文獻,網上有很多。
2.進入開啟企業公眾號開發者模式時,首先要開啟回調模式。
3.在開啟回調模式時,我們先要在應用中心創建一個應用中心。



8.當你開啟應用的回調模式時,企業號會要求你填寫應用的URL、Token、EncodingAESKey三個參數。 URL是企業應用接收企業號推送請求的訪問協議和地址,支持http或https協議。 Token可由企業任意填寫,用於生成簽名。EncodingAESKey用於消息體的加密,是AES密鑰的Base64編碼。驗證URL、Token以及加密的詳細處理請參考后續'接收消息時的加解密處理'的章節。企業可以直接使用微信提供的庫進行加解密的處理,目前提供的有c++/python/php/java/c#等語言版本。代碼提供了解密、加密、驗證URL三個接口,可根據自身需要下載 (參見附錄的加解密庫下載)。項目中的com.qq.weixin.mp.aes中的.java文件就是從官方下載。
然后自己再編寫一個servlet來接受微信服務器回調時調用的GET方法。項目中是CoreServlet.java。它的GET方法如下:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 // 設置編碼 5 response.setContentType("text/html;charset=utf-8"); 6 // response.setCharacterEncoding("utf-8"); 7 request.setCharacterEncoding("utf-8"); 8 9 // 企業號的基本信息,配置時填寫 10 String sToken = "weixin"; 11 String sCorpID = "sCorpID"; 12 String sEncodingAESKey = "sEnCodingAESKey"; 13 14 try 15 { 16 WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, 17 sCorpID); 18 19 // 解析出url上的參數值如下: 20 21 String sVerifyMsgSig = URLDecoder.decode( 22 request.getParameter("msg_signature"), "utf-8"); 23 String sVerifyTimeStamp = URLDecoder.decode( 24 request.getParameter("timestamp"), "utf-8"); 25 String sVerifyNonce = URLDecoder.decode( 26 request.getParameter("nonce"), "utf-8"); 27 String sVerifyEchoStr = URLDecoder.decode( 28 request.getParameter("echostr"), "utf-8"); 29 30 // String sVerifyMsgSig = 31 // "5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3"; 32 // String sVerifyTimeStamp = "1409659589"; 33 // String sVerifyNonce = "263014780"; 34 // String sVerifyEchoStr = 35 // "P9nAzCzyDtyTWESHep1vC5X9xho/qYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp+4RPcs8TgAE7OaBO+FZXvnaqQ=="; 36 37 PrintWriter out = response.getWriter(); 38 String sEchoStr; // 需要返回的明文 39 try 40 { 41 sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, 42 sVerifyNonce, sVerifyEchoStr); 43 System.out.println("verifyurl echostr: " + sEchoStr); 44 // 驗證URL成功,將sEchoStr返回 45 out.print(sEchoStr); 46 out.close(); 47 out = null; 48 } 49 catch (Exception e) 50 { 51 e.printStackTrace(); 52 } 53 54 } 55 catch (AesException e1) 56 { 57 e1.printStackTrace(); 58 } 59 }
注意:代碼中的sCorpID是你自己企業的sCorpID,sEncodingAESKey和你在輸入驗證URL時的sEncodingAESKey保持一致。
完成以上步驟,然后打成war部署到雲服務器上,這樣基本就可以了。
總結下自己在驗證時出現的問題:
1、myeclipse編譯器的jdk和tomcat服務器的jdk不同,導致項目不能在本地服務器跑Windows=>preference=>Java=>Compiler / windows=>preference=>myeclipse=>servers
2、特別注意的是:jdk版本必須是1.6及以上;需要替換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目錄下覆蓋原來文件。這里我耽擱了比較久。