/** * 测试手机号解密功能 * 验证修复后的sessionKey处理逻辑 */ const axios = require('axios'); // GraphQL 请求函数 async function graphqlRequest(query, variables = {}) { try { const response = await axios.post('http://localhost:8080/api/graphql', { query, variables }, { headers: { 'Content-Type': 'application/json' } }); if (response.data.errors) { console.error('GraphQL 错误:', response.data.errors); return null; } return response.data.data; } catch (error) { console.error('请求失败:', error.message); return null; } } // 测试微信登录获取sessionKey async function testWxLogin() { console.log('=== 测试微信登录获取sessionKey ==='); const loginQuery = ` mutation WxLogin($code: String!, $loginIp: String!, $deviceInfo: String!) { wxLogin(wxLoginRequest: { code: $code loginIp: $loginIp deviceInfo: $deviceInfo }) { token sessionKey userInfo { userId name phone } isNewUser loginRecordId } } `; const variables = { code: "test_code_123", // 测试用的code loginIp: "127.0.0.1", deviceInfo: "测试设备" }; const result = await graphqlRequest(loginQuery, variables); if (result && result.wxLogin) { console.log('✅ 登录成功'); console.log('SessionKey存在:', !!result.wxLogin.sessionKey); console.log('SessionKey长度:', result.wxLogin.sessionKey ? result.wxLogin.sessionKey.length : 0); console.log('Token存在:', !!result.wxLogin.token); console.log('用户信息:', result.wxLogin.userInfo); return result.wxLogin.sessionKey; } else { console.log('❌ 登录失败'); return null; } } // 测试手机号解密(使用空sessionKey) async function testPhoneDecryptWithEmptyKey() { console.log('\n=== 测试空sessionKey的手机号解密 ==='); const decryptQuery = ` mutation DecryptPhoneNumber($encryptedData: String!, $iv: String!, $sessionKey: String!) { decryptPhoneNumber(encryptedData: $encryptedData, iv: $iv, sessionKey: $sessionKey) { phoneNumber } } `; const variables = { encryptedData: "test_encrypted_data", iv: "test_iv", sessionKey: "" // 空的sessionKey,应该会被我们的修复逻辑拦截 }; const result = await graphqlRequest(decryptQuery, variables); if (result) { console.log('❌ 意外成功 - 空sessionKey应该被拦截'); } else { console.log('✅ 正确拦截了空sessionKey'); } } // 测试手机号解密(使用有效sessionKey) async function testPhoneDecryptWithValidKey(sessionKey) { console.log('\n=== 测试有效sessionKey的手机号解密 ==='); if (!sessionKey) { console.log('⚠️ 没有有效的sessionKey,跳过测试'); return; } const decryptQuery = ` mutation DecryptPhoneNumber($encryptedData: String!, $iv: String!, $sessionKey: String!) { decryptPhoneNumber(encryptedData: $encryptedData, iv: $iv, sessionKey: $sessionKey) { phoneNumber } } `; const variables = { encryptedData: "test_encrypted_data", iv: "test_iv", sessionKey: sessionKey }; const result = await graphqlRequest(decryptQuery, variables); if (result && result.decryptPhoneNumber) { console.log('✅ 解密成功:', result.decryptPhoneNumber.phoneNumber); } else { console.log('❌ 解密失败(可能是测试数据无效,这是正常的)'); } } // 主测试函数 async function runTests() { console.log('开始测试手机号解密功能修复...\n'); // 测试1: 微信登录获取sessionKey const sessionKey = await testWxLogin(); // 测试2: 空sessionKey应该被拦截 await testPhoneDecryptWithEmptyKey(); // 测试3: 有效sessionKey的解密 await testPhoneDecryptWithValidKey(sessionKey); console.log('\n=== 测试完成 ==='); console.log('如果看到"正确拦截了空sessionKey",说明修复生效了!'); } // 运行测试 runTests().catch(error => { console.error('测试过程中发生错误:', error); });