|
@@ -364,7 +364,50 @@ public class WeiXinCorpController {
|
|
|
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAesKey, corpId);
|
|
|
String sMsg = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, requestBody);
|
|
|
log.info("解密后===msg: " + sMsg);
|
|
|
+ org.json.JSONObject jsonObject = XML.toJSONObject(sMsg);
|
|
|
+ if(jsonObject.has("Event") && ("subscribe".equals(jsonObject.getString("Event")))){
|
|
|
+ //成员关注应用事件,发生在该企业已经开通应用的情况下。
|
|
|
+ System.out.println("成员关注应用事件!");
|
|
|
+ String corpWxUserId = jsonObject.getString("FromUserName");
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
|
|
|
+ if (wxCorpInfo != null) {
|
|
|
+ //企业存在,生成对应的用户
|
|
|
+ Integer companyId = wxCorpInfo.getCompanyId();
|
|
|
+ JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), corpWxUserId);
|
|
|
+ SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
|
|
|
|
|
|
+ //成功获取到通讯录的个人详情
|
|
|
+ Long id = SnowFlake.nextId();
|
|
|
+ //通过getUserInfo接口获取到的json key是小写的
|
|
|
+ JSONArray department = userObj.getJSONArray("department");
|
|
|
+ Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
|
|
|
+ Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
|
|
|
+ String userId = userObj.getString("userid");
|
|
|
+ String openUserId = userObj.getString("open_userid");
|
|
|
+ int cnt = userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", openUserId));
|
|
|
+ if (cnt == 0) {
|
|
|
+ //用户不存在
|
|
|
+ User user = new User()
|
|
|
+ .setId(id.toString())
|
|
|
+ .setRoleId(defaultRole.getId())
|
|
|
+ .setRoleName(defaultRole.getRolename())
|
|
|
+ .setName(userObj.getString("name"))
|
|
|
+ .setPhone(userObj.getString("mobile"))
|
|
|
+ .setPassword(MD5Util.getPassword("000000"))
|
|
|
+ .setCorpwxUserid(openUserId)
|
|
|
+ .setCorpwxRealUserid(corpWxUserId)
|
|
|
+ .setJobNumber(openUserId.equals(userId)?null:userId)
|
|
|
+ .setColor(ColorUtil.randomColor())
|
|
|
+ .setCompanyId(companyId);
|
|
|
+ if (sysDept != null) {
|
|
|
+ user.setDepartmentId(sysDept.getDepartmentId());
|
|
|
+ List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
+ user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
|
|
|
+ }
|
|
|
+ userMapper.insert(user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
|
// TODO
|
|
|
// 解密失败,失败原因请查看异常
|
|
@@ -492,7 +535,6 @@ public class WeiXinCorpController {
|
|
|
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAesKey, suitId);
|
|
|
String sMsg = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, requestBody);
|
|
|
log.info("解密后===msg: " + sMsg);
|
|
|
- // TODO: 解析出明文xml标签的内容进行处理
|
|
|
org.json.JSONObject jsonObject = XML.toJSONObject(sMsg);
|
|
|
log.info("json=="+jsonObject.toString());
|
|
|
jsonObject = jsonObject.getJSONObject("xml");
|
|
@@ -506,50 +548,7 @@ public class WeiXinCorpController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(jsonObject.has("Event") && ("subscribe".equals(jsonObject.getString("Event")))){
|
|
|
- //成员关注应用事件,发生在该企业已经开通应用的情况下。
|
|
|
- System.out.println("成员关注应用事件!");
|
|
|
- String corpId = jsonObject.getString("ToUserName");
|
|
|
- String corpWxUserId = jsonObject.getString("FromUserName");
|
|
|
- WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
|
|
|
- if (wxCorpInfo != null) {
|
|
|
- //企业存在,生成对应的用户
|
|
|
- Integer companyId = wxCorpInfo.getCompanyId();
|
|
|
- JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), corpWxUserId);
|
|
|
- SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
|
|
|
|
|
|
- //成功获取到通讯录的个人详情
|
|
|
- Long id = SnowFlake.nextId();
|
|
|
- //通过getUserInfo接口获取到的json key是小写的
|
|
|
- JSONArray department = userObj.getJSONArray("department");
|
|
|
- Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
|
|
|
- Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
|
|
|
- String userId = userObj.getString("userid");
|
|
|
- String openUserId = userObj.getString("open_userid");
|
|
|
- int cnt = userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", openUserId));
|
|
|
- if (cnt == 0) {
|
|
|
- //用户不存在
|
|
|
- User user = new User()
|
|
|
- .setId(id.toString())
|
|
|
- .setRoleId(defaultRole.getId())
|
|
|
- .setRoleName(defaultRole.getRolename())
|
|
|
- .setName(userObj.getString("name"))
|
|
|
- .setPhone(userObj.getString("mobile"))
|
|
|
- .setPassword(MD5Util.getPassword("000000"))
|
|
|
- .setCorpwxUserid(openUserId)
|
|
|
- .setCorpwxRealUserid(corpWxUserId)
|
|
|
- .setJobNumber(openUserId.equals(userId)?null:userId)
|
|
|
- .setColor(ColorUtil.randomColor())
|
|
|
- .setCompanyId(companyId);
|
|
|
- if (sysDept != null) {
|
|
|
- user.setDepartmentId(sysDept.getDepartmentId());
|
|
|
- List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
- user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
|
|
|
- userMapper.insert(user);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
if (jsonObject.has("AuthCode")) {
|
|
|
//企业授权通知
|
|
|
String authCode = jsonObject.getString("AuthCode");
|
|
@@ -629,8 +628,8 @@ public class WeiXinCorpController {
|
|
|
user.setDepartmentId(sysDept.getDepartmentId());
|
|
|
List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
|
|
|
- userMapper.insert(user);
|
|
|
}
|
|
|
+ userMapper.insert(user);
|
|
|
} else if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret()) && !StringUtils.isEmpty(wxCorpInfo.getContactServer())) {
|
|
|
//通过通讯录secret获取到员工姓名;这是从内部通讯录的
|
|
|
String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
|
|
@@ -2701,7 +2700,7 @@ public class WeiXinCorpController {
|
|
|
}
|
|
|
|
|
|
private boolean saveOrderAndUpCompany(org.json.JSONObject jsonObject) throws Exception {
|
|
|
- System.err.println("+++++++++++++++++++"+"订单回调时间"+"++++++++++++++++++++++");
|
|
|
+ System.err.println("+++++++++++++++++++"+"订单回调开始"+"++++++++++++++++++++++");
|
|
|
String infoType = jsonObject.getString("InfoType");
|
|
|
String suiteAccessToken = getSuiteAccessToken();
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
@@ -2713,18 +2712,19 @@ public class WeiXinCorpController {
|
|
|
if ("change_editon".equals(infoType)){
|
|
|
String url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_auth_info?suite_access_token="+suiteAccessToken;
|
|
|
String paidCorpId = jsonObject.getString("PaidCorpId");
|
|
|
- WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", paidCorpId));
|
|
|
- Company company = companyMapper.selectById(corpid.getCompanyId());
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", paidCorpId));
|
|
|
+ Company company = companyMapper.selectById(wxCorpInfo.getCompanyId());
|
|
|
JSONObject map = new JSONObject();
|
|
|
map.put("auth_corpid",corpId);
|
|
|
- map.put("permanent_code",corpid.getPermanentCode());
|
|
|
+ map.put("permanent_code",wxCorpInfo.getPermanentCode());
|
|
|
HttpEntity<JSONObject> detailEntity = new HttpEntity<>(map, headers);
|
|
|
ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(url, detailEntity, String.class);
|
|
|
JSONObject json = JSONObject.parseObject(detailResponseEntity.getBody());
|
|
|
- if (json.getInteger("errcode")==0){
|
|
|
- String editionName = json.getString("edition_name");
|
|
|
+ if (json.containsKey("auth_corp_info")){
|
|
|
+ String editionName = json.getString("edition_id");
|
|
|
switch (editionName){
|
|
|
- case "工时基础版":
|
|
|
+ //基础版
|
|
|
+ case "sp17da4a6e6f2a91f8":
|
|
|
company.setPackageProject(0);
|
|
|
company.setPackageOa(0);
|
|
|
company.setPackageExpense(0);
|
|
@@ -2732,7 +2732,8 @@ public class WeiXinCorpController {
|
|
|
company.setPackageEngineering(0);
|
|
|
company.setPackageProvider(0);
|
|
|
break;
|
|
|
- case "项目管理专业版":
|
|
|
+ //专业版
|
|
|
+ case "sp4a30d92ede178afd":
|
|
|
company.setPackageProject(1);//项目协作平台
|
|
|
company.setPackageOa(0);//OA平台;请假,出差等
|
|
|
company.setPackageExpense(1);//费用报销
|
|
@@ -2740,7 +2741,8 @@ public class WeiXinCorpController {
|
|
|
company.setPackageEngineering(0);//工程专业
|
|
|
company.setPackageProvider(0);//供应商模块
|
|
|
break;
|
|
|
- case "建筑工程管理专业版":
|
|
|
+ //建筑版
|
|
|
+ case "spd04f1b0582a0fe19":
|
|
|
company.setPackageProject(1);//项目协作平台
|
|
|
company.setPackageOa(0);//OA平台;请假,出差等
|
|
|
company.setPackageExpense(1);//费用报销
|
|
@@ -2748,7 +2750,8 @@ public class WeiXinCorpController {
|
|
|
company.setPackageEngineering(1);//工程专业
|
|
|
company.setPackageProvider(0);//供应商模块
|
|
|
break;
|
|
|
- case "企业办公旗舰版":
|
|
|
+ //旗舰版
|
|
|
+ case "sp69f71e42798c7f55":
|
|
|
company.setPackageProject(1);//项目协作平台
|
|
|
company.setPackageOa(1);//OA平台;请假,出差等
|
|
|
company.setPackageExpense(1);//费用报销
|
|
@@ -2764,48 +2767,62 @@ public class WeiXinCorpController {
|
|
|
}
|
|
|
}else {
|
|
|
String orderId = "";
|
|
|
- if (jsonObject.getString("OrderId")!=null){
|
|
|
+ if (jsonObject.has("OrderId")){
|
|
|
orderId = jsonObject.getString("OrderId");
|
|
|
}else {
|
|
|
orderId = jsonObject.getString("NewOrderId");
|
|
|
}
|
|
|
WxOrder wxOrder = new WxOrder();
|
|
|
- String detailUrl = " https://qyapi.weixin.qq.com/cgi-bin/service/get_order?suite_access_token=" + suiteAccessToken;
|
|
|
+ String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/service/get_order?suite_access_token=" + suiteAccessToken;
|
|
|
JSONObject detailMap = new JSONObject();
|
|
|
detailMap.put("orderid",orderId);
|
|
|
HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
|
|
|
ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
|
|
|
String body = detailResponseEntity.getBody();
|
|
|
+ System.out.println("+++++++++++++++++++++++++++++++++++++++订单详情信息!");
|
|
|
+ System.out.println(body);
|
|
|
JSONObject orderDetail = JSONObject.parseObject(body);
|
|
|
if (orderDetail.getInteger("errcode")==0){
|
|
|
wxOrder.setOrderid(orderDetail.getString("orderid"));
|
|
|
wxOrder.setOrderStatus(orderDetail.getInteger("order_status"));
|
|
|
wxOrder.setOrderType(orderDetail.getInteger("order_type"));
|
|
|
wxOrder.setPaidCorpid(orderDetail.getString("paid_corpid"));
|
|
|
- wxOrder.setOperatorId(orderDetail.getString("operator_id"));
|
|
|
+ if (orderDetail.containsKey("operator_id")){
|
|
|
+ wxOrder.setOperatorId(orderDetail.getString("operator_id"));
|
|
|
+ }
|
|
|
wxOrder.setSuiteid(orderDetail.getString("suiteid"));
|
|
|
- wxOrder.setAppid(orderDetail.getString("appid"));
|
|
|
+ if (orderDetail.containsKey("appid")){
|
|
|
+ wxOrder.setAppid(orderDetail.getString("appid"));
|
|
|
+ }
|
|
|
wxOrder.setEditionId(orderDetail.getString("edition_id"));
|
|
|
wxOrder.setEditionName(orderDetail.getString("edition_name"));
|
|
|
- wxOrder.setPrice(orderDetail.getDouble("price"));
|
|
|
+ wxOrder.setPrice(orderDetail.getInteger("price"));
|
|
|
wxOrder.setUserCount(orderDetail.getInteger("user_count"));
|
|
|
wxOrder.setOrderPeriod(orderDetail.getInteger("order_period"));
|
|
|
- LocalDateTime order_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("order_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
+ LocalDateTime order_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("order_time"),0,ZoneOffset.ofHours(8));
|
|
|
wxOrder.setOrderTime(order_time);
|
|
|
- LocalDateTime paid_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("paid_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
- wxOrder.setPaidTime(paid_time);
|
|
|
- LocalDateTime begin_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("begin_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
- wxOrder.setBeginTime(begin_time);
|
|
|
- LocalDateTime end_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("end_time")/1000,0,ZoneOffset.ofHours(8));
|
|
|
- wxOrder.setEndTime(end_time);
|
|
|
+ if (orderDetail.getLong("paid_time")!=0){
|
|
|
+ LocalDateTime paid_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("paid_time"),0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setPaidTime(paid_time);
|
|
|
+ }
|
|
|
+ if (orderDetail.getLong("begin_time")!=0){
|
|
|
+ LocalDateTime begin_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("begin_time"),0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setBeginTime(begin_time);
|
|
|
+ }
|
|
|
+ if (orderDetail.getLong("end_time")!=0){
|
|
|
+ LocalDateTime end_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("end_time"),0,ZoneOffset.ofHours(8));
|
|
|
+ wxOrder.setEndTime(end_time);
|
|
|
+ }
|
|
|
wxOrder.setOrderFrom(orderDetail.getInteger("order_from"));
|
|
|
wxOrder.setOperatorCorpid(orderDetail.getString("operator_corpid"));
|
|
|
- wxOrder.setServiceShareAmount(orderDetail.getString("service_share_amount"));
|
|
|
- wxOrder.setPlatformShareAmount(orderDetail.getString("platform_share_amount"));
|
|
|
- wxOrder.setDealerShareAmount(orderDetail.getString("dealer_share_amount"));
|
|
|
- JSONObject dealer_corp_info = orderDetail.getJSONObject("dealer_corp_info");
|
|
|
- wxOrder.setDealerCorpid(dealer_corp_info.getString("corpid"));
|
|
|
- wxOrder.setDealerCorpName(dealer_corp_info.getString("corp_name"));
|
|
|
+ wxOrder.setServiceShareAmount(orderDetail.getInteger("service_share_amount"));
|
|
|
+ wxOrder.setPlatformShareAmount(orderDetail.getInteger("platform_share_amount"));
|
|
|
+ wxOrder.setDealerShareAmount(orderDetail.getInteger("dealer_share_amount"));
|
|
|
+ if (orderDetail.containsKey("dealer_corp_info")){
|
|
|
+ JSONObject dealer_corp_info = orderDetail.getJSONObject("dealer_corp_info");
|
|
|
+ wxOrder.setDealerCorpid(dealer_corp_info.getString("corpid"));
|
|
|
+ wxOrder.setDealerCorpName(dealer_corp_info.getString("corp_name"));
|
|
|
+ }
|
|
|
//获取该公司对象
|
|
|
WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", wxOrder.getPaidCorpid()));
|
|
|
Company company = companyMapper.selectById(corpid.getCompanyId());
|
|
@@ -2869,4 +2886,11 @@ public class WeiXinCorpController {
|
|
|
}
|
|
|
return msg;
|
|
|
}
|
|
|
+
|
|
|
+ @RequestMapping("/testMsg")
|
|
|
+ public HttpRespMsg testMsg() {
|
|
|
+ String str = "<xml><ToUserName><![CDATA[wpy9TkCAAAFDNLcpmWNM2fMegkAbjr5Q]]></ToUserName><FromUserName><![CDATA[woy9TkCAAA2g_nfDHQxJ_ipomMs9rMCQ]]></FromUserName><CreateTime>1667874192</CreateTime><MsgType><![CDATA[event]]></MsgType><AgentID>1000057</AgentID><Event><![CDATA[subscribe]]></Event></xml>";
|
|
|
+
|
|
|
+ return new HttpRespMsg();
|
|
|
+ }
|
|
|
}
|