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); } }
相关文章推荐
- 微信企业号回调模式配置详解
- 微信企业号开启回调模式的时候,错误:echostr校验失败,请您检查是否正确解密并输出明文
- python 微信企业号-回调模式接收微信端客户端发送消息并被动返回消息
- 微信企业号开启回调模式--php
- 微信企业号,回调模式开通.net
- 微信企业号回调模式配置详细讲解
- Tp框架下的微信企业号开发中回调模式
- 微信企业号开发02 -开启应用回调模式
- Python+Flask 微信企业号开发二之开启回调模式
- 微信企业号--回调模式验证
- 微信企业号开发:启用回调模式
- 微信企业号开发(1)WebAPI在回调模式中的URL验证
- ruby on rails 关于微信企业号回调模式初步验证通过后再次签名验证失败的解决
- 【JEEWX企业号专题】JEEWX与微信企业号对接,激活应用回调模式
- 微信企业号应用回调模式开启
- 微信企业号开发之开启回调模式
- 微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决
- 微信企业号开发五:回调模式
- .net之微信企业号开发(三) 回调模式的接口开发
- 微信企业号开发之回调模式的接口开发