一、自动回复处理代码

本文介绍了一种基于Java的微信公众号自动回复消息的实现方案。该方案通过解析用户的请求XML,根据用户输入的关键字查询数据库来获取相应的回复内容,并能够发送文本消息或图文消息给用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. @RequestMapping(value="/api",method=RequestMethod.POST)  
  2.     public void initPostAPI(HttpServletRequest request, HttpServletResponse response)  
  3.     {  
  4.         String Event = "";  
  5.         String MsgType = "";  
  6.         String Content = "";  
  7.         String strJson = new String();  
  8.          // 将请求、响应的编码均设置为UTF-8(防止中文乱码)    
  9.        try {  
  10.             request.setCharacterEncoding("UTF-8");  
  11.             response.setCharacterEncoding("UTF-8");    
  12.         } catch (UnsupportedEncodingException e1) {  
  13.             // TODO Auto-generated catch block  
  14.             e1.printStackTrace();  
  15.         }  
  16. // 调用核心业务类接收消息、处理消息  
  17.        User user = new User();  
  18.   
  19.         String respMessage = "";//反馈信息  
  20.         Map<String, String> map = new HashMap<String, String>();    
  21.         try {  
  22.             map = parseXml(request);  
  23.     } catch (Exception e) {  
  24.         e.printStackTrace();  
  25.     }  
  26.           
  27.         Event = map.get("Event");  
  28.         MsgType = map.get("MsgType");  
  29.         Content = map.get("Content");  
  30.           
  31.         System.out.println("Content = " + Content);  
  32.         System.out.println("MsgType = " + MsgType);  
  33.         System.out.println("Event = " + Event);  
  34.         System.out.println("EventKey = " + map.get("EventKey"));  
  35.         if(Event == null){//Event为null 则为用户输入信息被动回复  
  36.             //自动回复用户信息  
  37.             if(MsgType.equals("text")){  
  38.                 strJson = sendMess(map,strJson, Content);  
  39.             }  
  40.        }  
  41.             SendUserMess.sendMess(strJson);  
  42.     }  

