2014年9月17日,微信發(fā)布了期待已久的企業(yè)號(hào)。網(wǎng)上關(guān)于企業(yè)號(hào)的教程幾乎還沒有,所以這里分享一下的我的開發(fā)經(jīng)驗(yàn)。
由于公司用的還是老版本的resin2.1服務(wù)器,對(duì)于一些官方方法并不支持,增加了很多麻煩,這里也歡迎和我有相同經(jīng)歷的同學(xué)留言咱們一起探討一下。
對(duì)比于訂閱號(hào)和服務(wù)號(hào)的開發(fā),企業(yè)號(hào)的開發(fā)顯得更加復(fù)雜一點(diǎn)。這大概也是騰訊考慮到企業(yè)信息安全性要求比較高的緣故,在消息的收發(fā)和一些驗(yàn)證上都增加了加密解密的操作。這就需要開發(fā)者認(rèn)真去閱讀官方說明(其實(shí)通過官方說明你可以解決幾乎所有問題),接下來我開啟回調(diào)模式的步驟:
1、申請(qǐng)企業(yè)號(hào):這個(gè)步驟這里就不詳細(xì)贅述了,可以參考 http://jingyan.baidu.com/article/8065f87ff7db25233124980d.html
2、設(shè)置通訊錄:這是開啟回調(diào)模式必須的
3、在應(yīng)用中心增加應(yīng)用:增加完之后點(diǎn)開應(yīng)用你就可以看到開啟回調(diào)模式的入口了,然后就是按它的提示輸入相關(guān)參數(shù)。這里也不贅述了。
4、準(zhǔn)備遠(yuǎn)程服務(wù)器:這一步其實(shí)應(yīng)該是最早做的,你可以自己申請(qǐng)域名空間,也可以用新浪百度的云空間。
5、進(jìn)入后臺(tái)程序開發(fā)階段:核心QYCoreServlet 代碼如下,該類中引用的一些工具類都是騰訊官方提供的
官方工具類下載鏈接:http://qydev.weixin.qq.com/wiki/index.php?title=加解密庫下載與返回碼,找到對(duì)應(yīng)java的即可
特別注意的是:jdk版本必須是1.6及以上;需要替換JCE無限制權(quán)限策略文件,JDK7的下載地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html下載后解壓,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。如果安裝了JRE,將兩個(gè)jar文件放到%JRE_HOME%libsecurity目錄下覆蓋原來的文件,如果安裝了JDK,將兩個(gè)jar文件放到%JDK_HOME%jrelibsecurity目錄下覆蓋原來文件。這里我耽擱了比較久。
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 {
/*
------------驗(yàn)證回調(diào)URL---------------
*企業(yè)開啟回調(diào)模式時(shí),企業(yè)號(hào)會(huì)向驗(yàn)證url發(fā)送一個(gè)get請(qǐng)求
接收到該請(qǐng)求時(shí),企業(yè)應(yīng)
1.解析出Get請(qǐng)求的參數(shù),包括消息體簽名(msg_signature),時(shí)間戳(timestamp),隨機(jī)數(shù)字串(nonce)以及公眾平臺(tái)推送過來的隨機(jī)加密字符串(echostr),這一步注意作URL解碼。
2.驗(yàn)證消息體簽名的正確性
3. 解密出echostr原文,將原文當(dāng)作Get請(qǐng)求的response,返回給公眾平臺(tái)
第2,3步可以用公眾平臺(tái)提供的庫函數(shù)VerifyURL來實(shí)現(xiàn)。
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//設(shè)置編碼
response.setContentType("text/html;charset=utf-8");
//response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
//企業(yè)號(hào)的基本信息,配置時(shí)填寫
String sToken = "your token";
String sCorpID = "your CorpID";
String sEncodingAESKey = "your EncodingAESKey ";
try {
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
// 解析出url上的參數(shù)值如下:
//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);
// 驗(yàn)證URL成功,將sEchoStr返回
out.print(sEchoStr);
out.close();
out = null;
} catch (Exception e) {
//驗(yàn)證URL失敗,錯(cuò)誤原因請(qǐng)查看異常
e.printStackTrace();
}
} catch (AesException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO 接收用戶信息后的操作
}
}
6、將程序發(fā)布到遠(yuǎn)程服務(wù)器。
到這里基本就成功了,希望對(duì)大家有幫助。