1
0
mirror of synced 2026-02-15 09:17:57 +08:00

🎨 #1867【企业微信】优化完善第三方应用的接入代码

This commit is contained in:
xworks
2020-11-12 17:30:27 +08:00
committed by GitHub
parent edc04cb0ae
commit a2074a4d39
16 changed files with 1385 additions and 130 deletions

View File

@@ -0,0 +1,57 @@
package me.chanjar.weixin.cp.api;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.cp.bean.message.WxCpTpXmlMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
import me.chanjar.weixin.cp.tp.message.WxCpTpMessageHandler;
import me.chanjar.weixin.cp.tp.message.WxCpTpMessageRouter;
import me.chanjar.weixin.cp.tp.service.WxCpTpService;
import me.chanjar.weixin.cp.tp.service.impl.WxCpTpServiceImpl;
import org.testng.annotations.Test;
import java.util.Map;
import static org.testng.Assert.assertNotNull;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
public class WxCpTpMessageRouterTest {
@Test
public void testMessageRouter() {
WxCpTpService service = new WxCpTpServiceImpl();
WxCpTpMessageRouter router = new WxCpTpMessageRouter(service);
String xml = "<xml>\n" +
" <SuiteId><![CDATA[ww4asffe99e54cxxxx]]></SuiteId>\n" +
" <AuthCorpId><![CDATA[wxf8b4f85f3a79xxxx]]></AuthCorpId>\n" +
" <InfoType><![CDATA[change_contact]]></InfoType>\n" +
" <TimeStamp>1403610513</TimeStamp>\n" +
" <ChangeType><![CDATA[update_tag]]></ChangeType>\n" +
" <TagId>1</TagId>\n" +
" <AddUserItems><![CDATA[zhangsan,lisi]]></AddUserItems>\n" +
" <DelUserItems><![CDATA[zhangsan1,lisi1]]></DelUserItems>\n" +
" <AddPartyItems><![CDATA[1,2]]></AddPartyItems>\n" +
" <DelPartyItems><![CDATA[3,4]]></DelPartyItems>\n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
router.rule().infoType("change_contact").changeType("update_tag").handler(new WxCpTpMessageHandler() {
@Override
public WxCpXmlOutMessage handle(WxCpTpXmlMessage wxMessage, Map<String, Object> context, WxCpTpService wxCpService, WxSessionManager sessionManager) throws WxErrorException {
System.out.println("handler enter");
assertNotNull(wxCpService);
return null;
}
}).end();
assertNull(router.route(wxXmlMessage));
System.out.println("over");
}
}

View File

