企业微信客户联系-回调事件

企业微信客户联系-回调事件

Java xml报文方式

第一步 下载资源

下载企业微信提供的关于加密解密,IO解析的 工具包

点击 https://work.weixin.qq.com/api/doc/90000/90138/90307#java库

第二步 工具包

下载的压缩包打开后,按下图路径打开,将这6个工具包复制到自己的项目中,建议用一个单独的包存放,作为企业微信工具包。

第三步 回调的接口编写

这个作为这个是回调函数的访问接口例子

完整的例子

/**
 * 微信回调配置验证
 * @return
 * @throws Exception
 */
@ApiOperation(value="微信調用API接收消息配置,验证URL")
@GetMapping(value="/callBack")
@ResponseBody
public void verificationUrl() throws IOException {
    ServletRequestAttributes servletRequestAttributes =(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    if(servletRequestAttributes!=null){
        HttpServletRequest  request=servletRequestAttributes.getRequest();
        HttpServletResponse response=servletRequestAttributes.getResponse();
        if(response!=null){
            // 微信加密签名
            String msgSignature = request.getParameter("msg_signature");
            // 时间戳
            String timestamp = request.getParameter("timestamp");
            // 随机数
            String nonce = request.getParameter("nonce");
            // 随机字符串
            String echostr = request.getParameter("echostr");

            log.info("request=" + request.getRequestURL());
            PrintWriter out = response.getWriter();
            // 通过检验msg_signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
            String result = null;
            try {
                WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(WeiXinParamesUtil.TOKEN, WeiXinParamesUtil.ENCODING_AES_KEY, WeiXinParamesUtil.CORP_ID);
                result = wxcpt.verifyURL(msgSignature, timestamp, nonce, echostr);

                //必须要返回解密之后的明文
                if (StringUtils.isBlank(result)) {
                    log.info("URL验证失败");
                } else {
                    log.info("验证成功!");
                }

            } catch (AesException e) {
                e.printStackTrace();
            }

            if (result == null) {
                result = WeiXinParamesUtil.TOKEN;
            }
            out.print(result);
            out.close();
        }
    }



}

/**
 * 微信回调事件
 * @return
 * @throws Exception
 */
@ApiOperation(value="微信回调事件接口")
@PostMapping(value="/callBack")
public String callBack() throws IOException, AesException, ParserConfigurationException, SAXException {
    log.info("开始执行企业微信回调方法");
    String sMsg = null;
    ServletRequestAttributes servletRequestAttributes = null;
    if (RequestContextHolder.getRequestAttributes()!=null){
        servletRequestAttributes=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(servletRequestAttributes!=null){
            HttpServletRequest request = servletRequestAttributes.getRequest();

            // 微信加密签名
            String sMsgSignature = request.getParameter("msg_signature");
            // 时间戳
            String sTimestamp = request.getParameter("timestamp");
            // 随机数
            String sNonce = request.getParameter("nonce");
            // 随机字符串
            String echostr = request.getParameter("echostr");

            log.info("request=" + request.getRequestURL());
            log.info("echostr=" + echostr);

            InputStream inputStream = request.getInputStream();
            String sPostData = IOUtils.toString(inputStream, "UTF-8");

            //下面这些操作都可以异步  如果处理请求比较慢,企业微信会重复推送 这里需要去重保证执行唯一
            WXBizMsgCrypt msgCrypt = new WXBizMsgCrypt(WeiXinParamesUtil.TOKEN,WeiXinParamesUtil.ENCODING_AES_KEY,WeiXinParamesUtil.CORP_ID);
            //解密
            sMsg = msgCrypt.decryptMsg(sMsgSignature,sTimestamp,sNonce,sPostData);
            log.info("企业微信传输给我们的信息结果"+sMsg);
            //处理逻辑
            /**
             * 处理企业微信的回调 通过xml
             * 目前处理的功能 有 新增 编辑 删除 企业微信用户 CustomerConsultanRel
             * */
            log.info("开始处理企业微信回调方法");
            customerConsultantRelService.handleCallbackByXmlString(sMsg);
            log.info("结束处理企业微信回调方法");

        }

    }
    log.info("结束执行企业微信回调方法");
    return sMsg;
}

第四步 配置消息接收器

   有两种方式

   1 客户联系 -客户,这种方式,范围较大,

 url 是你的回调方法的调用接口,如果是内网环境,需要做内网击穿,我使用的是云网穿

可以自行网上查看网络击穿的教程。

Token EncodingAESKey

这个两个随机生成就好

2自定义的应用程序中设定,设定的值与上图一致,不同的是可以自己指定企业用户的范围,在实际的开发场景中,可以控制回调的范围。

第五步,写静态类,

将上图中的 Token EncodingAESKey的值,编写到静态类中。值请根据自己企业微信(自己注册也可)填写

public class WeiXinParamesUtil {

    private WeiXinParamesUtil(){}

    /**企业ID*/

    public static final  String CORP_ID = "";

    /**token*/

    public static final  String TOKEN = "";

    /**encodingAESKey*/

    public static final  String ENCODING_AES_KEY = "";

    /**客户联系密钥*/

    public static final String CUSTOMER_CONTACT_SECRET = "";

    /**通讯录密钥*/

    public static final String ADDRESS_BOOK_SECRET = "";

    /**token失效时间设置 2 小时*/

    public static final Integer EXPIRE_TIME = 2;

    /**返回码key*/

    public static final String ERR_CODE = "errcode";

    /**

     * 操作类型为添加客户 外部人员 add_external_contact

     * */

    public static final String CHANGE_TYPE_ADD_EXTERNAL_CONTACT ="add_external_contact";

    /**

     * 操作类型为添加客户 外部人员 del_external_contact

     * */

    public static final String CHANGE_TYPE_DEL_EXTERNAL_CONTACT ="del_external_contact";

}

第六步 启动项目,测试设定消息接收器是否成功。

 以上代码完成后,启动项目,在设置消息接收器的页面点击保存,提示成功则说明,设定成功。

第七步 编写自己业务代码

在回调接口的对应处将得到的xml字符串 拿到自己的sevice层,做自己业务处理。

关于xml 格式可以自己查看企业微信的api

ps:关于详细的内容,比如加密解密等问题,可以详细企业微信的api,

企业微信API

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Binary Wang,一种Java开源库,可以很方便地实现企业微信代开发应用的回调事件企业微信代开发应用是指在企业微信平台上开发的应用,可以通过回调事件企业微信平台进行交互。回调事件是指当用户在企业微信上进行某些操作时,企业微信平台会主动向开发者的应用发送相应的事件通知。以下是具体的实现步骤: 首先,我们需要使用Binary Wang库中的相关类和方法来处理回调事件。可以通过在应用的代码中引入相应的依赖来获取该库。然后,创建一个类来处理回调事件,并在该类中定义处理每个具体事件的方法。 接下来,我们需要在企业微信开发者后台进行相应的配置。具体来说,需要设置应用的回调URL,即当有事件发生时,企业微信平台会向该URL发送回调通知。在回调URL中,需要处理企业微信发来的请求,解析其中的参数,并调用之前创建的类中相应的方法来处理事件。 在处理每个具体事件的方法中,开发者可以根据自身需求来编写相应的业务逻辑。例如,当有新用户加入企业微信时,可以发送欢迎消息;当有用户发送文本消息时,可以进行关键词过滤等等。 此外,为了保证回调事件的安全性,企业微信开发者后台还提供了签名验证的功能。在处理回调URL的代码中,开发者需要对企业微信发送的请求进行签名验证,以确保请求的合法性。 总的来说,基于Binary Wang可以很方便地实现企业微信代开发应用的回调事件。通过处理回调事件,开发者可以针对用户在企业微信上的操作做出相应的响应,实现更丰富、个性化的企业微信应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值