| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- 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);
- 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(() => {
-
- });
- }
- };
|