262 lines
7.5 KiB
JavaScript
262 lines
7.5 KiB
JavaScript
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,
|
|
};
|
|
}
|
|
};
|