212 lines
6.0 KiB
JavaScript
Raw Permalink Normal View History

2026-07-27 11:28:33 +08:00
const request = require("../request");
const groupTag = require("../group-tag");
const token = require("../token");
const api = require("../../api");
/**
*
* @param {string} authCode 临时授权码
*
* @returns
*/
exports.main = async ({ authCode, SuiteId, corpId }) => {
let suite_access_token = await token.getSuiteToken({ corpId });
console.log("suite_access_token", suite_access_token);
let url = `https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=${suite_access_token}`;
let params = {
auth_code: authCode,
};
let corpInfo = await request.main(url, params, "POST");
console.log("获取到企业信息", corpInfo);
await getCorpToken(corpInfo, suite_access_token);
};
// 获取到企业token
async function getCorpToken(info, suite_access_token) {
let item = {
corpId: info.auth_corp_info.corpid,
corp_name: info.auth_corp_info.corp_name,
corp_square_logo_url: info.auth_corp_info.corp_square_logo_url,
auth_info: info.auth_info,
auth_corp_info: info.auth_corp_info,
createTime: new Date().getTime(),
permanent_code: info.permanent_code,
};
let corpData = await api.getCorpApi({
type: "getCorpInfo",
corpId: info.auth_corp_info.corpid,
});
let corpList = corpData.data;
if (Array.isArray(corpList) && corpList.length > 0) {
await updateCorp(info.auth_corp_info.corpid, item);
} else {
const corpId = await getUninstalledCorpList(
info.auth_corp_info.corpid,
info,
suite_access_token
);
if (corpId) {
await updateCorp(corpId, item);
} else {
await api.getCorpApi({
type: "addCorp",
params: item,
});
}
// 添加默认角色、默认模版
await api.getCorpApi({
type: "addCorpDefaultInfo",
corpid: info.auth_corp_info.corpid,
});
// 同步机构标签
await groupTag.getCorpTagList({
type: "getCorpTagList",
corpId: info.auth_corp_info.corpid,
});
}
}
async function updateCorp(corpId, params) {
await api.getCorpApi({
type: "updateCorp",
params,
corpId,
});
}
async function getCorpInfo(corpId) {
let result = await api.getCorpApi({
type: "getCorpInfo",
corpId,
});
return result.data;
}
//获取到未安装的应用列表
async function getUninstalledCorpList(corpId, corpInfo, suite_access_token) {
let data = await getCorpInfo(corpId);
let corpIds = [];
console.log("获取到未装应用的机构", JSON.stringify(data));
if (data.length === 0) return "";
const arr = data.map((item) => {
return corpIdToOpencorpId(item.corpId, corpInfo, suite_access_token);
});
// 获取到所有未安装应用的corpId
for (let i = 0; i < arr.length; i += 10) {
const promiseArr = arr.slice(i, i + 10);
const promiseList = await Promise.all(promiseArr);
corpIds.push(...promiseList);
}
const corpObj = corpIds.filter(
(item) => item && item.open_corpid === corpId
)[0];
return corpObj ? corpObj.corpId : false;
}
async function corpIdToOpencorpId(corpId, corpInfo, suite_access_token) {
const provider_access_token = await getProviderAccessToken();
let url = `https://qyapi.weixin.qq.com/cgi-bin/service/corpid_to_opencorpid?provider_access_token=${provider_access_token}`;
let params = {
corpid: corpId,
};
let { open_corpid, errcode, errmsg } = await request.main(
url,
params,
"POST"
);
if (errcode === 0) {
await updateRolesCorpId(corpId, open_corpid);
await updateUserInfo(corpId, corpInfo, suite_access_token);
return {
corpId,
open_corpid,
};
} else {
return {
errcode,
errmsg,
};
}
}
async function getProviderAccessToken() {
let url = `https://qyapi.weixin.qq.com/cgi-bin/service/get_provider_token`;
let params = {
corpid: "wwe3fb2faa52cf9dfb",
provider_secret:
"v5sv-M56Amgik91OewBIzcq6ptbnlkC-QUisBq3UNErDF6Yyxd4BgBRea0_636se",
};
let { provider_access_token } = await request.main(url, params, "POST");
return provider_access_token;
}
// 更新角色的open_corpid
async function updateRolesCorpId(corpId, open_corpid) {
await api.getCorpApi({
type: "updateRolesCorpId",
corpId,
openCorpId: open_corpid,
});
}
// 通过明文corpId更新成员详情
async function updateUserInfo(corpId, corpInfo, suite_access_token) {
let result = await api.getCorpApi({
type: "getCorpMember",
corpId,
params: {
corpId,
},
page: 1,
pageSize: 1000,
});
const data = result.data;
if (data.length === 0) return;
const params = {
suite_access_token,
corpid: corpInfo.auth_corp_info.corpid,
permanentCode: corpInfo.permanent_code,
};
console.log("获取到未安装机构的成员信息", data);
let access_token = await token.getToken(params);
let useridList = data.map((item) => {
return item.userid;
});
const openUseridList = await userid_to_openuserid(access_token, useridList);
console.log("获取到未安装机构的openUserid", openUseridList);
let promiseArr = openUseridList.map((item) => {
return getCorpMemberInfoByUserId(
item,
access_token,
corpInfo.auth_corp_info.corpid
);
});
await Promise.all(promiseArr);
}
// 获取成员详情
async function getCorpMemberInfoByUserId(item, toekn, corpId) {
let url = `https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=${toekn}&userid=${item.open_userid}`;
let res = await request.main(url, null, "GET");
if (res.errcode === 0) {
const { errcode, errmsg, ...rest } = res;
rest["corpId"] = corpId;
rest["createTime"] = new Date().getTime();
await api.getCorpApi({
type: "updateCorpMemberByUserId",
userid: item.userid,
corpId,
params: rest,
});
}
}
async function userid_to_openuserid(token, useridList) {
if (!token) return "";
let url = `https://qyapi.weixin.qq.com/cgi-bin/batch/userid_to_openuserid?access_token=${token}`;
let res = await request.main(
url,
{
userid_list: useridList,
},
"POST"
);
return res.errcode === 0 ? res.open_userid_list : [];
}