当前位置: 移动技术网 > IT编程>开发语言>Java > 荐 企业微信通讯录管理

荐 企业微信通讯录管理

2020年07月03日  | 移动技术网IT编程  | 我要评论

前言:

源码已上传:https://github.com/tanghh0410/contractDemo.git

我之前写过一篇文章,主要是用来获取企业微信用户数据,要想做到通讯录变更 ,上篇文章远远不够,我们还需要做开启通讯录回调通知

我来给大家理一下这部分的逻辑:

1) 数据库没有用户数据,可以参考我的主要是用来获取企业微信用户数据 去获取用户数据

2) 开启通讯录回调通知,设置接收事件服务器(文档位置:https://work.weixin.qq.com/api/doc/90000/90135/90966) 

3) 处理企业微信人员变更的事件,不同的事件做不同的处理。

 补充设置消息接收器这块:

1.你需要先写一个接口,比如我下文中的changeNews , 企业微信管理后台的token 和 key 是你需要替换到我代码中去的。

2.接收事件处理器的地方写上你的接口,也就是我的changeNews,需要验证这个接口能否通过。

2.接收事件处理器成功以后你再去写人员变更的逻辑。

需要注意的是: 这个url 你可以这么填写:

https://baidu.com/具体接口名

像我下图就是 https://baidu.com/changeNews,并且 token 和这个key 需要替换成开发者自己的。

 

 

 

1.首先需要编写企业微信接收事件

 

 /**
     * 企业微信消息接收事件(用于通讯录同步或消息接收)
     * 接口作用:  企业微信发生通讯录变更事件要调用这个接口,无需手动调用,企业微信后台有配置这个接口名字
     *
     * @param request
     * @param response
     * @throws IOException
     */
    @ApiOperation(value = "1.4 企业微信接收通讯录变更事件")
    @RequestMapping(value = "/changeNews")
    public void changeNews(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //1.1企业微信接收消息服务器配置的代码部分
        // 微信加密签名
        String msg_signature = request.getParameter("msg_signature");
        // 时间戳
        String timestamp = request.getParameter("timestamp");
        // 随机数
        String nonce = request.getParameter("nonce");
        // 随机字符串
        String echostr = request.getParameter("echostr");

        logger.warn("微信加密签名,msg_signature:"+msg_signature);
        logger.warn("时间戳,timestamp:"+timestamp);
        logger.warn("随机数,nonce:"+nonce);
        logger.warn("随机字符串,echostr:"+echostr);
        PrintWriter out = response.getWriter();
        // 通过检验msg_signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
        String result = null;
        WXBizMsgCrypt wxcpt = null;
        try {
            wxcpt = new WXBizMsgCrypt(QiWeiXinParamesUtil.token, QiWeiXinParamesUtil.encodingAESKey, QiWeiXinParamesUtil.corpId);
            result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr);

            //更新成员,部门信息
//            accessTokenService.getEncryptRespMessage(request);
            if (result == null) {
                result = QiWeiXinParamesUtil.token;
            }
            out.print(result);
            out.close();
            out = null;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("changeNews接口报错", e);
        }
    }

当接收通讯录变更事件成功以后,我们就可以放开我注释这个代码,这段代码主要是 用来处理业务

 

 WechatServiceImpl

package com.wechat.demo.service.impl;

import com.wechat.demo.service.WechatService;
import com.wechat.demo.wechat.QiYeWeiUtil;
import com.wechat.demo.wechat.MessageUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * @Author tanghh
 * @Date 2020/7/2 16:27
 */
@Service
public class WechatServiceImpl implements WechatService {
    private Logger logger = LoggerFactory.getLogger(WechatServiceImpl.class);

    /**
     * 企业微信成员通讯录变更
     * @param request
     */
    @Override
    public void getEncryptRespMessage(HttpServletRequest request) {
        String xmlMsg = "";
        try {
            //1.解密微信发过来的消息
            QiYeWeiUtil qiYeWeiUtil = new QiYeWeiUtil();
            xmlMsg = qiYeWeiUtil.getDecryptMsg(request);

            //2.解析微信发来的请求,解析xml字符串
            Map<String, String> requestMap = MessageUtil.parseXml(xmlMsg);

            //3.获取请求参数
            //3.1 企业微信CorpID
            String fromUserName = requestMap.get("FromUserName");
            //3.2 成员UserID
            String toUserName = requestMap.get("ToUserName");
            //3.3 消息类型与事件
            String msgType = requestMap.get("MsgType");
            String eventType = requestMap.get("Event");
            String changeType = requestMap.get("ChangeType");
            String eventKey = requestMap.get("EventKey");

            //根据消息类型与事件执行不同的操作
            if ("event".equals(msgType) && "change_contact".equals(eventType)) {
                //新增成员
                if ("create_user".equals(changeType)) {
                    System.out.println("进入新增用户数据");
                }
                //修改成员
                if ("update_user".equals(changeType)) {
                   //自己编写处理的逻辑
                    System.out.println("修改成员");
                }
                //删除成员
                if ("delete_user".equals(changeType)) {
                   //自己编写处理的逻辑
                    System.out.println("修改成员");
                }

                //添加和更新部门
                if ("create_party".equals(changeType) || "update_party".equals(changeType)) {
                   //自己编写处理的逻辑
                    System.out.println("添加和更新部门");
                }

                //删除
                if ("delete_party".equals(changeType)) {
                    //错误删除
                    //自己编写处理的逻辑
                    System.out.println("错误删除");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("通讯录变更事件处理异常!{},{}", xmlMsg, e);
        }
    }
}

 

通讯录同步变更补充好了,如何验证事件接收器成功的问题我没有截图了,因为做的比较久了。

本文地址:https://blog.csdn.net/tangthh123/article/details/107056907

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网