lrj
21 小时以前 9f8395fab13ca4b230a0f7d62636e209745c91d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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);