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);
|