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

来源:互联网 发布:双十一京东数据 编辑:程序博客网 时间:2024/06/05 01:54
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);    }}

0 0
原创粉丝点击