package com.gustz.dove.cli.sdk.web; import java.io.IOException; import java.io.InputStream; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import com.gustz.dove.cli.sdk.base.service.ICliMsgReceiver; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sinovatech.rd.wcsb.cli.api.service.util.CliAppHelper; import com.sinovatech.rd.wcsb.cli.api.service.util.CliAppHelper.OauthCbUrl; /** * TODO: 微信服务平台消息接收servlet * * @author ZHENFENG ZHANG * @since [Jan 27, 2015] */ public class WsCliReceiveSlet extends GenericServlet { private static final long serialVersionUID = 1L; /** * 微信OAUTH授权回调地址 */ public static String wcOauthCbUrl = ""; @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { InputStream ins = null; try { ins = req.getInputStream(); String fromUserName = new InnerMsgReceiver(this.getCliMsgReceiver()).getReturnMsg(IOUtils.toString(ins)); // res.getWriter().write(fromUserName); } catch (Exception e) { throw new IllegalStateException(e); } finally { if (ins != null) { ins.close(); } } } private class InnerMsgReceiver { private final Logger logger = LoggerFactory.getLogger(getClass()); private ICliMsgReceiver cliMsgReceiver; public InnerMsgReceiver(ICliMsgReceiver cliMsgReceiver) { this.cliMsgReceiver = cliMsgReceiver; } /** * 获取返回的消息 * * @param msg * @throws Exception */ public String getReturnMsg(String msg) throws Exception { try { // 获取返回的消息1. final CliAppHelper helper = new CliAppHelper(); final String fromUserName = helper.getReturnMsg(msg, new OauthCbUrl() { @Override public void setOauthCbUrl(final String url) { if (url == null || url.isEmpty()) { throw new IllegalStateException("无法接收OAuth授权的回调URL"); } if (wcOauthCbUrl == null || wcOauthCbUrl.isEmpty()) { wcOauthCbUrl = url; } } }); // 处理业务消息2... if (cliMsgReceiver != null) { cliMsgReceiver.doMsgReceiver(helper.getMsgReq()); } else { logger.warn("Not found 'Impl class of MsgReceiver'! "); } // 返回值3. logger.info("进入客户端应用的用户帐号:{} ", fromUserName); return fromUserName; } catch (Exception e) { logger.error("获取返回的消息异常\n", e); throw e; } } } /** * 获取客户消息接收服务 * * @return */ protected ICliMsgReceiver getCliMsgReceiver() { return null; } }