微信公衆平臺企業號開發—開啓回調模式

2014年9月17日,微信發佈了期待已久的企業號。網上關於企業號的教程幾乎還沒有,所以這裏分享一下的我的開發經驗。

由於公司用的還是老版本的resin2.1服務器,對於一些官方方法並不支持,增加了很多麻煩,這裏也歡迎和我有相同經歷的同學留言咱們一起探討一下。

對比於訂閱號和服務號的開發,企業號的開發顯得更加複雜一點。這大概也是騰訊考慮到企業信息安全性要求比較高的緣故,在消息的收發和一些驗證上都增加了加密解密的操作。這就需要開發者認真去閱讀官方說明(其實通過官方說明你可以解決幾乎所有問題),接下來我開啓回調模式的步驟:

1、申請企業號:這個步驟這裏就不詳細贅述了,可以參考 http://jingyan.baidu.com/article/8065f87ff7db25233124980d.html 

2、設置通訊錄:這是開啓回調模式必須的

3、在應用中心增加應用:增加完之後點開應用你就可以看到開啓回調模式的入口了,然後就是按它的提示輸入相關參數。這裏也不贅述了。

4、準備遠程服務器:這一步其實應該是最早做的,你可以自己申請域名空間,也可以用新浪百度的雲空間。

5、進入後臺程序開發階段:核心QYCoreServlet 代碼如下,該類中引用的一些工具類都是騰訊官方提供的

官方工具類下載鏈接:http://qydev.weixin.qq.com/wiki/index.php?title=加解密庫下載與返回碼,找到對應java的即可

特別注意的是: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目錄下覆蓋原來文件。這裏我耽擱了比較久。


package com.hotbuysell.servlet;

import java.io.IOException;  
import java.io.InputStream;
import java.io.PrintWriter;  
import java.net.URLDecoder;
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import com.qq.weixin.mp.aes.AesException;
import com.qq.weixin.mp.aes.WXBizMsgCrypt;

public class QYCoreServlet extends HttpServlet {  
    /*
------------驗證回調URL---------------
*企業開啓回調模式時,企業號會向驗證url發送一個get請求 
接收到該請求時,企業應
1.解析出Get請求的參數,包括消息體簽名(msg_signature),時間戳(timestamp),隨機數字串(nonce)以及公衆平臺推送過來的隨機加密字符串(echostr),這一步注意作URL解碼。
2.驗證消息體簽名的正確性 
3. 解密出echostr原文,將原文當作Get請求的response,返回給公衆平臺
第2,3步可以用公衆平臺提供的庫函數VerifyURL來實現。
*/ 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //設置編碼
    response.setContentType("text/html;charset=utf-8");
         //response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        
        //企業號的基本信息,配置時填寫
    String sToken = "your token";
String sCorpID = "your CorpID";
String sEncodingAESKey = "your EncodingAESKey ";


try {
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);


// 解析出url上的參數值如下:
//URLDecoder.decode(request.getParameter("echostr"),"utf-8");
String sVerifyMsgSig = URLDecoder.decode(request.getParameter("msg_signature"),"utf-8");
String sVerifyTimeStamp = URLDecoder.decode(request.getParameter("timestamp"),"utf-8");
String sVerifyNonce = URLDecoder.decode(request.getParameter("nonce"),"utf-8");
String sVerifyEchoStr = URLDecoder.decode(request.getParameter("echostr"),"utf-8");
PrintWriter out = response.getWriter();  
String sEchoStr; //需要返回的明文
try {
sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce, sVerifyEchoStr);
System.out.println("verifyurl echostr: " + sEchoStr);
// 驗證URL成功,將sEchoStr返回
out.print(sEchoStr);  
out.close();  
   out = null; 
} catch (Exception e) {
//驗證URL失敗,錯誤原因請查看異常
e.printStackTrace();
}

} catch (AesException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
    }  
  
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO 接收用戶信息後的操作
    }
}  

6、將程序發佈到遠程服務器。

到這裏基本就成功了,希望對大家有幫助。

發佈了43 篇原創文章 · 獲贊 22 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章