const { APP_API_BASE_URL, WECHAT_APP_ID } = require('../config/env.js') const TOKEN_KEY = 'qipai_access_token' function request(path, options = {}) { return new Promise((resolve, reject) => { const token = wx.getStorageSync(TOKEN_KEY) wx.request({ url: `${APP_API_BASE_URL}${path}`, method: options.method || 'GET', data: options.data, header: { 'x-wechat-appid': WECHAT_APP_ID, ...(token ? { authorization: `Bearer ${token}` } : {}), ...(options.headers || {}), }, success(response) { if (response.statusCode >= 200 && response.statusCode < 300) { resolve(response.data) return } reject(new Error(response.data?.message || `请求失败:${response.statusCode}`)) }, fail: reject, }) }) } function login() { return new Promise((resolve, reject) => { wx.login({ success: async ({ code }) => { try { const response = await request('/auth/wechat-login', { method: 'POST', data: { code }, }) wx.setStorageSync(TOKEN_KEY, response.data.accessToken) resolve(response.data) } catch (error) { reject(error) } }, fail: reject, }) }) } function ensureLogin() { const token = wx.getStorageSync(TOKEN_KEY) if (token) return Promise.resolve({ accessToken: token }) return login() } function clearSession() { wx.removeStorageSync(TOKEN_KEY) } function cents(value) { return `¥${((Number(value || 0)) / 100).toFixed(2)}` } function clientRequestId(prefix) { return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}` } module.exports = { request, login, ensureLogin, clearSession, cents, clientRequestId, }