262 lines
7.5 KiB
JavaScript
Raw Normal View History

2026-07-27 11:28:33 +08:00
const request = require("../request.js");
const accessToken = require("../token");
const utils = require("../utils");
const api = require("../../api");
exports.main = async (context) => {
switch (context.type) {
case "getMyExternalcontact":
return await exports.getMyExternalcontact(context);
case "getNameByexternalUserId":
return await exports.getNameByexternalUserId(context);
case "getCorpMemberInfoByUserId":
return await exports.getCorpMemberInfoByUserId(context);
case "unionidToExternalUserid":
return await exports.unionidToExternalUserid(context);
case "getCorpMemberExternalContact":
return await exports.getCorpMemberExternalContact(context);
case "getMyExternalcontactByBatch":
return await exports.getMyExternalcontactByBatch(context);
case "batchGetWeChatFriend":
return await exports.batchGetWeChatFriend(context);
default: {
return {
success: false,
message: "未找到对应的操作类型",
};
}
}
};
// 获取机构成员的外部联系人
exports.getCorpMemberExternalContact = async (context) => {
let { token, userId } = context;
try {
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token=${token}&userid=${userId}`;
let res = await request.main(url, null, "GET");
return {
success: true,
message: "获取成功",
data: res.errcode === 0 ? res.external_userid : [],
};
} catch (error) {
return {
success: false,
message: error,
};
}
};
/**
* 批量获取外部联系人详情
* @param {*} context
* @returns
*/
exports.getMyExternalcontact = async (context) => {
// 获取access_token
let { access_token = "", userId, corpId, permanentCode } = context;
try {
if (!access_token) {
access_token = await accessToken.getToken({
corpId: corpId,
permanentCode: permanentCode,
});
}
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=${access_token}`;
let params = {
userid_list: userId,
limit: 1000,
cursor: "", // 初始的 cursor 值为 1
};
let allData = [];
while (true) {
let res = await request.main(url, params, "POST");
let arr = res.external_contact_list.map((item) => {
return {
...item.external_contact,
userid: item.follow_info ? item.follow_info.userid : "",
createtime: item.follow_info ? item.follow_info.createtime : "",
addWay: item.follow_info ? item.follow_info.add_way : "",
};
});
allData.push(...arr);
if (res.next_cursor) {
params.cursor = res.next_cursor; // 更新 cursor 的值
} else {
break; // 如果 next_cursor 为空,表示所有数据都已经获取完毕
}
}
return {
success: true,
message: "获取成功",
data: allData,
};
} catch (error) {
return {
success: false,
message: error,
};
}
};
/**
* 分批获取外部联系人
*/
exports.batchGetWeChatFriend = async () => {
const corpRes = await api.getCorpApi({
type: "getCorpList",
});
console.log("corpRes", corpRes);
const corpIds =
corpRes.data && Array.isArray(corpRes.data)
? corpRes.data.map((i) => i.corpId)
: [];
console.log("corpIds", corpIds);
for (let corpId of corpIds) {
// 获取access_token
const { data } = await api.getCorpApi({
corpId,
accessToken,
type: "getOpenedAccount",
});
const access_token = await accessToken.getToken({
corpId,
});
if (typeof access_token !== "string") return;
const userIds = data.map((i) => i.userid);
const taskFn = (userId) => {
return this.getMyExternalcontactByBatch({ corpId, userId, access_token });
};
await utils.executeWithConcurrency(userIds, taskFn);
}
return {
success: true,
message: "获取成功",
};
};
exports.getMyExternalcontactByBatch = async (context) => {
let { corpId, access_token, userId } = context;
try {
if (!access_token) {
access_token = await accessToken.getToken({
corpId,
});
}
if (typeof access_token !== "string") return;
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=${access_token}`;
let params = {
userid_list: [userId],
limit: 1000,
cursor: "", // 初始的 cursor 值为 1
};
while (true) {
let res = await request.main(url, params, "POST");
let arr = res.external_contact_list.map((item) => {
return {
...item.external_contact,
userid: item.follow_info ? item.follow_info.userid : "",
createtime: item.follow_info ? item.follow_info.createtime : "",
addWay: item.follow_info ? item.follow_info.add_way : "",
};
});
await api.getCorpApi({
type: "batchUpdateWechatFriends",
corpId,
data: arr,
});
if (res.next_cursor) {
params.cursor = res.next_cursor; // 更新 cursor 的值
} else {
break; // 如果 next_cursor 为空,表示所有数据都已经获取完毕
}
}
return {
success: true,
message: "获取成功",
};
} catch (error) {
return {
success: false,
message: error,
};
}
};
/**
* 获取外部联系人
* @param {*} context
* @returns
*/
exports.getNameByexternalUserId = async (context) => {
// 获取access_token
let { corpId, permanentCode, access_token = "", externalUserId } = context;
try {
if (!access_token)
access_token = await accessToken.getToken({
corpId: corpId,
permanentCode,
});
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=${access_token}&external_userid=${externalUserId}`;
let res = await request.main(url, null, "GET");
if (res.errcode === 0) {
return {
success: true,
message: "获取成功",
data: res,
};
} else {
return {
success: false,
message: res.errmsg,
errcode: res.errcode,
};
}
} catch (error) {
return {
success: false,
message: error,
};
}
};
exports.unionidToExternalUserid = async (context) => {
let { unionid, openid, corpId } = context;
let { suiteToken } = await api.getCorpApi({
type: "getSuiteToken",
});
let url = `https://qyapi.weixin.qq.com/cgi-bin/service/externalcontact/unionid_to_external_userid_3rd?suite_access_token=${suiteToken}`;
const params = {
unionid,
openid,
};
let res = await request.main(url, params, "POST");
const info =
res.external_userid_info &&
Array.isArray(res.external_userid_info) &&
res.external_userid_info.find((i) => i.corpid === corpId);
let externalUserId = info ? info.external_userid : "";
return {
success: true,
message: "获取成功",
data: externalUserId,
};
};
// 获取成员详情
exports.getCorpMemberInfoByUserId = async (context) => {
const { corpId, permanentCode, userId } = context.params;
try {
let ACCESS_TOKEN = await accessToken.getToken({
corpId: corpId,
permanentCode: permanentCode,
});
let url = `https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=${ACCESS_TOKEN}&userid=${userId}`;
let res = await request.main(url, null, "GET");
return {
success: true,
message: "获取成功",
data: res,
};
} catch (error) {
return {
success: false,
message: error,
};
}
};