收藏
回答

第三方平台授权事件接收配置已经配好但是收不到回调?

public Object receiveAuth(@RequestBody String postData,
                          @RequestParam(value = "signature", required = false) String signature,
                          @RequestParam(value = "timestamp", required = false) String timeStamp,
                          @RequestParam(value = "nonce", required = false) String nonce,
                          @RequestParam(value = "encrypt_type", required = false) String encryptType,
                          @RequestParam(value = "msg_signature", required = false) String msgSignature) {
    try {
        //从XML中获取<Encrypt></Encrypt>标签内的密文文本
        if (postData.endsWith("\\n")) {
            postData = postData.substring(0, postData.length() - 2);
        }
        postData = UnicodeUtil.toString(postData);
        org.w3c.dom.Document document = XmlUtil.readXML(postData);
        NodeList nodeList = document.getElementsByTagName("Encrypt");
        String encrypt = nodeList.item(0).getTextContent();
        log.info("Encrypt:" + encrypt);
        //格式化密文文本,否则没有<ToUserName>标签,会解密失败,参考官方的加解密代码JAVA版本
        String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%1$s]]></Encrypt></xml>";
        String fromXML = String.format(format, encrypt);

        String msg;   //解密后的明文
        if (StrUtil.isEmpty(encrypt)) {
            msg = fromXML;
        } else {
            WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(wechatOpenProperties.getComponentToken(), wechatOpenProperties.getComponentAesKey(), wechatOpenProperties.getComponentAppId());
            // 解密消息
            msg = wxBizMsgCrypt.decryptMsg(msgSignature, timeStamp, nonce, fromXML);
        }
        log.info("解密后的明文:" + msg);
        //将XML格式字符串转为Map类型
        Document resultDocument = XmlUtil.readXML(msg);
        NodeList infoTypeNodeList = resultDocument.getElementsByTagName("InfoType");
        String infoType = infoTypeNodeList.item(0).getTextContent();
        switch (infoType) {
            case "component_verify_ticket":
                NodeList ticketNodeList = resultDocument.getElementsByTagName("ComponentVerifyTicket");
                String componentVerifyTicket = ticketNodeList.item(0).getTextContent();

                log.info("ComponentVerifyTicket成功更新:{}", componentVerifyTicket);
                break;
            default:
                break;
        }
    } catch (Exception e) {
        log.error(e.getMessage());
    }
    return "success";
}


回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容