微信企業號回撥模式配置詳細講解
阿新 • • 發佈:2020-10-09
轉載請標明出處,尊重他人勞動成果,謝謝~!
前幾天微信推出了企業號,我就進去關注了一下,發現用途大大的多,就順手整了一個測試號來試試,由於是新出的玩意兒,很多東西有文件也不到一定知道整,我這個配置就花了蠻久才找到失敗的原因,最終是借用了浩然哥的伺服器,才驗證了我的猜想,也就是我們群主說的jec加解密包必須與JDK version一致,下面說說詳細的配置吧
首先你需要一個加解密包,這個官方有提供壓縮檔案的,我貼上地址給大家:
http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5%AF%86%E5%BA%93%E4%B8%8B%E8%BD%BD%E5%92%8C%E8%BF%94%E5%9B%9E%E7%A0%81
這個連線裡面有4個語言的庫檔案:java\php\python\c#
我的是java的,然後下載一個jar包,不下也無所謂,上面說的4個語言庫包裡自帶了那個jar,也就是 commons-codec-1.9,
注意:jec包要與環境的JDK版本一致,否則就算替換掉 local_policy.jar和US_export_policy.ja依舊會失敗,我開始就是這種情況,請大家一定要注意環境配置的JDK的版本是否與jec一致
Linux java Path鍵入命令:which java
Windows javaPath :java -verbose
Linux示例圖:
Windows:
下載jec加解密檔案之後替換掉原來的檔案,注意備份哦,
JCE-7(此為JDK7適用)下載地址:
可以用框架,可以用其方式,看自己喜好~
我的應用架構圖:
核心配置、核心程式碼:
public class CoreServlet extends HttpServlet{ private String token = "xxxxxxx"; //可使用者自動生成、可自定義,需應用與後臺一致 private String encodingAESKey = "xxxxxxx"; //自動生成金鑰 private String corpId = "xxxxxxx"; //企業號ID /** * */ private static final long serialVersionUID = 4440739483644821986L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信加密簽名 String msg_signature = request.getParameter("msg_signature"); // 時間戳 String timestamp = request.getParameter("timestamp"); // 隨機數 String nonce = request.getParameter("nonce"); // 隨機字串 String echostr = request.getParameter("echostr"); System.out.println("request=" + request.getRequestURL()); PrintWriter out = response.getWriter(); // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗 String result = null; try { WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token,encodingAESKey,corpId); result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr); } catch (AesException e) { e.printStackTrace(); } if (result == null) { result = token; } // else{ // result = token; String str = msg_signature+" "+timestamp+" "+nonce+" "+echostr; System.out.println("Exception:"+result+" "+ request.getRequestURL()+" "+"FourParames:"+str); // } out.print(result); out.close(); out = null; } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 呼叫核心業務類接收訊息、處理訊息 String respMessage = CoreService.processRequest(request); System.out.println("respMessage=" + respMessage); // 響應訊息 PrintWriter out = response.getWriter(); out.print(respMessage); out.close(); }
}
回撥配置結果:
轉載請標明出處,尊重他人勞動成果,謝謝~!
前幾天微信推出了企業號,我就進去關注了一下,發現用途大大的多,就順手整了一個測試號來試試,由於是新出的玩意兒,很多東西有文件也不到一定知道整,我這個配置就花了蠻久才找到失敗的原因,最終是借用了浩然哥的伺服器,才驗證了我的猜想,也就是我們群主說的jec加解密包必須與JDK version一致,下面說說詳細的配置吧
首先你需要一個加解密包,這個官方有提供壓縮檔案的,我貼上地址給大家:
http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5%AF%86%E5%BA%93%E4%B8%8B%E8%BD%BD%E5%92%8C%E8%BF%94%E5%9B%9E%E7%A0%81
這個連線裡面有4個語言的庫檔案:java\php\python\c#
我的是java的,然後下載一個jar包,不下也無所謂,上面說的4個語言庫包裡自帶了那個jar,也就是 commons-codec-1.9,
注意:jec包要與環境的JDK版本一致,否則就算替換掉 local_policy.jar和US_export_policy.ja依舊會失敗,我開始就是這種情況,請大家一定要注意環境配置的JDK的版本是否與jec一致
Linux java Path鍵入命令:which java
Windows javaPath :java -verbose
Linux示例圖:
Windows:
下載jec加解密檔案之後替換掉原來的檔案,注意備份哦,
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目錄下覆蓋原來檔案可以用框架,可以用其方式,看自己喜好~
我的應用架構圖:
核心配置、核心程式碼:
public class CoreServlet extends HttpServlet{ private String token = "xxxxxxx"; //可使用者自動生成、可自定義,需應用與後臺一致 private String encodingAESKey = "xxxxxxx"; //自動生成金鑰 private String corpId = "xxxxxxx"; //企業號ID /** * */ private static final long serialVersionUID = 4440739483644821986L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信加密簽名 String msg_signature = request.getParameter("msg_signature"); // 時間戳 String timestamp = request.getParameter("timestamp"); // 隨機數 String nonce = request.getParameter("nonce"); // 隨機字串 String echostr = request.getParameter("echostr"); System.out.println("request=" + request.getRequestURL()); PrintWriter out = response.getWriter(); // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗 String result = null; try { WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token,encodingAESKey,corpId); result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr); } catch (AesException e) { e.printStackTrace(); } if (result == null) { result = token; } // else{ // result = token; String str = msg_signature+" "+timestamp+" "+nonce+" "+echostr; System.out.println("Exception:"+result+" "+ request.getRequestURL()+" "+"FourParames:"+str); // } out.print(result); out.close(); out = null; } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 呼叫核心業務類接收訊息、處理訊息 String respMessage = CoreService.processRequest(request); System.out.println("respMessage=" + respMessage); // 響應訊息 PrintWriter out = response.getWriter(); out.print(respMessage); out.close(); }
}
回撥配置結果:
轉載請標明出處,尊重他人勞動成果,謝謝~!
轉載於:https://my.oschina.net/boltwu/blog/416466