const axios = require('axios'); async function debugPhoneError() { console.log('🔍 诊断手机号获取API错误'); console.log('='.repeat(50)); const backendUrl = 'http://localhost:8080/api/graphql'; // 测试1: 检查新版API的详细错误 console.log('\n1️⃣ 测试新版API (getPhoneNumberByCode)'); try { const newApiResponse = await axios.post(backendUrl, { query: ` mutation GetPhoneNumberByCode($code: String!) { getPhoneNumberByCode(code: $code) { phoneNumber purePhoneNumber countryCode } } `, variables: { code: "test_code_from_wechat" } }, { headers: { 'Content-Type': 'application/json' } }); console.log('响应状态:', newApiResponse.status); console.log('响应数据:', JSON.stringify(newApiResponse.data, null, 2)); if (newApiResponse.data.errors) { console.log('\n❌ 新版API错误详情:'); newApiResponse.data.errors.forEach((error, index) => { console.log(`错误 ${index + 1}:`, error.message); if (error.extensions) { console.log('扩展信息:', error.extensions); } }); } } catch (error) { console.error('❌ 新版API请求失败:', error.message); if (error.response) { console.log('错误响应:', error.response.data); } } // 测试2: 检查旧版API的详细错误 console.log('\n2️⃣ 测试旧版API (decryptPhoneNumber)'); try { const oldApiResponse = await axios.post(backendUrl, { query: ` mutation DecryptPhoneNumber($encryptedData: String!, $iv: String!, $sessionKey: String!) { decryptPhoneNumber(encryptedData: $encryptedData, iv: $iv, sessionKey: $sessionKey) { phoneNumber purePhoneNumber countryCode } } `, variables: { encryptedData: "test_encrypted_data", iv: "test_iv_value", sessionKey: "test_session_key" } }, { headers: { 'Content-Type': 'application/json' } }); console.log('响应状态:', oldApiResponse.status); console.log('响应数据:', JSON.stringify(oldApiResponse.data, null, 2)); if (oldApiResponse.data.errors) { console.log('\n❌ 旧版API错误详情:'); oldApiResponse.data.errors.forEach((error, index) => { console.log(`错误 ${index + 1}:`, error.message); if (error.extensions) { console.log('扩展信息:', error.extensions); } }); } } catch (error) { console.error('❌ 旧版API请求失败:', error.message); if (error.response) { console.log('错误响应:', error.response.data); } } // 测试3: 检查微信API配置 console.log('\n3️⃣ 检查可能的配置问题'); console.log('常见错误原因:'); console.log('- 微信AppSecret未配置或配置错误'); console.log('- 微信API调用频率限制'); console.log('- code参数无效或已过期'); console.log('- access_token获取失败'); console.log('- 网络连接问题'); // 测试4: 模拟真实的小程序调用 console.log('\n4️⃣ 模拟小程序调用场景'); // 场景1: 只有code参数(新版API) console.log('\n场景1: 只有code参数'); try { const scenario1 = await axios.post(backendUrl, { query: ` mutation GetPhoneNumberByCode($code: String!) { getPhoneNumberByCode(code: $code) { phoneNumber purePhoneNumber countryCode } } `, variables: { code: "" } // 空code }, { headers: { 'Content-Type': 'application/json' } }); if (scenario1.data.errors) { console.log('空code错误:', scenario1.data.errors[0].message); } } catch (error) { console.log('空code测试错误:', error.message); } // 场景2: 缺少必要参数 console.log('\n场景2: 缺少必要参数'); try { const scenario2 = await axios.post(backendUrl, { query: ` mutation GetPhoneNumberByCode { getPhoneNumberByCode { phoneNumber purePhoneNumber countryCode } } ` }, { headers: { 'Content-Type': 'application/json' } }); if (scenario2.data.errors) { console.log('缺少参数错误:', scenario2.data.errors[0].message); } } catch (error) { console.log('缺少参数测试错误:', error.message); } console.log('\n🔧 建议的解决方案:'); console.log('1. 检查微信小程序的AppSecret环境变量配置'); console.log('2. 确认传入的code参数是有效的微信返回值'); console.log('3. 检查网络连接和微信API服务状态'); console.log('4. 查看后端日志获取更详细的错误信息'); console.log('5. 验证微信小程序的基础库版本和API权限'); } debugPhoneError().catch(console.error);