这是回复信息内容的处理(文本信息,图文信息)
  1. public String sendMess(Map map,String strJson,String Content){  
  2.           
  3.         //根据用户输入的关键字查询对应响应  
  4.         AutoReply autoReply = new AutoReply();  
  5.         autoReply.setKeyName(Content);  
  6.         List<AutoReply> list = this.replyService.findByKeyname(autoReply);  
  7.         System.out.println("list size = "+list.size());  
  8.           
  9.         //向用户回复消息  
  10.         if(list.size() != 0){  
  11.             autoReply = list.get(0);  
  12.             System.out.println("KeyValue-----"+autoReply.getKeyValue()+"--");  
  13.               
  14.             if(!autoReply.getKeyValue().equals("")){  
  15.                 strJson = "{\"touser\" :\""+map.get("FromUserName")+"\",";  
  16.                 strJson += "\"msgtype\":\"text\",";  
  17.                 strJson += "\"text\":{";  
  18.                 strJson += "\"content\":\""+autoReply.getKeyValue()+"\"";  
  19.                 strJson += "}}";  
  20.             }else if(!autoReply.getGraphic().equals("")){  
  21.                 String newsinfo = "";  
  22.                 String[] strs = autoReply.getGraphic().split(",");  
  23.                 strJson = "{\"touser\" :\""+map.get("FromUserName")+"\",";  
  24.                 strJson += "\"msgtype\":\"news\",";  
  25.                 strJson += "\"news\":";  
  26.                 String news = "{\"articles\": [";  
  27.                 System.out.println(news);  
  28.                   
  29.                 for(String str:strs){  
  30.                     Graphic graphic = graphicService.loadByPK(Integer.valueOf(str));  
  31.                     String url = graphic.getPicurl();  
  32.                     //url = saveUrl + url.substring(24);  
  33.                       
  34.                     newsinfo += "{\"title\":\""+graphic.getTitle()+"\"," +  
  35.                                         "\"description\":\""+graphic.getDescription()+"\",\"url\":\""+graphic.getUrl()+"\"," +  
  36.                                         "\"picurl\":\""+url+"\""+  
  37.                                         "},";  
  38.                 }  
  39.                   
  40.                 news = news + newsinfo.substring(0, (newsinfo.length()-1));  
  41.                 news = news + "]}";  
  42.                 strJson += news;  
  43.                 strJson += "}";  
  44.                 System.out.println("news-------"+news);  
  45.             }  
  46.         }else{//如果在数据库中找不到对应回复用户的信息则回复默认消息  
  47.             autoReply.setKeyName("未知");  
  48.             List<AutoReply> list_ = this.replyService.findByKeyname(autoReply);  
  49.             autoReply = list_.get(0);  
  50.               
  51.             /*StringBuffer content = new StringBuffer(); 
  52.             content.append("感谢您!").append("\n"); 
  53.             content.append("再次感谢您").append("\n"); 
  54.             content.append("再次再次感谢您");*/  
  55.             //拼装需要发送的消息  
  56.             strJson = "{\"touser\" :\""+map.get("FromUserName")+"\",";  
  57.             strJson += "\"msgtype\":\"text\",";  
  58.             strJson += "\"text\":{";  
  59.             strJson += "\"content\":\""+autoReply.getKeyValue()+"\"";  
  60.             strJson += "}}";  
  61.         }  
  62.         return strJson;  
  63.     }  



  1. public class SendUserMess {  
  2.     public static void sendMess(String jsonParam){  
  3.         String openIdUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";  
  4.   
  5.         String result = null;  
  6.         result = String.format(openIdUrl, urlEnodeUTF8(Const.AppId),  
  7.                 urlEnodeUTF8(Const.AppSecrect));  
  8.   
  9.         try {  
  10.             System.out.println("Staring");  
  11.             // 创建HttpClient实例  
  12.             DefaultHttpClient  httpClient = new DefaultHttpClient ();  
  13.             // 创建Get方法实例  
  14.             HttpGet method = new HttpGet(result);  
  15.             HttpResponse re = httpClient.execute(method);  
  16.             String resData = EntityUtils.toString(re.getEntity());  
  17.             method.releaseConnection();  
  18.             System.out.println("get weixinnumber ..." + resData);  
  19.             JSONObject obj = JSONObject.fromObject(resData);  
  20.             if (obj != null) {  
  21.                 String token = obj.getString("access_token");  
  22.                 System.out.println("token = " + token);  
  23.                 //获取ticket  
  24.                 String sendMessUrl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s";  
  25.                 result = String.format(sendMessUrl, token);  
  26.                   
  27.                 httpClient = new DefaultHttpClient();  
  28.                   
  29.                 /*JSONObject jsonParam = new JSONObject(); 
  30.                 jsonParam.put("touser", ""+openId+""); 
  31.                 jsonParam.put("msgtype", "text"); 
  32.                 jsonParam.put("text", "{'content': '"+respMessage+"'}");*/  
  33.                   
  34.                 System.out.println(jsonParam);  
  35.                   
  36.                 StringEntity entity = new StringEntity(jsonParam,"utf-8");//解决中文乱码问题      
  37.                 entity.setContentEncoding("UTF-8");      
  38.                 entity.setContentType("application/json");      
  39.                   
  40.                 // 创建Get方法实例  
  41.                 HttpPost me = new HttpPost(result);  
  42.                 me.setEntity(entity);  
  43.                 HttpResponse hr = httpClient.execute(me);  
  44.                 String data = EntityUtils.toString(hr.getEntity());  
  45.                 me.releaseConnection();  
  46.   
  47.                 JSONObject userInfo = JSONObject.fromObject(data);  
  48.                 System.out.println("get backMessage ..." + data);  
  49.                   
  50.             }  
  51.         } catch (Exception ex) {  
  52.             System.out.println("error");  
  53.             System.out.println(ex.getMessage());  
  54.         }  
  55.     }  
  56.       
  57.     private static String urlEnodeUTF8(String str){  
  58.         String result = str;  
  59.         try {  
  60.             result = URLEncoder.encode(str,"UTF-8");  
  61.         } catch (Exception e) {  
  62.             e.printStackTrace();  
  63.         }  
  64.         return result;  
  65.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值