微信公众号开发<关键字匹配回复随机内容>

最后我实现的功能是用户回复公众号电影名称,公众号自动回复网盘链接,回复“美女”“搞笑”等关键词自动回复随机一张类别图片
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.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;

最终实现效果如图所示:
这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haibo8023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值