import { PLATFORM,BASE_URL } from "./config"; const LOGIN_API = '/third-user/program/login'; function getLoginUrl() { console.log("------login url------:",BASE_URL) return BASE_URL+LOGIN_API } // 静默登录(自动获取token) export const silentLogin = async () => { try { // 1. 检查本地token const token = getLocalToken(); if (token) { return token; } console.log("静默登录",token) // 2. 执行平台静默登录 let data; if (PLATFORM === 'mp-weixin') { data = await wxSilentLogin(); } else if (PLATFORM === 'mp-kuaishou') { data = await ksSilentLogin(); } else { // 待处理 throw new Error("当前平台不支持") } // 3. 保存token if (data) { console.log("静默登录-----",data.token) saveLocalToken(data.token); saveUserInfo(data.user) uni.$emit('LOGIN_SUCCESS', { token: data.token }); return data.token; } throw new Error('静默登录失败'); } catch (error) { console.error('静默登录失败:', error); throw error; } }; // 微信小程序静默登录 const wxSilentLogin = async () => { try { // 1. 获取微信code const loginRes = await new Promise((resolve, reject) => { uni.login({ provider: 'weixin', success: resolve, fail: reject }); }); // 2. 获取小程序appId const accountInfo = uni.getAccountInfoSync(); const appId = accountInfo.miniProgram.appId; // 3. 发送登录请求并等待响应 const response = await new Promise((resolve, reject) => { uni.request({ url: getLoginUrl(), method: 'POST', data: { appid: appId, code: loginRes.code, }, success: (res) => { if (res.statusCode === 200) { console.log("login success",res) resolve(res.data); } else { reject(new Error(`请求失败: ${res.statusCode}`)); } }, fail: reject }); }); // 4. 处理登录响应 if (response.code === 200) { return response.data; } throw new Error(response.msg || '微信登录失败'); } catch (error) { console.error('微信静默登录失败:', error); throw error; } }; // 快手小程序静默登录 const ksSilentLogin = async () => { try { // 1. 获取快手code const loginRes = await new Promise((resolve, reject) => { uni.login({ provider: 'kuaishou', success: resolve, fail: reject }); }); // 2. 发送登录请求 let url = getLoginUrl() console.log("login:",url) console.log("ksSilentLogin------",loginRes) const accountInfo = uni.getAccountInfoSync(); const appId = accountInfo.miniProgram.appId; console.log("appid:",appId) // 2. 发送登录请求 const res = await new Promise((resolve, reject) => { uni.request({ url: getLoginUrl(), method: 'POST', data: { appid: appId, code: loginRes.code, }, success: (res) => { if (res.statusCode === 200) { console.log("login success",res) resolve(res.data); } else { reject(new Error(`请求失败: ${res.statusCode}`)); } }, fail: reject }); }); // 3. 返回token if (res.code === 0) { return res.data; } throw new Error(res.msg || '快手登录失败'); } catch (error) { console.error('快手静默登录失败:', error); throw error; } }; // 获取本地token const getLocalToken = () => { const tokenKey = PLATFORM === 'mp-weixin' ? 'wx_token' : 'ks_token'; return uni.getStorageSync(tokenKey); }; // 保存本地token const saveLocalToken = (token) => { const tokenKey = PLATFORM === 'mp-weixin' ? 'wx_token' : 'ks_token'; uni.setStorageSync(tokenKey, token); }; // 保存用户信息 const saveUserInfo = (user) => { uni.setStorageSync('user-info', user); }; // 获取用户信息(需要授权) export const getUserInfo = async () => { try { const res = await new Promise((resolve, reject) => { uni.getUserInfo({ provider: PLATFORM === 'mp-weixin' ? 'weixin' : 'kuaishou', success: resolve, fail: reject }); }); return res.userInfo; } catch (error) { console.error('获取用户信息失败:', error); return null; } }; // 登出 export const logout = () => { const tokenKey = PLATFORM === 'mp-weixin' ? 'wx_token' : 'ks_token'; uni.removeStorageSync(tokenKey); }; // 检查登录状态 export const checkLoginStatus = async () => { try { const token = getLocalToken(); if (!token) return false; console.log("tokenInfo:",token) return true; } catch (error) { return false; } }; // 初始化登录状态 export const initLogin = async () => { try { console.log("初始化登录 开始。。。") const isLoggedIn = await checkLoginStatus(); if (!isLoggedIn) { await silentLogin(); } return true; } catch (error) { console.error('初始化登录失败:', error); return false; } };