您的位置:首页 > 移动开发 > 微信开发

java servlet处理微信企业号回调模式

2014-11-13 09:45 471 查看
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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息