|
|
@@ -10,6 +10,7 @@ import type {
|
|
|
WecomGroupChatResponse,
|
|
|
WecomInternalUserResponse,
|
|
|
WecomTokenResponse,
|
|
|
+ WecomUserDetailResponse,
|
|
|
WecomVisitorProfile,
|
|
|
} from './types'
|
|
|
|
|
|
@@ -36,6 +37,7 @@ const TOKEN_EXPIRED_ERRCODES = new Set([40014, 42001])
|
|
|
const wecomActionText: Record<string, string> = {
|
|
|
gettoken: '企业微信凭证获取失败',
|
|
|
getuserinfo: '身份获取失败',
|
|
|
+ getuserdetail: '成员敏感信息获取失败',
|
|
|
userGet: '成员信息获取失败',
|
|
|
externalcontactGet: '外部联系人信息获取失败',
|
|
|
groupchatGet: '客户群信息获取失败',
|
|
|
@@ -173,6 +175,20 @@ export function getWecomInternalUser(userid: string) {
|
|
|
)
|
|
|
}
|
|
|
|
|
|
+export function getWecomUserDetail(userTicket: string) {
|
|
|
+ return requestWithAccessToken<WecomUserDetailResponse>(
|
|
|
+ (accessToken) => ({
|
|
|
+ url: '/cgi-bin/auth/getuserdetail',
|
|
|
+ method: 'POST',
|
|
|
+ data: {
|
|
|
+ access_token: accessToken,
|
|
|
+ user_ticket: userTicket,
|
|
|
+ },
|
|
|
+ }),
|
|
|
+ 'getuserdetail',
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
export function getWecomExternalContact(externalUserId: string) {
|
|
|
return requestWithAccessToken<WecomExternalContactResponse>(
|
|
|
(accessToken) => ({
|
|
|
@@ -316,15 +332,30 @@ export async function syncExternalVisitorProfile(code: string) {
|
|
|
userInfo,
|
|
|
externalContact,
|
|
|
internalUserRaw: undefined,
|
|
|
+ userTicket: undefined,
|
|
|
+ debugAccessToken: undefined,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const memberUserId = pickMemberUserId(userInfo)
|
|
|
if (memberUserId) {
|
|
|
const internal = await getWecomInternalUser(memberUserId)
|
|
|
+ let detailRaw: WecomUserDetailResponse | undefined
|
|
|
+ let detailMobile = ''
|
|
|
+ let debugAccessToken = ''
|
|
|
+ if (userInfo.user_ticket) {
|
|
|
+ try {
|
|
|
+ const detail = await getWecomUserDetail(userInfo.user_ticket)
|
|
|
+ detailRaw = detail
|
|
|
+ detailMobile = (detail.mobile || '').trim()
|
|
|
+ debugAccessToken = getCachedAccessToken()
|
|
|
+ } catch {
|
|
|
+ detailMobile = ''
|
|
|
+ }
|
|
|
+ }
|
|
|
const profile: WecomVisitorProfile = {
|
|
|
name: internal.name || '',
|
|
|
- mobile: (internal.mobile || internal.telephone || '').trim(),
|
|
|
+ mobile: detailMobile || (internal.mobile || internal.telephone || '').trim(),
|
|
|
unionid: '',
|
|
|
internalUserid: memberUserId,
|
|
|
}
|
|
|
@@ -334,7 +365,9 @@ export async function syncExternalVisitorProfile(code: string) {
|
|
|
profile,
|
|
|
userInfo,
|
|
|
externalContact: null,
|
|
|
- internalUserRaw: internal,
|
|
|
+ internalUserRaw: detailRaw,
|
|
|
+ userTicket: userInfo.user_ticket || '',
|
|
|
+ debugAccessToken,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -344,5 +377,7 @@ export async function syncExternalVisitorProfile(code: string) {
|
|
|
userInfo,
|
|
|
externalContact: null,
|
|
|
internalUserRaw: undefined,
|
|
|
+ userTicket: undefined,
|
|
|
+ debugAccessToken: undefined,
|
|
|
}
|
|
|
}
|