From 0a48616045ddce1562584543a0e89e5144051fde Mon Sep 17 00:00:00 2001 From: Codex Assistant <codex@example.com> Date: 星期日, 05 十月 2025 14:52:44 +0800 Subject: [PATCH] 报名审核 --- wx/app.js | 240 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 186 insertions(+), 54 deletions(-) diff --git a/wx/app.js b/wx/app.js index 574b272..57d5a4b 100644 --- a/wx/app.js +++ b/wx/app.js @@ -134,38 +134,18 @@ } console.log('=== 鍑嗗璋冪敤鍚庣wxLogin鎺ュ彛 ===') - console.log('璇锋眰URL:', this.globalData.baseUrl) + console.log('璇锋眰URL:', 'http://localhost:8080/api/auth/wx-login') console.log('璁惧淇℃伅:', deviceInfo) console.log('璇锋眰鍙傛暟:', requestData) console.log('璇锋眰寮�濮嬫椂闂�:', new Date().toISOString()) wx.request({ - url: this.globalData.baseUrl, + url: 'http://localhost:8080/api/auth/wx-login', method: 'POST', header: { 'Content-Type': 'application/json' }, - data: { - query: ` - mutation wxLogin($input: WxLoginRequest!) { - wxLogin(input: $input) { - token - userInfo { - userId - name - phone - wxOpenid - } - isNewUser - loginRecordId - sessionKey - } - } - `, - variables: { - input: requestData - } - }, + data: requestData, success: (res) => { console.log('=== 鍚庣wxLogin鎺ュ彛鍝嶅簲 ===') console.log('鍝嶅簲鏃堕棿:', new Date().toISOString()) @@ -182,17 +162,28 @@ return } - if (res.data.errors) { - console.error('鉂� GraphQL閿欒:', res.data.errors) + // 妫�鏌ユ槸鍚︽湁閿欒淇℃伅锛堥�傞厤涓嶅悓鐨勯敊璇搷搴旀牸寮忥級 + if (res.data.error || res.data.message || res.data.success === false) { + const errorMsg = res.data.error || res.data.message || '鐧诲綍澶辫触' + console.error('鉂� 鐧诲綍澶辫触:', errorMsg) wx.showToast({ - title: '鐧诲綍澶辫触', + title: errorMsg, icon: 'error' }) return } - if (res.data.data && res.data.data.wxLogin) { - const loginResult = res.data.data.wxLogin + // 妫�鏌ュ搷搴旀暟鎹牸寮忥細鏀寔鐩存帴杩斿洖WxLoginResponse鎴栧寘瑁呮牸寮� + let loginResult = null + if (res.data.token && res.data.userInfo) { + // 鐩存帴杩斿洖WxLoginResponse鏍煎紡 + loginResult = res.data + } else if (res.data.success && res.data.data) { + // 鍖呰鏍煎紡 {success: true, data: WxLoginResponse} + loginResult = res.data.data + } + + if (loginResult) { console.log('鉁� 鐧诲綍鎴愬姛!') console.log('鐢ㄦ埛ID:', loginResult.userInfo.userId) @@ -227,10 +218,10 @@ console.log('鈩癸笍 鑰佺敤鎴锋垨宸叉嫆缁濇墜鏈哄彿鎺堟潈锛岃烦杩囨巿鏉冨脊绐�') } } else { - console.error('鉂� 鍝嶅簲鏁版嵁鏍煎紡閿欒锛岀己灏憌xLogin瀛楁') + console.error('鉂� 鍝嶅簲鏁版嵁鏍煎紡閿欒锛岀己灏戝繀瑕佸瓧娈�(token鎴杣serInfo)') console.error('瀹為檯鍝嶅簲:', res.data) wx.showToast({ - title: '鐧诲綍澶辫触', + title: '鐧诲綍鏁版嵁鏍煎紡閿欒', icon: 'error' }) } @@ -285,33 +276,174 @@ // GraphQL璇锋眰灏佽 graphqlRequest(query, variables = {}) { return new Promise((resolve, reject) => { - wx.request({ - url: this.globalData.baseUrl, - method: 'POST', - header: { - 'Content-Type': 'application/json', - 'Authorization': this.globalData.token ? `Bearer ${this.globalData.token}` : '' - }, - data: { - query: query, - variables: variables - }, - success: (res) => { - console.log('GraphQL鍝嶅簲:', res.data) - if (res.data.errors) { - console.error('GraphQL閿欒:', res.data.errors) - reject(res.data.errors) - } else if (res.data.data) { - resolve(res.data.data) + this._makeGraphQLRequest(query, variables, resolve, reject, false) + }) + }, + + // 鍐呴儴GraphQL璇锋眰鏂规硶锛屾敮鎸侀噸璇曟満鍒� + _makeGraphQLRequest(query, variables, resolve, reject, isRetry = false) { + // 纭繚token鐨勪竴鑷存�э細浼樺厛浣跨敤globalData涓殑token锛屽鏋滄病鏈夊垯浠巗torage鑾峰彇 + let token = this.globalData.token + if (!token) { + token = wx.getStorageSync('token') + if (token) { + this.globalData.token = token // 鍚屾鍒癵lobalData + } + } + + wx.request({ + url: this.globalData.baseUrl, + method: 'POST', + header: { + 'Content-Type': 'application/json', + 'Authorization': token ? `Bearer ${token}` : '' + }, + data: { + query: query, + variables: variables + }, + success: (res) => { + console.log('GraphQL鍝嶅簲:', res.data) + + // 妫�鏌TTP鐘舵�佺爜 + if (res.statusCode !== 200) { + // 瀵逛簬401鐘舵�佺爜锛屽彲鑳芥槸璁よ瘉閿欒锛岄渶瑕佹鏌ュ搷搴斿唴瀹� + if (res.statusCode === 401 && res.data && res.data.errors) { + console.log('鏀跺埌401鐘舵�佺爜锛屾鏌ユ槸鍚︿负璁よ瘉閿欒') + // 缁х画澶勭悊锛岃涓嬮潰鐨凣raphQL閿欒妫�鏌ラ�昏緫澶勭悊璁よ瘉閿欒 } else { - console.error('GraphQL鍝嶅簲寮傚父:', res.data) - reject('璇锋眰澶辫触') + console.error('GraphQL HTTP閿欒:', res.statusCode) + reject(new Error(`HTTP閿欒: ${res.statusCode}`)) + return } - }, - fail: (err) => { - reject(err) } - }) + + // 妫�鏌raphQL閿欒 + if (res.data && res.data.errors) { + console.error('GraphQL閿欒:', res.data.errors) + + // 妫�鏌ユ槸鍚︽槸璁よ瘉閿欒锛坱oken杩囨湡鎴栨棤鏁堬級 + const authErrors = res.data.errors.filter(error => + error.message && ( + error.message.includes('娌℃湁鏉冮檺璁块棶') || + error.message.includes('璇峰厛鐧诲綍') || + error.message.includes('UNAUTHORIZED') || + error.extensions?.code === 'UNAUTHORIZED' + ) + ) + + if (authErrors.length > 0 && !isRetry) { + console.log('馃攧 妫�娴嬪埌璁よ瘉閿欒锛屽皾璇曢噸鏂扮櫥褰�...') + // 娓呴櫎杩囨湡鐨勮璇佷俊鎭� + this.globalData.token = null + this.globalData.userInfo = null + this.globalData.sessionKey = null + wx.removeStorageSync('token') + wx.removeStorageSync('userInfo') + wx.removeStorageSync('sessionKey') + + // 閲嶆柊鐧诲綍 + wx.login({ + success: (loginRes) => { + if (loginRes.code) { + console.log('馃攧 閲嶆柊鑾峰彇寰俊code鎴愬姛锛岃皟鐢ㄥ悗绔櫥褰�...') + this._retryAfterLogin(loginRes.code, query, variables, resolve, reject) + } else { + console.error('鉂� 閲嶆柊鑾峰彇寰俊code澶辫触') + reject(new Error('閲嶆柊鐧诲綍澶辫触')) + } + }, + fail: (err) => { + console.error('鉂� 閲嶆柊鐧诲綍澶辫触:', err) + reject(new Error('閲嶆柊鐧诲綍澶辫触')) + } + }) + return + } + + reject(new Error(res.data.errors[0]?.message || 'GraphQL璇锋眰閿欒')) + return + } + + // 妫�鏌ユ暟鎹� + if (res.data.data !== undefined) { + resolve(res.data.data) + } else { + console.error('GraphQL鍝嶅簲寮傚父:', res.data) + reject(new Error('GraphQL鍝嶅簲鏁版嵁寮傚父')) + } + }, + fail: (err) => { + console.error('GraphQL缃戠粶璇锋眰澶辫触:', err) + reject(new Error('缃戠粶璇锋眰澶辫触')) + } + }) + }, + + // 閲嶆柊鐧诲綍鍚庨噸璇旼raphQL璇锋眰 + _retryAfterLogin(code, query, variables, resolve, reject) { + const that = this + const deviceInfo = this.getDeviceInfo() + const requestData = { + code: code, + loginIp: '127.0.0.1', // 灏忕▼搴忔棤娉曡幏鍙栫湡瀹濱P锛屼娇鐢ㄩ粯璁ゅ�� + deviceInfo: deviceInfo + } + + wx.request({ + url: 'http://localhost:8080/api/auth/wx-login', + method: 'POST', + header: { + 'Content-Type': 'application/json' + }, + data: requestData, + success: (res) => { + console.log('馃攧 閲嶆柊鐧诲綍鍝嶅簲:', res.data) + + if (res.statusCode !== 200 || res.data.error) { + console.error('鉂� 閲嶆柊鐧诲綍澶辫触:', res.data.error || res.data.message) + reject(new Error('閲嶆柊鐧诲綍澶辫触')) + return + } + + // 妫�鏌ュ搷搴旀暟鎹牸寮� + let loginResult = null + if (res.data.token && res.data.userInfo) { + loginResult = res.data + } else if (res.data.success && res.data.data) { + loginResult = res.data.data + } + + if (loginResult && loginResult.token) { + console.log('鉁� 閲嶆柊鐧诲綍鎴愬姛锛屾洿鏂皌oken') + + // 淇濆瓨鏂扮殑鐧诲綍淇℃伅 + try { + wx.setStorageSync('token', loginResult.token) + wx.setStorageSync('userInfo', loginResult.userInfo) + if (loginResult.sessionKey) { + wx.setStorageSync('sessionKey', loginResult.sessionKey) + } + } catch (storageErr) { + console.error('鉂� 淇濆瓨閲嶆柊鐧诲綍淇℃伅澶辫触:', storageErr) + } + + that.globalData.token = loginResult.token + that.globalData.userInfo = loginResult.userInfo + that.globalData.sessionKey = loginResult.sessionKey + + // 浣跨敤鏂皌oken閲嶈瘯鍘熷璇锋眰 + console.log('馃攧 浣跨敤鏂皌oken閲嶈瘯GraphQL璇锋眰...') + that._makeGraphQLRequest(query, variables, resolve, reject, true) + } else { + console.error('鉂� 閲嶆柊鐧诲綍鍝嶅簲鏍煎紡閿欒') + reject(new Error('閲嶆柊鐧诲綍鍝嶅簲鏍煎紡閿欒')) + } + }, + fail: (err) => { + console.error('鉂� 閲嶆柊鐧诲綍缃戠粶璇锋眰澶辫触:', err) + reject(new Error('閲嶆柊鐧诲綍缃戠粶璇锋眰澶辫触')) + } }) } }) \ No newline at end of file -- Gitblit v1.8.0