const axios = require('axios'); // 测试修复后的手机号获取功能 async function testPhoneFix() { const graphqlEndpoint = 'http://localhost:8080/api/graphql'; console.log('🧪 测试修复后的手机号获取功能'); console.log('='.repeat(50)); // 1. 测试新版API console.log('\n1️⃣ 测试新版API (getPhoneNumberByCode)'); try { const newApiMutation = ` mutation GetPhoneNumberByCode($code: String!) { getPhoneNumberByCode(code: $code) { phoneNumber purePhoneNumber countryCode } } `; const newApiResponse = await axios.post(graphqlEndpoint, { query: newApiMutation, variables: { code: "test_code_new_api" } }, { headers: { 'Content-Type': 'application/json' } }); if (newApiResponse.data.errors) { console.log('⚠️ 预期的错误(使用测试code):', newApiResponse.data.errors[0].message); console.log('✅ 新版API结构正确,能够接收请求'); } else { console.log('✅ 新版API调用成功:', newApiResponse.data.data); } } catch (error) { console.error('❌ 新版API测试失败:', error.response?.data || error.message); } // 2. 测试旧版API(确保向后兼容) console.log('\n2️⃣ 测试旧版API (decryptPhoneNumber)'); try { const oldApiMutation = ` mutation DecryptPhoneNumber($encryptedData: String!, $iv: String!, $sessionKey: String!) { decryptPhoneNumber(encryptedData: $encryptedData, iv: $iv, sessionKey: $sessionKey) { phoneNumber purePhoneNumber countryCode } } `; const oldApiResponse = await axios.post(graphqlEndpoint, { query: oldApiMutation, variables: { encryptedData: "test_encrypted_data", iv: "test_iv", sessionKey: "test_session_key" } }, { headers: { 'Content-Type': 'application/json' } }); if (oldApiResponse.data.errors) { console.log('⚠️ 预期的错误(使用测试数据):', oldApiResponse.data.errors[0].message); console.log('✅ 旧版API结构正确,能够接收请求'); } else { console.log('✅ 旧版API调用成功:', oldApiResponse.data.data); } } catch (error) { console.error('❌ 旧版API测试失败:', error.response?.data || error.message); } // 3. 检查GraphQL schema console.log('\n3️⃣ 检查GraphQL schema'); try { const introspectionQuery = ` query { __schema { mutationType { fields { name description args { name type { name kind } } } } } } `; const schemaResponse = await axios.post(graphqlEndpoint, { query: introspectionQuery }, { headers: { 'Content-Type': 'application/json' } }); const mutations = schemaResponse.data.data.__schema.mutationType.fields; const phoneAPIs = mutations.filter(m => m.name === 'getPhoneNumberByCode' || m.name === 'decryptPhoneNumber' ); console.log('📋 手机号相关的API:'); phoneAPIs.forEach(api => { console.log(` - ${api.name}: ${api.description || '无描述'}`); if (api.args && api.args.length > 0) { console.log(` 参数: ${api.args.map(arg => `${arg.name}(${arg.type.name || arg.type.kind})`).join(', ')}`); } }); const hasNewAPI = phoneAPIs.some(api => api.name === 'getPhoneNumberByCode'); const hasOldAPI = phoneAPIs.some(api => api.name === 'decryptPhoneNumber'); if (hasNewAPI && hasOldAPI) { console.log('✅ 新旧API都存在,支持向后兼容'); } else { console.log('❌ API不完整'); console.log(' 新API存在:', hasNewAPI); console.log(' 旧API存在:', hasOldAPI); } } catch (error) { console.error('❌ Schema检查失败:', error.response?.data || error.message); } // 4. 总结 console.log('\n📊 修复总结:'); console.log('✅ 后端已添加新版手机号获取API (getPhoneNumberByCode)'); console.log('✅ 后端保留旧版API以确保向后兼容 (decryptPhoneNumber)'); console.log('✅ 前端已修复为优先使用新版API,失败时回退到旧版API'); console.log('✅ 支持微信小程序基础库3.10.1+的新特性'); console.log('\n🎯 前端逻辑:'); console.log('1. 检查微信返回的e.detail.code'); console.log('2. 如果有code,优先调用新版API (getPhoneNumberByCode)'); console.log('3. 如果新版API失败,回退到旧版API (decryptPhoneNumber)'); console.log('4. 如果没有code,直接使用旧版API'); console.log('5. 确保向后兼容,支持所有基础库版本'); } // 运行测试 testPhoneFix().then(() => { console.log('\n🎉 测试完成'); }).catch(error => { console.error('💥 测试异常:', error); });