lrj
昨天 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
const axios = require('axios');
 
async function testWechatApiDirect() {
    console.log('🔍 直接测试微信API调用');
    console.log('='.repeat(50));
    
    // 微信小程序配置(从application.yml中获取)
    const appId = 'wxaa13026a14b1d784';
    const appSecret = 'b7a7acc1063a83b9cd3173fb08919f84';
    
    console.log('1️⃣ 测试获取access_token');
    try {
        const tokenUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`;
        console.log('请求URL:', tokenUrl.replace(appSecret, '***'));
        
        const tokenResponse = await axios.get(tokenUrl, { timeout: 10000 });
        console.log('access_token响应:', tokenResponse.data);
        
        if (tokenResponse.data.errcode) {
            console.log('❌ 获取access_token失败:');
            console.log('错误码:', tokenResponse.data.errcode);
            console.log('错误信息:', tokenResponse.data.errmsg);
            
            // 常见错误码解释
            const errorCodes = {
                40013: 'AppID无效',
                40001: 'AppSecret错误',
                40002: '不合法的凭证类型',
                40164: 'IP地址不在白名单中',
                45009: '接口调用超过限制',
                89503: '此IP调用需要管理员确认'
            };
            
            if (errorCodes[tokenResponse.data.errcode]) {
                console.log('错误解释:', errorCodes[tokenResponse.data.errcode]);
            }
            
            return;
        }
        
        const accessToken = tokenResponse.data.access_token;
        console.log('✅ 成功获取access_token:', accessToken.substring(0, 20) + '...');
        
        // 测试获取手机号API
        console.log('\n2️⃣ 测试获取手机号API');
        const phoneUrl = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber';
        const phoneData = {
            code: 'test_code_123'
        };
        
        try {
            const phoneResponse = await axios.post(
                `${phoneUrl}?access_token=${accessToken}`,
                phoneData,
                {
                    headers: { 'Content-Type': 'application/json' },
                    timeout: 10000
                }
            );
            
            console.log('手机号API响应:', phoneResponse.data);
            
            if (phoneResponse.data.errcode) {
                console.log('❌ 获取手机号失败:');
                console.log('错误码:', phoneResponse.data.errcode);
                console.log('错误信息:', phoneResponse.data.errmsg);
                
                // 手机号API常见错误码
                const phoneErrorCodes = {
                    40001: 'access_token无效',
                    40003: 'openid错误',
                    47001: 'POST数据参数不合法',
                    40013: 'AppID无效',
                    61023: 'code无效或已过期',
                    61024: 'code已被使用'
                };
                
                if (phoneErrorCodes[phoneResponse.data.errcode]) {
                    console.log('错误解释:', phoneErrorCodes[phoneResponse.data.errcode]);
                }
            } else {
                console.log('✅ 手机号API调用成功(虽然code无效)');
            }
            
        } catch (phoneError) {
            console.log('❌ 手机号API请求异常:', phoneError.message);
            if (phoneError.response) {
                console.log('响应状态:', phoneError.response.status);
                console.log('响应数据:', phoneError.response.data);
            }
        }
        
    } catch (error) {
        console.log('❌ 获取access_token异常:', error.message);
        if (error.response) {
            console.log('响应状态:', error.response.status);
            console.log('响应数据:', error.response.data);
        }
        
        if (error.code === 'ENOTFOUND') {
            console.log('🌐 网络连接问题:无法解析微信API域名');
        } else if (error.code === 'ETIMEDOUT') {
            console.log('⏰ 网络超时:请检查网络连接');
        }
    }
    
    console.log('\n3️⃣ 测试code2session API');
    try {
        const sessionUrl = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=test_code&grant_type=authorization_code`;
        console.log('请求URL:', sessionUrl.replace(appSecret, '***'));
        
        const sessionResponse = await axios.get(sessionUrl, { timeout: 10000 });
        console.log('code2session响应:', sessionResponse.data);
        
        if (sessionResponse.data.errcode) {
            console.log('❌ code2session失败:');
            console.log('错误码:', sessionResponse.data.errcode);
            console.log('错误信息:', sessionResponse.data.errmsg);
        } else {
            console.log('✅ code2session API可访问(虽然code无效)');
        }
        
    } catch (sessionError) {
        console.log('❌ code2session异常:', sessionError.message);
    }
    
    console.log('\n🔧 诊断结果:');
    console.log('如果所有API都返回网络错误,可能的原因:');
    console.log('1. 网络连接问题');
    console.log('2. 防火墙阻止了对微信API的访问');
    console.log('3. DNS解析问题');
    console.log('4. 代理设置问题');
    console.log('\n如果API可访问但返回错误码,可能的原因:');
    console.log('1. AppID或AppSecret配置错误');
    console.log('2. IP地址不在微信白名单中');
    console.log('3. 接口调用频率超限');
}
 
testWechatApiDirect().catch(console.error);