企業微信通訊錄管理

前言:

源碼已上傳: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);
        }
    }
}

 

通訊錄同步變更補充好了,如何驗證事件接收器成功的問題我沒有截圖了,因爲做的比較久了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章