1
0
mirror of synced 2025-12-28 14:07:58 +08:00

🆕 #2721 【企业微信】增加家校通讯录-变更事件类型的回调消息支持

This commit is contained in:
0katekate0
2022-06-30 14:18:23 +08:00
committed by Binary Wang
parent ba13eef750
commit a17d8ae5a2
4 changed files with 201 additions and 4 deletions

View File

@@ -1,10 +1,16 @@
package me.chanjar.weixin.cp.api;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.util.XmlUtils;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.msgaudit.*;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.constant.WxCpConsts;
import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
import org.eclipse.jetty.util.ajax.JSON;
import org.testng.annotations.Test;
import java.io.InputStream;
@@ -38,6 +44,55 @@ public class WxCpMsgAuditTest {
cpService = new WxCpServiceImpl();
cpService.setWxCpConfigStorage(config);
/**
* 客户同意进行聊天内容存档事件回调
* 配置了客户联系功能的成员添加外部联系人同意进行聊天内容存档时,回调该事件。
*
* https://developer.work.weixin.qq.com/document/path/92005
*/
String msgAuditApprovedXml = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[change_external_contact]]></Event>\n" +
"\t<ChangeType><![CDATA[msg_audit_approved]]></ChangeType>\n" +
"\t<UserID><![CDATA[zhangsan]]></UserID>\n" +
"\t<ExternalUserID><![CDATA[woAJ2GCAAABiuyujaWJHDDGi0mACHAAA]]></ExternalUserID>\n" +
"\t<WelcomeCode><![CDATA[WELCOMECODE]]></WelcomeCode>\n" +
"</xml>";
final WxCpXmlMessage msgAuditApprovedXmlMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, msgAuditApprovedXml);
msgAuditApprovedXmlMsg.setAllFieldsMap(XmlUtils.xml2Map(msgAuditApprovedXml));
log.info("msgAuditApprovedXmlMsg:{}", JSON.toString(msgAuditApprovedXmlMsg));
/**
* 产生会话回调事件
* 为了提升企业会话存档的使用性能,降低无效的轮询次数。
* 当企业收到或发送新消息时企业微信可以以事件的形式推送到企业指定的url。回调间隔为15秒在15秒内若有消息则触发回调若无消息则不会触发回调。
*
* https://developer.work.weixin.qq.com/document/path/95039
*/
String msgAuditNotifyXml = "<xml>\n" +
" <ToUserName><![CDATA[CorpID]]></ToUserName>\n" +
" <FromUserName><![CDATA[sys]]></FromUserName> \n" +
" <CreateTime>1629101687</CreateTime>\n" +
" <MsgType><![CDATA[event]]></MsgType>\n" +
" <AgentID>2000004</AgentID>\n" +
" <Event><![CDATA[msgaudit_notify]]></Event>\n" +
"</xml>";
final WxCpXmlMessage msgAuditNotifyXmlMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, msgAuditNotifyXml);
msgAuditNotifyXmlMsg.setAllFieldsMap(XmlUtils.xml2Map(msgAuditNotifyXml));
log.info("msgAuditNotifyXmlMsg:{}", JSON.toString(msgAuditNotifyXmlMsg));
/**
* 增加变更事件类型:产生会话回调事件
*/
String msgauditNotify = WxCpConsts.EventType.MSGAUDIT_NOTIFY;
/**
* 仔细配置:
* <xml>

View File

@@ -4,15 +4,20 @@ import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import lombok.var;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.XmlUtils;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.school.user.*;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
import org.eclipse.jetty.util.ajax.JSON;
import org.testng.annotations.Test;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
/**
* 企业微信家校沟通相关接口.
@@ -47,6 +52,93 @@ public class WxCpSchoolUserTest {
final String exUserId = "wmOQpTDwAAJFHrryZ8I8ALLEZuLHIUKA";
// String changeContact = WxCpConsts.EventType.CHANGE_CONTACT;
/**
* 增加变更事件类型:
*/
// WxCpConsts.EventType.CHANGE_SCHOOL_CONTACT;
// WxCpConsts.SchoolContactChangeType.DELETE_STUDENT;
// WxCpConsts.SchoolContactChangeType.CREATE_DEPARTMENT;
/**
* 测试家校通讯录变更回调
* https://developer.work.weixin.qq.com/document/path/92052
*
* 新增学生事件
* 当学校在家校通讯录中新增学生时,回调此事件。
*/
String createStudentXml = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[change_school_contact]]></Event>\n" +
"\t<ChangeType><![CDATA[create_student]]></ChangeType>\n" +
"\t<Id><![CDATA[xiaoming]]></Id>\n" +
"</xml>";
/**
* 家长取消关注事件
* 当家长取消关注家校通知时,回调此事件。
*/
String unSubscribeXml = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[change_school_contact]]></Event>\n" +
"\t<ChangeType><![CDATA[unsubscribe]]></ChangeType>\n" +
"\t<Id><![CDATA[xiaoming]]></Id>\n" +
"</xml>";
/**
* 创建部门事件
* 当学校在家校通讯录中创建部门时,回调此事件。
*/
String createDepartmentXml = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[change_school_contact]]></Event>\n" +
"\t<ChangeType><![CDATA[create_deparmtment]]></ChangeType>\n" +
"\t<Id><![CDATA[1]]></Id>\n" +
"</xml>";
/**
* 删除部门事件
* 当学校删除家校通讯录部门时,回调此事件。
*/
String deleteDepartmentXml = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[change_school_contact]]></Event>\n" +
"\t<ChangeType><![CDATA[delete_deparmtment]]></ChangeType>\n" +
"\t<Id><![CDATA[1]]></Id>\n" +
"</xml>";
// WxCpXmlMessage.fromXml(createStudentXml);
final WxCpXmlMessage createStudentMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, createStudentXml);
Map<String, Object> map1 = XmlUtils.xml2Map(createStudentXml);
createStudentMsg.setAllFieldsMap(map1);
log.info("createStudentMsg:{}", JSON.toString(createStudentMsg));
final WxCpXmlMessage unSubscribeMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, unSubscribeXml);
Map<String, Object> map2 = XmlUtils.xml2Map(unSubscribeXml);
unSubscribeMsg.setAllFieldsMap(map2);
log.info("unSubscribeMsg:{}", JSON.toString(unSubscribeMsg));
final WxCpXmlMessage createDepartmentMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, createDepartmentXml);
createDepartmentMsg.setAllFieldsMap(XmlUtils.xml2Map(createDepartmentXml));
log.info("createDepartmentMsg:{}", JSON.toString(createDepartmentMsg));
final WxCpXmlMessage deleteDepartmentMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, deleteDepartmentXml);
deleteDepartmentMsg.setAllFieldsMap(XmlUtils.xml2Map(deleteDepartmentXml));
log.info("deleteDepartmentMsg:{}", JSON.toString(deleteDepartmentMsg));
/**
* 获取可使用的家长范围
* https://developer.work.weixin.qq.com/document/path/94895