码迷,mamicode.com
首页 > 其他好文 > 详细

第三方平台如何接受授权公众号取消授权事件

时间:2015-07-10 11:19:17      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:

第三方平台设置了:授权事件接受URL

技术分享

该URL主要有两个作用:
(1)微信服务器每隔10分钟定时推送component_verify_ticket。第三方平台方收到ticket
(2)如果公众号取消了第三方平台的授权,微信服务器会通过这个url告知第三方平台。

    public String receiveAuth() {
        String msgSignature = getRequest().getParameter("msg_signature");
        String timestamp = getRequest().getParameter("timestamp");
        String nonce = getRequest().getParameter("nonce");
        logger.info("msgSignature:" + msgSignature + ",timestamp:" + timestamp+ ",nonce:" + nonce);
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(getRequest().getInputStream()));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            String encStr = sb.toString();
            //解密推送信息
            if (encStr != null) {
                WXBizMsgCrypt pc = new WXBizMsgCrypt(Constants.WX_OPEN_TOKEN,Constants.WX_OPEN_ENCODING_AESKEY,Constants.WX_OPEN_APPID);
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                StringReader sr = new StringReader(encStr);
                InputSource is = new InputSource(sr);
                Document document = db.parse(is);
                Element root = document.getDocumentElement();
                NodeList nodelist1 = root.getElementsByTagName("Encrypt");
                String encrypt = nodelist1.item(0).getTextContent();
                String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
                String fromXML = String.format(format, encrypt);
                String resultXml = pc.decryptMsg(msgSignature, timestamp,nonce, fromXML);
                Map<String, String> xmlMap = MessageUtil.praseXmlString2Map(resultXml);
                if(StringUtils.isNotNull(xmlMap.get("InfoType")) && "unauthorized".equals(xmlMap.get("InfoType"))){
                    String appid = xmlMap.get("AuthorizerAppid");
                    WxAccount account = new WxAccount();
                    account.setAccountappid(appid);
                    account = wxAccountService.getWxAccount(account);
                    if(account != null){
                        //公众号取消授权,设置相应的状态标志
                        account.setStatus(0);
                        wxAccountService.updateWxAccount(account);
                        logger.error("wx_account Cancel authorization set status = 0  appid="+appid);
                    }
                }
                // 将component_verify_ticket存入redis数据库
                String ticket = xmlMap.get("ComponentVerifyTicket");
                if(StringUtils.isNotNull(ticket)){
                    Constants.WX_OPEN_COMPONENT_VERIFY_TICKET = ticket;
                    logger.info("ComponentVerifyTicket:"+ ticket);
                    jedis = pool.getShardedJedisPool().getResource();
                    jedis.set("ComponentVerifyTicket", ticket);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

第三方平台如何接受授权公众号取消授权事件

标签:

原文地址:http://blog.csdn.net/u013628152/article/details/46827803

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!