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