微信自动回复接口


  1 //1.微信自动回复接口
 2 public void receiveMSG(HttpServletRequest request, HttpServletResponse response, @PathVariable(value = "comId")  3     String comId) throws Exception {  4         try {  5             boolean isGet = request.getMethod().toLowerCase().equals("get");  6             request.setCharacterEncoding("UTF-8");  7             response.setCharacterEncoding("UTF-8");  8             if (isGet) {  9                 // 验证URL真实性
 10                 String token = Utils.getParmValueByName(request, comId, "WeChat_Token", ""); // "rrtxxvafgargae";//  11                 String signature = request.getParameter("signature");// 微信加密签名
 12                 String timestamp = request.getParameter("timestamp");// 时间戳
 13                 String nonce = request.getParameter("nonce");// 随机数
 14                 String echostr = request.getParameter("echostr");// 随机字符串
 15                 List<String> params = new ArrayList<String>();  16                 params.add(token);// Token
 17  params.add(timestamp);  18  params.add(nonce);  19                 // 1. 将token、timestamp、nonce三个参数进行字典序排序
 20                 Collections.sort(params, new Comparator<String>() {  21  @Override  22                     public int compare(String o1, String o2) {  23                         return o1.compareTo(o2);  24  }  25  });  26                 // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
 27                 String temp = Utils.toShaString(params.get(0) + params.get(1) + params.get(2));  28                 // log.debug("temp:"+temp);  29                 // log.debug("signature:"+signature);
 30                 if (temp.equals(signature)) {  31  response.getWriter().write(echostr);  32  }  33             } else {  34                 // 处理接收消息
 35                 /** 读取接收到的xml消息 */
 36                 StringBuffer sb = new StringBuffer();  37                 InputStream is = request.getInputStream();  38                 InputStreamReader isr = new InputStreamReader(is, "UTF-8");  39                 BufferedReader br = new BufferedReader(isr);  40                 String s = "";  41                 while ((s = br.readLine()) != null) {  42  sb.append(s);  43  }  44                 String xml = sb.toString(); // 次即为接收到微信端发送过来的xml数据
 45                 HashMap<String, String> xmlmap = WeChatUtils.xml2HashMap(xml);  46  log.debug(xmlmap.toString());  47                 // 接收事件推送
 48                 String msgType = xmlmap.get("MsgType");  49                 if ("event".equals(msgType)) {  50                     String event = xmlmap.get("Event");  51                     if ("subscribe".equals(event)) {  52                         String msg = Utils.getParmValueByName(request, comId, "WeChat_SubscribeMsg", "您好,欢迎关注!");  53                         String xmlTo = "<xml>";  54                         xmlTo += "<ToUserName>" + xmlmap.get("FromUserName") + "</ToUserName>";  55                         xmlTo += "<FromUserName>" + xmlmap.get("ToUserName") + "</FromUserName>";  56                         xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>";  57                         xmlTo += "<MsgType>text</MsgType>";  58                         xmlTo += "<Content>" + msg + "</Content>";  59                         xmlTo += "</xml>";  60  response.getWriter().write(xmlTo);  61  }  62                     if ("subscribe".equals(event) || "SCAN".equals(event)) {  63                         log.debug("订阅");  64 
 65                         String sql = " select cust_id from WECHAT_CUST where com_id = ? and OPENID = ?  order by TYPE_BIND desc  ";  66                         ArrayList parms = new ArrayList();  67  parms.add(comId);  68                         parms.add(xmlmap.get("FromUserName"));  69                         String custId = utilsService.getValueBySql(sql, parms, "");  70                         if (StringUtils.isBlank(custId)) {  71                             String accessToken = WeChatUtils.getAccessToken(request, comId);  72                             String usermsg = WeChatUtils.getUserInfo(accessToken, xmlmap.get("FromUserName"));  73                             JSONObject jsonUser = WeChatUtils.string2JSON(usermsg);  74                             if (jsonUser.containsKey("errcode"))  75                                 throw new Exception(jsonUser.toString());  76 
 77                             Cust cust = new Cust();  78                             String cust_id = utilsService.getMemNum(comId);  79  cust.setCustId(cust_id);  80                             cust.setCustName(jsonUser.getString("nickname").replaceAll("'", "").replaceAll("\"", ""));  81                             cust.setCustShortName("");  82                             cust.setReturnlimitdays(99999);  83                             cust.setCustPwd("");  84  cust.setComId(comId);  85  cust.setCallRut(comId);  86                             cust.setInnerType("05");  87                             cust.setIsMkt("0");  88                             cust.setCustType5("1");  89                             cust.setStatus("02");  90                             cust.setCallState("M");  91                             cust.setTel("");  92                             cust.setIsTel("0");  93                             cust.setEmail("");  94                             cust.setIsWeb("0");  95                             if (!jsonUser.getString("sex").equals("1")) {  96                                 cust.setCallState("F");  97  }  98                             sql = " select min(MCP_CLS_ID)  from MEM_CLASS_POLICE where MCP_COM_ID = ? ";  99  parms.clear(); 100  parms.add(comId); 101                             String mcp_cls_id = utilsService.getValueBySql(sql, parms, ""); 102  cust.setCustType4(mcp_cls_id); 103                             CustOther custOther = new CustOther(); 104  custOther.setCustId(cust_id); 105                             if (xmlmap.containsKey("Ticket")) { 106                                 sql = " select cust_id  from WECHAT_CUST where TICKET = ? "; 107  parms.clear(); 108                                 parms.add(xmlmap.get("Ticket")); 109                                 String CorCusNum = utilsService.getValueBySql(sql, parms, ""); 110  cust.setCorCusNum(CorCusNum); 111                             } else { 112                                 cust.setCorCusNum(""); 113  } 114                             WechatCust wechatcust = new WechatCust(); 115  wechatcust.setComId(comId); 116  wechatcust.setCustId(cust_id); 117                             wechatcust.setOpenid(xmlmap.get("FromUserName")); 118                             wechatcust.setTicket(""); 119                             wechatcust.setHeadimgurl(jsonUser.getString("headimgurl")); 120                             wechatcust.setStatus("1"); 121  wechatcust.setCrtDate(Utils.GetCurrentDate()); 122                             wechatcust.setTypeBind("0"); 123                             wechatcust.setCancelDate(""); 124  weChatBaseService.addCust(cust, custOther, wechatcust); 125 
126                         } else if ("subscribe".equals(event)) { 127                             WechatCust wechatcust = new WechatCust(); 128  wechatcust.setComId(comId); 129  wechatcust.setCustId(custId); 130                             wechatcust = wechatCustService.findByPrimaryKey(wechatcust.getPrimaryKey()); 131                             Cust cust = custService.findByPrimaryKey(custId); 132                             if (StringUtils.isBlank(wechatcust.getHeadimgurl())) { 133                                 String accessToken = WeChatUtils.getAccessToken(request, comId); 134                                 String usermsg = WeChatUtils.getUserInfo(accessToken, xmlmap.get("FromUserName")); 135                                 JSONObject jsonUser = WeChatUtils.string2JSON(usermsg); 136                                 if (jsonUser.containsKey("errcode")) 137                                     throw new Exception(jsonUser.toString()); 138                                 String nickname = ""; 139                                 String sex = "1"; 140                                 String headimgurl = ""; 141                                 String ticket = ""; 142                                 try { 143                                     nickname = jsonUser.getString("nickname").replaceAll("'", "").replaceAll("\"", ""); 144                                     sex = jsonUser.getString("sex"); 145                                     headimgurl = jsonUser.getString("headimgurl"); 146                                     ticket = WeChatUtils.getQRCode(accessToken, custId).get("ticket").toString(); 147                                 } catch (Throwable e) { 148 
149  } 150 
151                                 wechatcust.setOpenid(xmlmap.get("FromUserName")); 152  wechatcust.setTicket(ticket); 153  wechatcust.setHeadimgurl(headimgurl); 154  wechatcust.setCrtDate(Utils.GetCurrentDate()); 155  cust.setCustName(nickname); 156                                 if (!sex.equals("1")) { 157                                     cust.setCallState("F"); 158  } 159  } 160                             wechatcust.setStatus("1"); 161  weChatBaseService.updateCust(cust, wechatcust); 162                             String updatesql = " update WECHAT_CUST set STATUS = '1' where com_id = ? and OPENID = ? "; 163                             String nowDate = Utils.GetCurrentDate(); 164  parms.clear(); 165  parms.add(comId); 166                             parms.add(xmlmap.get("FromUserName")); 167  utilsService.updateSql(updatesql, parms); 168  } 169 
170                     } else if ("unsubscribe".equals(event)) { 171                         log.debug("取消订阅"); 172                         String sql = " update WECHAT_CUST set STATUS = '0', CANCEL_DATE = ? where com_id = ? and OPENID = ? "; 173                         ArrayList parms = new ArrayList(); 174                         String nowDate = Utils.GetCurrentDate(); 175  parms.add(nowDate); 176  parms.add(comId); 177                         parms.add(xmlmap.get("FromUserName")); 178 
179  utilsService.updateSql(sql, parms); 180 
181                     }else if ("SCAN".equals(event)) { 182                         log.debug("用户已关注时的事件推送  "); 183                     } else if ("LOCATION".equals(event)) { 184                         log.debug("上报地理位置事件"); 185                     } else if ("CLICK".equals(event)) { 186                         log.debug("点击菜单拉取消息时的事件推送"); 187                         String eventKey = xmlmap.get("EventKey"); 188                         log.debug("eventKey:"+eventKey); 189                         if (StringUtils.equalsIgnoreCase("cust_service", eventKey)) { 190                             String fromUserName = xmlmap.get("FromUserName"); 191                             String sql = " select COR_CUS_NUM from  cust , wechat_cust where wechat_cust.cust_id = cust.cust_id "
192                                     + "    and wechat_cust.com_id = ? and wechat_cust.openid = ?  " + " order by wechat_cust.TYPE_BIND desc "; 193                             String mSql = " select MEDIA_ID from WECHAT_CUST_MEDIA where cust_id = ? and com_id = ? "; 194                             String custSql = "select COR_CUS_NUM from  cust where cust_id = ? "; 195                             ArrayList parms = new ArrayList(); 196  parms.add(comId); 197  parms.add(fromUserName); 198 
199                             String mediaId = ""; 200                             String custId = utilsService.getValueBySql(sql, parms, ""); 201                             int count = 0; 202                             while (StringUtils.isBlank(mediaId) && StringUtils.isNotBlank(custId) && count < 3) { 203                                 count++; 204  parms.clear(); 205  parms.add(custId); 206  parms.add(comId); 207                                 mediaId = utilsService.getValueBySql(mSql, parms, ""); 208                                 if (StringUtils.isBlank(mediaId)) { 209  parms.clear(); 210  parms.add(custId); 211                                     custId = utilsService.getValueBySql(custSql, parms, ""); 212  } 213  } 214                             if (StringUtils.isBlank(mediaId)) { 215                                 mediaId = Utils.getParmValueByName(request, comId, "WeChat_ServiceMediaId", ""); 216  } 217                             if (StringUtils.isNotBlank(mediaId)) { 218                                 log.debug("mediaId:"+mediaId); 219                                 String xmlTo = "<xml>"; 220                                 xmlTo += "<ToUserName>" + xmlmap.get("FromUserName") + "</ToUserName>"; 221                                 xmlTo += "<FromUserName>" + xmlmap.get("ToUserName") + "</FromUserName>"; 222                                 xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 223                                 xmlTo += "<MsgType>image</MsgType>"; 224                                 xmlTo += "<Image>"; 225                                 xmlTo += "<MediaId>" + mediaId + "</MediaId>"; 226                                 xmlTo += "</Image>"; 227                                 xmlTo += "</xml>"; 228  response.getWriter().write(xmlTo); 229                             }else { 230                                 String xmlTo = "<xml>"; 231                                 xmlTo += "<ToUserName>" + xmlmap.get("FromUserName") + "</ToUserName>"; 232                                 xmlTo += "<FromUserName>" + xmlmap.get("ToUserName") + "</FromUserName>"; 233                                 xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 234                                 xmlTo += "<MsgType>text</MsgType>"; 235                                 xmlTo += "<Content>还未绑定客服资料</Content>"; 236                                 xmlTo += "</xml>"; 237  response.getWriter().write(xmlTo); 238  } 239  } 240  } 241                 } else if ("text".equals(msgType)) {//回复文本
242                     String key = xmlmap.get("Content"); 243                     String xmlTo = "<xml>"; 244                     xmlTo += "<ToUserName>" + xmlmap.get("ToUserName") + "</ToUserName>"; 245                     xmlTo += "<FromUserName>" + xmlmap.get("FromUserName") + "</FromUserName>"; 246                     xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 247                     xmlTo += "<MsgType>text</MsgType>"; 248                     String repltSql="select * from  WECHAT_AUTO_KEY where WECHAT_AUTO_KEY.KEY_NAME = ? and WECHAT_AUTO_KEY.COM_ID=? "; 249                     ArrayList parms = new ArrayList(); 250  parms.add(key); 251  parms.add(comId); 252                     List replylist=utilsService.getDataList(repltSql, parms); 253                     String desc=""; 254                     if(replylist!=null && replylist.size()>0){ 255                          HashMap replyLine = (HashMap)replylist.get(0); 256                          desc=(String) replyLine.get("DESC"); 257  } 258                     if(StringUtils.isNotBlank(desc)) 259                         xmlTo += "<Content>" + desc + "</Content>"; 260                     else 
261                         xmlTo += "<Content>" + "查无内容" + "</Content>"; 262                     xmlTo += "</xml>"; 263  response.getWriter().write(xmlTo); 264                 }else if ("image".equals(msgType)) {//回复图片
265                     String key = xmlmap.get("MediaId"); 266                     String xmlTo = "<xml>"; 267                     xmlTo += "<ToUserName>" + xmlmap.get("ToUserName") + "</ToUserName>"; 268                     xmlTo += "<FromUserName>" + xmlmap.get("FromUserName") + "</FromUserName>"; 269                     xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 270                     xmlTo += "<MsgType>image</MsgType>"; 271                     xmlTo += "<Image>"; 272                     String repltSql="select * from  WECHAT_AUTO_KEY where WECHAT_AUTO_KEY.KEY_NAME = ? and WECHAT_AUTO_KEY.COM_ID=? "; 273                     ArrayList parms = new ArrayList(); 274  parms.add(key); 275  parms.add(comId); 276                     List replylist=utilsService.getDataList(repltSql, parms); 277                     String mediaId=""; 278                     if(replylist!=null && replylist.size()>0){ 279                          HashMap replyLine = (HashMap)replylist.get(0); 280                          mediaId=(String) replyLine.get("MEDIA_ID"); 281  } 282                     if(StringUtils.isNotBlank(mediaId)) 283                         xmlTo += "<MediaId>" + mediaId + "</MediaId>"; 284                     else 
285                         xmlTo += "<MediaId>" + "查无内容" + "</MediaId>"; 286                     xmlTo += "</Image>"; 287                     xmlTo += "</xml>"; 288  response.getWriter().write(xmlTo); 289                 }else if ("voice".equals(msgType)) {//回复语音
290                     String key = xmlmap.get("MediaId"); 291                     String xmlTo = "<xml>"; 292                     xmlTo += "<ToUserName>" + xmlmap.get("ToUserName") + "</ToUserName>"; 293                     xmlTo += "<FromUserName>" + xmlmap.get("FromUserName") + "</FromUserName>"; 294                     xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 295                     xmlTo += "<MsgType>voice</MsgType>"; 296                     xmlTo += "<Voice>"; 297                     String repltSql="select * from  WECHAT_AUTO_KEY where WECHAT_AUTO_KEY.KEY_NAME = ? and WECHAT_AUTO_KEY.COM_ID=? "; 298                     ArrayList parms = new ArrayList(); 299  parms.add(key); 300  parms.add(comId); 301                     List replylist=utilsService.getDataList(repltSql, parms); 302                     String mediaId=""; 303                     if(replylist!=null && replylist.size()>0){ 304                          HashMap replyLine = (HashMap)replylist.get(0); 305                          mediaId=(String) replyLine.get("MEDIA_ID"); 306  } 307                     if(StringUtils.isNotBlank(mediaId)) 308                         xmlTo += "<MediaId>" + mediaId + "</MediaId>"; 309                     else 
310                         xmlTo += "<MediaId>" + "查无内容" + "</MediaId>"; 311                     xmlTo += "</Voice>"; 312                     xmlTo += "</xml>"; 313  response.getWriter().write(xmlTo); 314                 }else if ("video".equals(msgType)) {//回复视频
315                     String key = xmlmap.get("MediaId"); 316                     String xmlTo = "<xml>"; 317                     xmlTo += "<ToUserName>" + xmlmap.get("ToUserName") + "</ToUserName>"; 318                     xmlTo += "<FromUserName>" + xmlmap.get("FromUserName") + "</FromUserName>"; 319                     xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 320                     xmlTo += "<MsgType>video</MsgType>"; 321                     xmlTo += "<Video>"; 322                     String repltSql="select * from  WECHAT_AUTO_KEY where WECHAT_AUTO_KEY.KEY_NAME = ? and WECHAT_AUTO_KEY.COM_ID=? "; 323                     ArrayList parms = new ArrayList(); 324  parms.add(key); 325  parms.add(comId); 326                     List replylist=utilsService.getDataList(repltSql, parms); 327                     String mediaId=""; 328                     String title=""; 329                     String desc=""; 330                     if(replylist!=null && replylist.size()>0){ 331                          HashMap replyLine = (HashMap)replylist.get(0); 332                          mediaId=(String) replyLine.get("MEDIA_ID"); 333                          title=(String) replyLine.get("TITLE"); 334                          desc=(String) replyLine.get("DESC"); 335  } 336                     if(StringUtils.isNotBlank(mediaId)) 337                         xmlTo += "<MediaId>" + mediaId + "</MediaId>"; 338                     else 
339                         xmlTo += "<MediaId>" + "查无内容" + "</MediaId>"; 340                     xmlTo += "<Title>" + title + "</Title>"; 341                     xmlTo += "<Description>" + desc + "</Title>"; 342                     xmlTo += "</Video> "; 343                     xmlTo += "</xml>"; 344  response.getWriter().write(xmlTo); 345                 }else if ("music".equals(msgType)) {//回复音乐
346                     String key = xmlmap.get("ThumbMediaId"); 347                     String xmlTo = "<xml>"; 348                     xmlTo += "<ToUserName>" + xmlmap.get("ToUserName") + "</ToUserName>"; 349                     xmlTo += "<FromUserName>" + xmlmap.get("FromUserName") + "</FromUserName>"; 350                     xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 351                     xmlTo += "<MsgType>music</MsgType>"; 352                     xmlTo += "<Music>"; 353                     String repltSql="select * from  WECHAT_AUTO_KEY where WECHAT_AUTO_KEY.KEY_NAME = ? and WECHAT_AUTO_KEY.COM_ID=? "; 354                     ArrayList parms = new ArrayList(); 355  parms.add(key); 356  parms.add(comId); 357                     List replylist=utilsService.getDataList(repltSql, parms); 358                     String mediaId=""; 359                     String title=""; 360                     String desc=""; 361                     String url=""; 362                     if(replylist!=null && replylist.size()>0){ 363                          HashMap replyLine = (HashMap)replylist.get(0); 364                          mediaId=(String) replyLine.get("MEDIA_ID"); 365                          title=(String) replyLine.get("TITLE"); 366                          desc=(String) replyLine.get("DESC"); 367                          url=(String) replyLine.get("URL"); 368  } 369                     xmlTo += "<Title>" + title + "</Title>"; 370                     xmlTo += "<Description>" + desc + "</Title>"; 371                     xmlTo += "<MusicUrl>" + url + "</MusicUrl>"; 372                     if(StringUtils.isNotBlank(mediaId)) 373                         xmlTo += "<ThumbMediaId>" + mediaId + "</ThumbMediaId>"; 374                     else 
375                         xmlTo += "<ThumbMediaId>" + "查无内容" + "</ThumbMediaId>"; 376                     
377                     xmlTo += "</Music> "; 378                     xmlTo += "</xml>"; 379  response.getWriter().write(xmlTo); 380                 }else if ("news".equals(msgType)) {//回复图文
381                     String key = xmlmap.get("Articles"); 382                     String xmlTo = "<xml>"; 383                     xmlTo += "<ToUserName>" + xmlmap.get("ToUserName") + "</ToUserName>"; 384                     xmlTo += "<FromUserName>" + xmlmap.get("FromUserName") + "</FromUserName>"; 385                     xmlTo += "<CreateTime>" + xmlmap.get("CreateTime") + "</CreateTime>"; 386                     xmlTo += "<MsgType>news</MsgType>"; 387                     xmlTo += "<ArticleCount>1</ArticleCount>"; 388                     xmlTo += "<Articles>"; 389                     xmlTo += "<item>"; 390                     String repltSql="select * from  WECHAT_AUTO_KEY where WECHAT_AUTO_KEY.KEY_NAME = ? and WECHAT_AUTO_KEY.COM_ID=? "; 391                     ArrayList parms = new ArrayList(); 392  parms.add(key); 393  parms.add(comId); 394                     List replylist=utilsService.getDataList(repltSql, parms); 395                     String mediaId=""; 396                     String title=""; 397                     String desc=""; 398                     String url=""; 399                     String goUrl=""; 400                     if(replylist!=null && replylist.size()>0){ 401                          HashMap replyLine = (HashMap)replylist.get(0); 402                          mediaId=(String) replyLine.get("MEDIA_ID"); 403                          title=(String) replyLine.get("TITLE"); 404                          desc=(String) replyLine.get("DESC"); 405                          url=(String) replyLine.get("URL"); 406                          goUrl=(String) replyLine.get("GO_URL"); 407  } 408                     xmlTo += "<Title>" + title + "</Title>"; 409                     if(StringUtils.isNotBlank(desc)) 410                         xmlTo += "<Description>" + desc + "</Description>"; 411                     else 
412                         xmlTo += "<Description>" + "查无内容" + "</Description>"; 413                     xmlTo += "<PicUrl>" + url + "</PicUrl>"; 414                     xmlTo += "<Url>" + goUrl + "</Url>"; 415                     xmlTo += "</item> "; 416                     xmlTo += "</Articles> "; 417                     xmlTo += "</xml>"; 418  response.getWriter().write(xmlTo); 419  } 420  } 421         } catch (Exception e) { 422             log.debug("", e); 423  } 424     }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM