微信公众号开发<关键字匹配回复随机内容>
2017-08-05 18:14
239 查看
最后我实现的功能是用户回复公众号电影名称,公众号自动回复网盘链接,回复“美女”“搞笑”等关键词自动回复随机一张类别图片
1.公众号配置好开发地址
然后做关键词匹配的功能,用户给公众号发送的消息都会通过腾讯request请求到你配置的开发者地址上,然后就是实现自己的逻辑,包括自动回复相关内容;
最终实现效果如图所示:
1.公众号配置好开发地址
/** * 接入微信 * * @param request request * @param response response * @throws IOException IOException */ @RequestMapping(value = "/wechatconnect") @ResponseBody public void wechatconnect(HttpServletRequest request, HttpServletResponse response) throws IOException { // 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); boolean isGet = request.getMethod().toLowerCase().equals("get"); PrintWriter out = response.getWriter(); try { if (isGet) { String signature = request.getParameter("signature");// 微信加密签名 String timestamp = request.getParameter("timestamp");// 时间戳 String nonce = request.getParameter("nonce");// 随机数 String echostr = request.getParameter("echostr");//随机字符串 // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignUtil.checkSignature(signature, timestamp, nonce)) { logger.info("Connect the weixin server is successful."); response.getWriter().write(echostr); } else { logger.error("Failed to verify the signature!"); } } else { String respMessage = "异常消息!"; try { respMessage = weixinPost(request); out.write(respMessage); logger.info("The request completed successfully"); logger.info("to weixin server " + respMessage); } catch (Exception e) { e.printStackTrace(); logger.error("Failed to convert the message from weixin!"); } } } catch (Exception e) { logger.error("Connect the weixin server is error."); } finally { out.close(); } }
然后做关键词匹配的功能,用户给公众号发送的消息都会通过腾讯request请求到你配置的开发者地址上,然后就是实现自己的逻辑,包括自动回复相关内容;
public String weixinPost(HttpServletRequest request) { String respMessage = null; try { // xml请求解析 Map<String, String> requestMap = MessageUtil.xmlToMap(request); // 发送方帐号(open_id) String fromUserName = requestMap.get("FromUserName"); // 公众帐号 String toUserName = requestMap.get("ToUserName"); // 消息类型 String msgType = requestMap.get("MsgType"); // 消息内容 String content = requestMap.get("Content"); logger.info("---------------FromUserName is:" + fromUserName + ", ToUserName is:" + toUserName + ", MsgType is:" + msgType + content); // 文本消息 if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { //这里根据关键字执行相应的逻辑,只有你想不到的,没有做不到的 PicturePool pp = wechatResourceService.selectPictureWechat(content); MoviePool mp = wechatResourceService.selectMovieWechat(content); if (pp != null) { //自动回复图片 ImgMessage imgMessage = new ImgMessage(); WechatPicture wechatPicture = wechatResourceService.getPicture(pp.getId()); Image image = new Image(); image.setMediaId(wechatPicture.getMedia_id()); imgMessage.setImage(image); imgMessage.setToUserName(fromUserName); imgMessage.setFromUserName(toUserName); imgMessage.setCreateTime(new Date().getTime()); imgMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_IMAGE); respMessage = MessageUtil.imgMessageToXml(imgMessage); } else if (mp != null) { //自动回复 TextMessage text = new TextMessage(); text.setContent(mp.getAddress()); text.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(msgType); respMessage = MessageUtil.textMessageToXml(text); } else { TextMessage text = new TextMessage(); text.setContent("亲,关键词匹配不上呢,请检查一下是否有同音字吧~\n" + "回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应的精美图片。\n" + "回复“电影”或者您想看的电影名称,即可得到在线观看的网址或云盘资源的链接。\n"); text< b3e8 span class="hljs-preprocessor">.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(msgType); respMessage = MessageUtil.textMessageToXml(text); } } else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件推送 String eventType = requestMap.get("Event");// 事件类型 if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {// 订阅 TextMessage text = new TextMessage(); text.setContent("客官,您来啦~\n" + "\n" + "回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应的精美图片。\n" + "回复“电影”或者您想看的电影名称,即可得到在线观看的网址或云盘资源的链接。\n" + "小编今日推荐:\n" + "菊豆\n" + "色戒\n" + "春光乍泄\n" + "苹果\n" + "生于妓院\n" + "(直接回复电影名称即可)"); text.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(msgType); respMessage = MessageUtil.textMessageToXml(text); } else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {// 自定义菜单点击事件 String eventKey = requestMap.get("EventKey");// 事件KEY值,与创建自定义菜单时指定的KEY值对应 logger.info("eventKey is:" + eventKey); if (eventKey.equals("zhaodianying")) { TextMessage text = new TextMessage(); text.setContent("回复“电影” 或 直接回复电影名称,小编就会很快回复您观看网址噢。\n" + "回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应类型的精美图片。\n" + "您还可以添加客服微信:girlnevercryy进入“逗芽电影福利红包群”,各种福利,任性红包满天飞~~~"); text.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); respMessage = MessageUtil.textMessageToXml(text); } if (eventKey.equals("qiuziyuan")) { TextMessage text = new TextMessage(); text.setContent("如果亲没有找到自己中意的电影资源,请添加客服微信:jfwx-hrd 把想要的电影资源名称留言给小编,小编就会立刻马不停蹄的免费去帮您找噢~\n"); text.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); respMessage = MessageUtil.textMessageToXml(text); } } } } catch (Exception e) { logger.error("error......"); e.printStackTrace(); } return respMessage;
最终实现效果如图所示:
相关文章推荐
- 使用微信公众号开发<一>
- 正则匹配抓取input 隐藏输入项和 <td>标签内的内容
- 读<<大规模web服务开发技术>>精彩内容
- PHP微信开发模式,搜索已发送图文,匹配关键字回复
- 开发日志:设置<DIV>内容不自动换行,及inline后width和height等失效的问题
- php微信公众号开发(4)php实现自定义关键字回复
- PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
- (四)vue开发 - 根据vue-router的meta动态设置html里<title>标签的内容
- php微信公众号开发(4)php实现自定义关键字回复
- 微信公众号开发手册<一>——接收消息的处理
- 微信公众号开发第四课 实现自定义关键字回复
- org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
- 微信公众号二次开发之消息回复
- 将文件转化为一行一行的和读取<>里的内容
- ArcGIS API for Silverlight开发入门(6):图层类型小结<转>
- <仅是自己做笔记。。。系列15>实现一个挺高级的字符匹配算法: 给一串很长字符串,要求找到符合要求的字符串,例如目的串:123 1******3***2 ,12*****3这些都要找出来
- Android开发-API指南-<uses-feature>(2)
- iPhone开发中我所遭遇的 各种协议之<UIApplicationDelegate>
- 什么是CDATA段 <![CDATA[ 内容 ]]>
- &lt;转&gt;iOS开发多线程篇—GCD介绍