• 微信自动回复接口


      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     }
  • 相关阅读:
    Android游戏开发实践(1)之NDK与JNI开发02
    SDK接入(1)之Android Facebook SDK接入
    Markdown学习
    SDK接入(3)之iOS内支付(InApp Purchase)接入
    将列【1,2,3】转换为【类别1,类别2,类别3】
    SQL Server 获取日期
    SQL Server 2000 Split方法
    java连接SqlServer2012
    前辈的js学习方法
    js学习笔记
  • 原文地址:https://www.cnblogs.com/guoziyi/p/5999445.html
Copyright © 2020-2023  润新知