package cn.com.lewis.wx.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import cn.com.lewis.wx.bean.AppInfo;
import cn.com.lewis.wx.common.WeiXinConfiger;
import cn.com.lewis.wx.service.RequestHandler;
import com.qq.weixin.mp.aes.AesException;
import com.qq.weixin.mp.aes.WXBizMsgCrypt;
/**
* 微信企業號被動接口監聽程序
*
*/
public class WeixinQYHPassiveServlet extends HttpServlet {
/**
* 自動生成的序列號
*/
private static final long serialVersionUID = 2690553754896029178L;
/**
* 校驗Token
* @param request
* @param response
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String sVerifyEchoStr = request.getParameter("echostr");
String sEchoStr=null; //需要返回的明文
try {
AppInfo app = WeiXinConfiger.getAppConfig(request);
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(app.getToken(), app.getAesKey(), app.getCorpCode());
String sVerifyMsgSig = request.getParameter("msg_signature");
String sVerifyTimeStamp = request.getParameter("timestamp");
String sVerifyNonce = request.getParameter("nonce");
sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,
sVerifyNonce, sVerifyEchoStr);
} catch (AesException e1) {
sEchoStr="ERR: "+e1.getCode()+ "\n\n";
e1.printStackTrace();
}
response.getWriter().print(sEchoStr);
response.getWriter().flush();
//將校驗寫入日誌
String strBackUrl = "http://" + request.getServerName() //服務器地址
+ ":"
+ request.getServerPort() //端口號
+ request.getContextPath() //項目名稱
+ request.getServletPath() //請求頁面或其他地址
+ "?" + (request.getQueryString()); //參數
RequestHandler.logInfo("完整的校驗url爲 "+strBackUrl);
}
/**
* 解析post提交的數據,並轉交給處理程序
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//獲得請求參數
String sReqMsgSig = request.getParameter("msg_signature");
String sReqTimeStamp = request.getParameter("timestamp");
String sReqNonce = request.getParameter("nonce");
//獲得post提交的數據
BufferedReader br=new BufferedReader(new InputStreamReader(request.getInputStream()));
StringBuilder sbuff=new StringBuilder();
String tmp=null;
while((tmp=br.readLine())!=null){
sbuff.append(tmp);
}
String sReqData = sbuff.toString();
String sEchoStr=null;
try {
AppInfo app = WeiXinConfiger.getAppConfig(request);
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(app.getToken(), app.getAesKey(), app.getCorpCode());
String sMsg = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, sReqData);
sEchoStr=RequestHandler.doHandle(sMsg,app);
sEchoStr = wxcpt.EncryptMsg(sEchoStr, sReqTimeStamp, sReqNonce);
} catch (AesException e1) {
sEchoStr="ERR: "+e1.getCode()+ "\n\n";
e1.printStackTrace();
} catch (ParserConfigurationException e) {
sEchoStr="ERR: "+AesException.ParseXmlError+ "\n\n";
e.printStackTrace();
} catch (SAXException e) {
sEchoStr="ERR: "+AesException.ParseXmlError+ "\n\n";
e.printStackTrace();
}
response.getWriter().print(sEchoStr);
}
}
java servlet處理微信企業號回調模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.