关闭

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

4611人阅读 评论(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;
    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    微信扫一扫:GeekerTalk

    这里写图片描述
    个人资料
    • 访问:799834次
    • 积分:11910
    • 等级:
    • 排名:第1318名
    • 原创:447篇
    • 转载:34篇
    • 译文:0篇
    • 评论:134条
    文章分类
    博客专栏
    最新评论