@@ -0,0 +1,234 @@
package me.chanjar.weixin.cp.bean.message;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
public class WxCpTpXmlMessageTest {
@Test
public void testUserNotifyXML() {
String xml = "<xml>\n" +
" <SuiteId><![CDATA[ww4asffe99e54c0f4c]]></SuiteId>\n" +
" <AuthCorpId><![CDATA[wxf8b4f85f3axxxxxx]]></AuthCorpId>\n" +
" <InfoType><![CDATA[change_contact]]></InfoType>\n" +
" <TimeStamp>1403610513</TimeStamp>\n" +
" <ChangeType><![CDATA[create_user]]></ChangeType>\n" +
" <UserID><![CDATA[zhangsan]]></UserID>\n" +
" <Name><![CDATA[张三]]></Name>\n" +
" <Department><![CDATA[1,2,3]]></Department>\n" +
" <MainDepartment>1</MainDepartment>\n" +
" <IsLeaderInDept><![CDATA[1,0,0]]></IsLeaderInDept>\n" +
" <Mobile><![CDATA[11111111111]]></Mobile>\n" +
" <Position><![CDATA[产品经理]]></Position>\n" +
" <Gender>1</Gender>\n" +
" <Email><![CDATA[zhangsan@xxx.com]]></Email>\n" +
" <Avatar><![CDATA[http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0]]></Avatar>\n" +
" <Alias><![CDATA[zhangsan]]></Alias>\n" +
" <Telephone><![CDATA[020-111111]]></Telephone>\n" +
" <ExtAttr>\n" +
" <Item>\n" +
" <Name><![CDATA[爱好]]></Name>\n" +
" <Type>0</Type>\n" +
" <Text>\n" +
" <Value><![CDATA[旅游]]></Value>\n" +
" </Text>\n" +
" </Item>\n" +
" <Item>\n" +
" <Name><![CDATA[卡号]]></Name>\n" +
" <Type>1</Type>\n" +
" <Web>\n" +
" <Title><![CDATA[企业微信]]></Title>\n" +
" <Url><![CDATA[https://work.weixin.qq.com]]></Url>\n" +
" </Web>\n" +
" </Item>\n" +
" </ExtAttr>\n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
assertEquals(wxXmlMessage.getSuiteId(), "ww4asffe99e54c0f4c");
assertEquals(wxXmlMessage.getPosition(), "产品经理");
assertEquals(wxXmlMessage.getGender(), Integer.valueOf(1));
assertEquals(wxXmlMessage.getTelephone(), "020-111111");
}
@Test
public void testRegisterCorp() {
String xml = "<xml>\n" +
" <ServiceCorpId><![CDATA[wwddddccc7775555aab]]></ServiceCorpId>\n" +
" <InfoType><![CDATA[register_corp]]></InfoType>\n" +
" <TimeStamp>1502682173</TimeStamp>\n" +
" <RegisterCode><![CDATA[pIKi3wRPNWCGF-pyP-YU5KWjDDD]]></RegisterCode>\n" +
" <AuthCorpId><![CDATA[wwddddccc7775555aaa]]></AuthCorpId>\n" +
" <ContactSync>\n" +
" <AccessToken><![CDATA[accesstoken000001]]></AccessToken>\n" +
" <ExpiresIn>1800</ExpiresIn>\n" +
" </ContactSync>\n" +
" <AuthUserInfo>\n" +
" <UserId><![CDATA[zhangshan]]></UserId>\n" +
" </AuthUserInfo>\n" +
" <State><![CDATA[state1]]></State>\n" +
" <TemplateId><![CDATA[tpl1test]]></TemplateId>\n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
assertEquals(wxXmlMessage.getServiceCorpId(), "wwddddccc7775555aab");
assertEquals(wxXmlMessage.getInfoType(), "register_corp");
assertEquals(wxXmlMessage.getRegisterCode(), "pIKi3wRPNWCGF-pyP-YU5KWjDDD");
assertNotNull(wxXmlMessage.getContactSync());
assertEquals(wxXmlMessage.getContactSync().getAccessToken(), "accesstoken000001");
assertEquals(wxXmlMessage.getContactSync().getExpiresIn(), Integer.valueOf(1800));
assertNotNull(wxXmlMessage.getAuthUserInfo());
assertEquals(wxXmlMessage.getAuthUserInfo().getUserId(), "zhangshan");
assertEquals(wxXmlMessage.getTemplateId(), "tpl1test");
}
@Test
public void tagNotifyTest() {
String xml = "<xml>\n" +
" <SuiteId><![CDATA[ww4asffe99e54cxxxx]]></SuiteId>\n" +
" <AuthCorpId><![CDATA[wxf8b4f85f3a79xxxx]]></AuthCorpId>\n" +
" <InfoType><![CDATA[change_contact]]></InfoType>\n" +
" <TimeStamp>1403610513</TimeStamp>\n" +
" <ChangeType><![CDATA[update_tag]]></ChangeType>\n" +
" <TagId>1</TagId>\n" +
" <AddUserItems><![CDATA[zhangsan,lisi]]></AddUserItems>\n" +
" <DelUserItems><![CDATA[zhangsan1,lisi1]]></DelUserItems>\n" +
" <AddPartyItems><![CDATA[1,2]]></AddPartyItems>\n" +
" <DelPartyItems><![CDATA[3,4]]></DelPartyItems>\n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
assertEquals(wxXmlMessage.getTagId(), Integer.valueOf(1));
assertNotNull(wxXmlMessage.getAddUserItems());
assertEquals(wxXmlMessage.getAddUserItems()[0], "zhangsan");
assertEquals(wxXmlMessage.getAddUserItems()[1], "lisi");
assertNotNull(wxXmlMessage.getDelUserItems());
assertNotNull(wxXmlMessage.getDelUserItems()[0], "zhangsan1");
assertNotNull(wxXmlMessage.getDelUserItems()[0], "lisi1");
assertNotNull(wxXmlMessage.getAddPartyItems());
assertEquals(wxXmlMessage.getAddPartyItems()[0], Integer.valueOf(1));
assertEquals(wxXmlMessage.getAddPartyItems()[1], Integer.valueOf(2));
}
@Test
public void enterAppTest() {
String xml = "<xml><ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"<FromUserName><![CDATA[FromUser]]></FromUserName>\n" +
"<CreateTime>1408091189</CreateTime>\n" +
"<MsgType><![CDATA[event]]></MsgType>\n" +
"<Event><![CDATA[enter_agent]]></Event>\n" +
"<EventKey><![CDATA[]]></EventKey>\n" +
"<AgentID>1</AgentID>\n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
assertEquals(wxXmlMessage.getToUserName(), "toUser");
assertEquals(wxXmlMessage.getFromUserName(), "FromUser");
assertEquals(wxXmlMessage.getCreateTime(), Long.valueOf(1408091189));
assertEquals(wxXmlMessage.getEvent(), "enter_agent");
assertEquals(wxXmlMessage.getEventKey(), "");
assertEquals(wxXmlMessage.getAgentID(), Integer.valueOf(1));
}
@Test
public void textMessageTest() {
String xml = "<xml>\n" +
" <ToUserName><![CDATA[toUser]]></ToUserName>\n" +
" <FromUserName><![CDATA[fromUser]]></FromUserName> \n" +
" <CreateTime>1348831860</CreateTime>\n" +
" <MsgType><![CDATA[text]]></MsgType>\n" +
" <Content><![CDATA[this is a test]]></Content>\n" +
" <MsgId>1234567890123456</MsgId>\n" +
" <AgentID>1</AgentID>\n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
assertEquals(wxXmlMessage.getToUserName(), "toUser");
assertEquals(wxXmlMessage.getFromUserName(), "fromUser");
assertEquals(wxXmlMessage.getCreateTime(), Long.valueOf(1348831860));
assertEquals(wxXmlMessage.getMsgType(), "text");
assertEquals(wxXmlMessage.getMsgId(), "1234567890123456");
}
@Test
public void ApprovalInfoTest() {
String xml = "<xml>\n" +
" <ToUserName>wwddddccc7775555aaa</ToUserName> \n" +
" <FromUserName>sys</FromUserName> \n" +
" <CreateTime>1527838022</CreateTime> \n" +
" <MsgType>event</MsgType> \n" +
" <Event>open_approval_change</Event>\n" +
" <AgentID>1</AgentID>\n" +
" <ApprovalInfo> \n" +
" <ThirdNo>201806010001</ThirdNo> \n" +
" <OpenSpName>付款</OpenSpName> \n" +
" <OpenTemplateId>1234567890</OpenTemplateId> \n" +
" <OpenSpStatus>1</OpenSpStatus> \n" +
" <ApplyTime>1527837645</ApplyTime> \n" +
" <ApplyUserName>xiaoming</ApplyUserName> \n" +
" <ApplyUserId>1</ApplyUserId> \n" +
" <ApplyUserParty>产品部</ApplyUserParty> \n" +
" <ApplyUserImage>http://www.qq.com/xxx.png</ApplyUserImage> \n" +
" <ApprovalNodes> \n" +
" <ApprovalNode> \n" +
" <NodeStatus>1</NodeStatus> \n" +
" <NodeAttr>1</NodeAttr> \n" +
" <NodeType>1</NodeType> \n" +
" <Items> \n" +
" <Item> \n" +
" <ItemName>xiaohong</ItemName> \n" +
" <ItemUserId>2</ItemUserId> \n" +
" <ItemImage>http://www.qq.com/xxx.png</ItemImage> \n" +
" <ItemStatus>1</ItemStatus> \n" +
" <ItemSpeech></ItemSpeech> \n" +
" <ItemOpTime>0</ItemOpTime> \n" +
" </Item> \n" +
" </Items> \n" +
" </ApprovalNode> \n" +
" </ApprovalNodes> \n" +
" <NotifyNodes> \n" +
" <NotifyNode> \n" +
" <ItemName>xiaogang</ItemName> \n" +
" <ItemUserId>3</ItemUserId> \n" +
" <ItemImage>http://www.qq.com/xxx.png</ItemImage> \n" +
" </NotifyNode> \n" +
" </NotifyNodes> \n" +
" <approverstep>0</approverstep> \n" +
" </ApprovalInfo> \n" +
"</xml>";
WxCpTpXmlMessage wxXmlMessage = WxCpTpXmlMessage.fromXml(xml);
assertEquals(wxXmlMessage.getToUserName(), "wwddddccc7775555aaa");
assertEquals(wxXmlMessage.getFromUserName(), "sys");
assertEquals(wxXmlMessage.getCreateTime(), Long.valueOf(1527838022));
assertEquals(wxXmlMessage.getEvent(), "open_approval_change");
assertNotNull(wxXmlMessage.getApprovalInfo());
assertEquals(wxXmlMessage.getApprovalInfo().getThirdNo(), Long.valueOf(201806010001L));
assertEquals(wxXmlMessage.getApprovalInfo().getOpenSpName(), "付款");
assertEquals(wxXmlMessage.getApprovalInfo().getThirdNo(), Long.valueOf(201806010001L));
assertEquals(wxXmlMessage.getApprovalInfo().getApplyTime(), Long.valueOf(1527837645));
assertEquals(wxXmlMessage.getApprovalInfo().getApplyUserName(), "xiaoming");
assertNotNull(wxXmlMessage.getApprovalInfo().getApprovalNodes());
assertNotNull(wxXmlMessage.getApprovalInfo().getApprovalNodes().get(0));
assertEquals(wxXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getNodeAttr(), Integer.valueOf(1));
assertEquals(wxXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getNodeType(), Integer.valueOf(1));
assertNotNull(wxXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getItems());
assertEquals(wxXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getItems().get(0).getItemName(), "xiaohong");
assertEquals(wxXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getItems().get(0).getItemOpTime(), Long.valueOf(0));
assertNotNull(wxXmlMessage.getApprovalInfo().getNotifyNodes().get(0));
assertEquals(wxXmlMessage.getApprovalInfo().getNotifyNodes().get(0).getItemImage(), "http://www.qq.com/xxx.png");
assertEquals(wxXmlMessage.getApprovalInfo().getNotifyNodes().get(0).getItemUserId(), Integer.valueOf(3));
}
}