企业微信指令回调与数据回调功能同时支持post和get请求

2020-03-17  本文已影响0人  一个忙来无聊的人

1、数据回调

说明:就是一个简单的get请求,直接根据提供jar包进行调用,详细的参数说明都已经在下面代码注释中

    @GetMapping("weixin/roll_back")
    public String getPrividerToken(CallBackReq callBackReq) throws AesException {
        String response = weiXinLogic.callBackVerife(callBackReq);
        return response;
    }

get请求参数接收体 省略get 和 set方法

  public class CallBackReq {
    /** 企业微信加密签名 需要检验*/
    private String msg_signature;
    /**时间戳。与nonce结合使用,用于防止请求重放攻击。 */
    private String timestamp;
    /**随机数。与timestamp结合使用,用于防止请求重放攻击。*/
    private String nonce;
    /** 加密的字符串 ,需要解密得到消息内容明文,解密后有random、msg_len、msg、receiveid四个字段,其中msg即为消息内容明文*/
    private String echostr;
}

调用推荐jar 推荐的方法信息。 下载参考地址

image.png
// jar包方法返回信息
    public String callBackVerife(CallBackReq callBackReq) throws AesException {
        // 解析参数信息 参数值需要做Urldecode处理
        // 创建验证函数信息 -- token 和 encodingAesKey 都是应用详情里面的参数信息。 corpid 是企业的 id 信息 登陆服务商平台、服务商信息里面有
        WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(token, encodingAesKey, corpid);
        // 调用验证URL函数直接一步到位
        return wxBizMsgCrypt.VerifyURL(callBackReq.getMsg_signature(), callBackReq.getTimestamp(), callBackReq.getNonce(), callBackReq.getEchostr());
    }

二、指令回调 -- 保证接口可以get请求也可以 post 请求

指令回调有一个坑。因为数据推送也是这个接口,可能是get方法也可能是post方法,直接参考以下代码即可
@RequestBody(required = false) String req 这个用于接收post请求参数信息。并且表示非必填
CallBackReq callBackReq 用于接收get请求参数信息
根据不同请求方式处理调用不同的处理逻辑

 @RequestMapping(value = "weixin/receive_authority")
    @ResponseBody
    public String receiveDataInfo(@RequestBody(required = false) String req, CallBackReq callBackReq) throws AesException, IOException, SAXException, ParserConfigurationException, ParamException, BusinessException {
// post 请求
        if (null != req){
            logger.info("请求参数BusinessReceiveReq 为:{}", JSONObject.toJSONString(req));
            weiXinLogic.processBusinessReceive(req, callBackReq);
            return WinxinThirdConstant.WEIXIN_SUCCESS;
        }else {
// get 请求 
            logger.info("请求参数 callBackReq 为 {}",  JSONObject.toJSONString(callBackReq));
            return weiXinLogic.callBackVerife(callBackReq);
        }
    }

POST 请求获取到的数据解析方式
解析完成之后 根据不同的type类型进行不同处理即可 ,以下方法为 weiXinLogic.processBusinessReceive(req, callBackReq); 的简写

      // 对msg_signature进行检验 并且解密获得消息结构体
        WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(token, encodingAesKey, suiteId);
        // 回调的key值
        String msgStructure = wxBizMsgCrypt.DecryptMsg(req.getMsg_signature(), req.getTimestamp(), req.getNonce(), xmlData);
        logger.info("指令回调获取到的数据为:{}", msgStructure);
上一篇 下一篇

猜你喜欢

热点阅读