Java--对接微信第二篇之初步开发

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:https://blog.csdn.net/qq_31122833。 https://blog.csdn.net/qq_31122833/article/details/83653454

环境有了,接下来就是在java代码中对接环境。

1、新写一个Controller:命名WXController.java

/**
     * 接入开发走这个GET
     */
    @RequestMapping(value = "/validate", method = RequestMethod.GET)
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        //接收微信用来校验信息的内置规定参数
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");

        PrintWriter out = response.getWriter();
        //按微信指定的规则进行校验并做出响应
        if(CheckSignatureUtil.checkSignature(signature, timestamp, nonce)){
            out.print(echostr);
        }
    }
    /**
     * 配置RequestMethod.POST,用于接收处理消息
     */
    @RequestMapping(value = "/validate", method = RequestMethod.POST)
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        String message = "success";
        try {
            //把微信返回的xml信息转义成map
            Map<String, String> map = XmlUtil.xmlToMap(request);
            String fromUserName = map.get("FromUserName");//消息来源用户标识
            String toUserName = map.get("ToUserName");//消息目的用户标识
            String msgType = map.get("MsgType");//消息类型
            String content = map.get("Content");//消息内容

            String eventType = map.get("Event");
            if(MessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(msgType)){//如果为事件类型
                if(MessageUtil.EVENT_TYPE_SUBSCRIBE.equals(eventType)){//处理订阅事件
                   message = MessageUtil.subscribeForText(toUserName, fromUserName);
                }      
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }finally{
            out.println(message);
            if(out!=null){
                out.close();
            }
        }
    }
    /**
     * 获取access_token
     * @param appid
     * @param secret
     * @return
     */
    private Token checkToken(String appid,String secret){
        Token token = (Token)redisService.getObject(appid);
        if (token==null){
            token = TokenAPI.token(appid,secret);
            if(token!=null){
                redisService.setObject(appid,token);
                redisService.expire(appid,7100);
            }
        }else{
            logger.info("redis have token,appid ="+appid);
        }
        return token;
    }

其中,这个WXController.java下的validate有两个方法,一个get、一个post,get是判断为微信官方操作调用,post是具体做什么,比如监听到用户订阅你的公众号,那么就回复:感谢你的订阅(或其他消息)

获取token,是调用微信接口时,不可缺少的一步,这个token不是第一篇的token,而是临时令牌,根据你的appid和AppSecret获取,调用微信api获取:获取后微信会帮你存7200秒,你把这个token存进redis,因为这个接口有次数限制的,别老是去重新获取token

猜你喜欢

转载自blog.csdn.net/qq_31122833/article/details/83653454