const axios = require('axios'); console.log('=== 测试sessionKey修复效果 ==='); async function testSessionKeyFix() { try { // 1. 测试后端wxLogin接口 console.log('\n1. 测试后端wxLogin接口...'); const loginResponse = await axios.post('http://localhost:8080/api/graphql', { query: ` mutation { wxLogin(input: { code: "test_code_${Date.now()}", loginIp: "192.168.1.100", deviceInfo: "Test Device - sessionKey Fix Test" }) { token userInfo { userId name phone } isNewUser loginRecordId sessionKey } } ` }, { headers: { 'Content-Type': 'application/json' } }); if (loginResponse.status === 200 && loginResponse.data.data && loginResponse.data.data.wxLogin) { const loginResult = loginResponse.data.data.wxLogin; console.log('✅ 后端wxLogin接口正常'); console.log('- Token长度:', loginResult.token ? loginResult.token.length : 0); console.log('- SessionKey存在:', !!loginResult.sessionKey); console.log('- SessionKey长度:', loginResult.sessionKey ? loginResult.sessionKey.length : 0); // 2. 模拟小程序端存储逻辑 console.log('\n2. 模拟小程序端存储逻辑...'); const mockStorage = {}; const mockGlobalData = { userInfo: null, token: null, sessionKey: null // 这是我们修复的关键点 }; // 模拟wx.setStorageSync function mockSetStorageSync(key, value) { mockStorage[key] = value; console.log(`存储 ${key}:`, typeof value === 'string' ? `${value.substring(0, 10)}...` : value); } // 模拟wx.getStorageSync function mockGetStorageSync(key) { return mockStorage[key]; } // 模拟登录成功后的存储逻辑 mockSetStorageSync('token', loginResult.token); mockSetStorageSync('userInfo', loginResult.userInfo); if (loginResult.sessionKey) { mockSetStorageSync('sessionKey', loginResult.sessionKey); } // 模拟设置globalData mockGlobalData.token = loginResult.token; mockGlobalData.userInfo = loginResult.userInfo; mockGlobalData.sessionKey = loginResult.sessionKey; console.log('✅ 存储逻辑完成'); // 3. 模拟checkLoginStatus逻辑 console.log('\n3. 模拟checkLoginStatus逻辑...'); const storedToken = mockGetStorageSync('token'); const storedUserInfo = mockGetStorageSync('userInfo'); const storedSessionKey = mockGetStorageSync('sessionKey'); console.log('从存储中读取:'); console.log('- Token存在:', !!storedToken); console.log('- UserInfo存在:', !!storedUserInfo); console.log('- SessionKey存在:', !!storedSessionKey); console.log('- SessionKey长度:', storedSessionKey ? storedSessionKey.length : 0); if (storedToken && storedUserInfo) { mockGlobalData.token = storedToken; mockGlobalData.userInfo = storedUserInfo; mockGlobalData.sessionKey = storedSessionKey; console.log('✅ 登录状态恢复成功'); } // 4. 模拟手机号解密检查 console.log('\n4. 模拟手机号解密检查...'); console.log('globalData.sessionKey存在:', !!mockGlobalData.sessionKey); console.log('globalData.sessionKey长度:', mockGlobalData.sessionKey ? mockGlobalData.sessionKey.length : 0); if (!mockGlobalData.sessionKey) { console.log('❌ sessionKey为空,无法解密手机号'); return false; } else { console.log('✅ sessionKey正常,可以进行手机号解密'); return true; } } else { console.log('❌ 后端wxLogin接口异常'); console.log('响应:', loginResponse.data); return false; } } catch (error) { console.error('❌ 测试过程中发生错误:', error.message); if (error.response) { console.error('响应状态:', error.response.status); console.error('响应数据:', error.response.data); } return false; } } // 运行测试 testSessionKeyFix().then(success => { if (success) { console.log('\n🎉 sessionKey修复验证成功!'); console.log('现在小程序端应该能够正常获取和使用sessionKey进行手机号解密了。'); } else { console.log('\n❌ sessionKey修复验证失败,需要进一步检查。'); } }).catch(err => { console.error('测试执行失败:', err); });