import { getImAdminToken,imAccountCheck,registerImUser,getImUserToken,updateImUser } from "@/pages_im/api/imApi"; // 保证管理员 Token 存在且可用 const ensureAdminToken = async () => { let adminToken = uni.getStorageSync('IMAdminToken'); if (adminToken) return adminToken; const resp = await getImAdminToken(); const token = resp?.token ?? resp?.data?.token; if (!token) throw new Error('IMAdminToken 获取失败'); uni.setStorageSync('IMAdminToken', token); console.log("qxj IMAdminToken",uni.getStorageSync("IMAdminToken")); return token; }; const delay = (ms) => new Promise((r) => setTimeout(r, ms));"" export const imAccountCheckReg = (userID) => { return new Promise(async (resolve, reject) => { let data={}; let hasReg=false; try { let token = uni.getStorageSync('IMAdminToken'); let tokenData={}; if(!token){ const respTokenObj = await getImAdminToken(); if(respTokenObj.errCode==0){ tokenData = respTokenObj.data; token=tokenData.token; uni.setStorageSync("IMAdminToken",token); } } data = await imAccountCheck(userID); if(data.results.lenth>0){ uni.setStorage({key: "IMUserID",data: userID}); hasReg=true; } data={hasReg:hasReg}; resolve(data); } catch (e) { reject(e); } }); }; export const getImUserTokenReq = async (userID, maxRetries = 3) => { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { await ensureAdminToken(); const userTokenData = await getImUserToken(userID); //console.log("qxj getImUserTokenReq userTokenData",userTokenData); uni.setStorage({ key: 'IMToken', data: userTokenData.token }); uni.setStorage({ key: 'IMUserID', data: userID }); return userTokenData; } catch (err) { console.log("qxj getImUserTokenReq err",err); const isExpired = err?.errCode === 1501 || /TokenExpired/i.test(err?.errMsg || ''); if (!isExpired || attempt === maxRetries) { console.error('获取 IM 用户 token 失败:', err); throw err; } // 刷新管理员 token 后重试 uni.removeStorageSync('IMAdminToken'); try { await ensureAdminToken(); } catch (_) {} await delay(Math.min(1000 * attempt, 3000)); } } }; export const registerImUserReq = async (userID, nickname, faceURL, maxRetries = 3) => { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { await ensureAdminToken(); const params = { users: [{ userID, nickname, faceURL }] }; await registerImUser(params); const data = await getImUserToken(userID); uni.setStorage({ key: 'IMToken', data: data.token }); uni.setStorage({ key: 'IMUserID', data: userID }); return data; } catch (err) { const isExpired = err?.errCode === 1501 || /TokenExpired/i.test(err?.errMsg || ''); if (!isExpired || attempt === maxRetries) { console.error('注册 IM 用户失败:', err); throw err; } uni.removeStorageSync('IMAdminToken'); try { await ensureAdminToken(); } catch (_) {} await delay(Math.min(1000 * attempt, 3000)); } } }; export const updateImUserReq = async (userID, nickname, faceURL, maxRetries = 3) => { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { await ensureAdminToken(); const params = { userInfo: { userID, nickname, faceURL } }; await updateImUser(params); const data = await getImUserToken(userID); uni.setStorage({ key: 'IMToken', data: data.token }); uni.setStorage({ key: 'IMUserID', data: userID }); return data; } catch (err) { const isExpired = err?.errCode === 1501 || /TokenExpired/i.test(err?.errMsg || ''); if (!isExpired || attempt === maxRetries) { console.error('更新 IM 用户失败:', err); throw err; } uni.removeStorageSync('IMAdminToken'); try { await ensureAdminToken(); } catch (_) {} await delay(Math.min(1000 * attempt, 3000)); } } }; export const openImLoginApi=async (data,IMToken,IMUserID,succCallBack,failCallBack) => { console.log("----qxj IMUserID:"+IMUserID+" IMToken:"+IMToken); let userID=data.userID; let nickName=data.nickName; let faceURL=data.avatar; if(!!IMUserID || !!IMToken){ getImUserTokenReq(IMUserID).then(res => { updateImUserReq(userID,nickName,faceURL).then(res1 => { succCallBack(res.token); }, rej => { failCallBack(); } ).catch((res) => { failCallBack(); }); }, rej => { if(rej.errCode==1004 && rej.errMsg=="RecordNotFoundError"){ //未找到 registerImUserReq(userID,nickName,faceURL).then(res => { succCallBack(); }, rej => { failCallBack(); } ).catch((res) => { failCallBack(); }); } } ).catch((err) => { failCallBack(); }); } else{ registerImUserReq(userID,nickName,faceURL).then(res => { succCallBack(); }, rej => { failCallBack(); } ).catch(() => { }); } }; export const testImLoginApi=async (data,IMToken,IMUserID,succCallBack,failCallBack) => { console.log("----qxj IMUserID:"+IMUserID+" IMToken:"+IMToken); if(!!IMUserID || !!IMToken){ getImUserTokenReq(IMUserID).then(res => { succCallBack(res.token); }, rej => { failCallBack(); } ).catch((err) => { failCallBack(); }); } else{ registerImUserReq(userID,nickName,faceURL).then(res => { succCallBack(); }, rej => { failCallBack(); } ).catch(() => { }); } };