/**
|
* 测试手机号解密功能
|
* 验证修复后的sessionKey处理逻辑
|
*/
|
|
const axios = require('axios');
|
|
// GraphQL 请求函数
|
async function graphqlRequest(query, variables = {}) {
|
try {
|
const response = await axios.post('http://localhost:8080/api/graphql', {
|
query,
|
variables
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
});
|
|
if (response.data.errors) {
|
console.error('GraphQL 错误:', response.data.errors);
|
return null;
|
}
|
|
return response.data.data;
|
} catch (error) {
|
console.error('请求失败:', error.message);
|
return null;
|
}
|
}
|
|
// 测试微信登录获取sessionKey
|
async function testWxLogin() {
|
console.log('=== 测试微信登录获取sessionKey ===');
|
|
const loginQuery = `
|
mutation WxLogin($code: String!, $loginIp: String!, $deviceInfo: String!) {
|
wxLogin(wxLoginRequest: {
|
code: $code
|
loginIp: $loginIp
|
deviceInfo: $deviceInfo
|
}) {
|
token
|
sessionKey
|
userInfo {
|
userId
|
name
|
phone
|
}
|
isNewUser
|
loginRecordId
|
}
|
}
|
`;
|
|
const variables = {
|
code: "test_code_123", // 测试用的code
|
loginIp: "127.0.0.1",
|
deviceInfo: "测试设备"
|
};
|
|
const result = await graphqlRequest(loginQuery, variables);
|
|
if (result && result.wxLogin) {
|
console.log('✅ 登录成功');
|
console.log('SessionKey存在:', !!result.wxLogin.sessionKey);
|
console.log('SessionKey长度:', result.wxLogin.sessionKey ? result.wxLogin.sessionKey.length : 0);
|
console.log('Token存在:', !!result.wxLogin.token);
|
console.log('用户信息:', result.wxLogin.userInfo);
|
|
return result.wxLogin.sessionKey;
|
} else {
|
console.log('❌ 登录失败');
|
return null;
|
}
|
}
|
|
// 测试手机号解密(使用空sessionKey)
|
async function testPhoneDecryptWithEmptyKey() {
|
console.log('\n=== 测试空sessionKey的手机号解密 ===');
|
|
const decryptQuery = `
|
mutation DecryptPhoneNumber($encryptedData: String!, $iv: String!, $sessionKey: String!) {
|
decryptPhoneNumber(encryptedData: $encryptedData, iv: $iv, sessionKey: $sessionKey) {
|
phoneNumber
|
}
|
}
|
`;
|
|
const variables = {
|
encryptedData: "test_encrypted_data",
|
iv: "test_iv",
|
sessionKey: "" // 空的sessionKey,应该会被我们的修复逻辑拦截
|
};
|
|
const result = await graphqlRequest(decryptQuery, variables);
|
|
if (result) {
|
console.log('❌ 意外成功 - 空sessionKey应该被拦截');
|
} else {
|
console.log('✅ 正确拦截了空sessionKey');
|
}
|
}
|
|
// 测试手机号解密(使用有效sessionKey)
|
async function testPhoneDecryptWithValidKey(sessionKey) {
|
console.log('\n=== 测试有效sessionKey的手机号解密 ===');
|
|
if (!sessionKey) {
|
console.log('⚠️ 没有有效的sessionKey,跳过测试');
|
return;
|
}
|
|
const decryptQuery = `
|
mutation DecryptPhoneNumber($encryptedData: String!, $iv: String!, $sessionKey: String!) {
|
decryptPhoneNumber(encryptedData: $encryptedData, iv: $iv, sessionKey: $sessionKey) {
|
phoneNumber
|
}
|
}
|
`;
|
|
const variables = {
|
encryptedData: "test_encrypted_data",
|
iv: "test_iv",
|
sessionKey: sessionKey
|
};
|
|
const result = await graphqlRequest(decryptQuery, variables);
|
|
if (result && result.decryptPhoneNumber) {
|
console.log('✅ 解密成功:', result.decryptPhoneNumber.phoneNumber);
|
} else {
|
console.log('❌ 解密失败(可能是测试数据无效,这是正常的)');
|
}
|
}
|
|
// 主测试函数
|
async function runTests() {
|
console.log('开始测试手机号解密功能修复...\n');
|
|
// 测试1: 微信登录获取sessionKey
|
const sessionKey = await testWxLogin();
|
|
// 测试2: 空sessionKey应该被拦截
|
await testPhoneDecryptWithEmptyKey();
|
|
// 测试3: 有效sessionKey的解密
|
await testPhoneDecryptWithValidKey(sessionKey);
|
|
console.log('\n=== 测试完成 ===');
|
console.log('如果看到"正确拦截了空sessionKey",说明修复生效了!');
|
}
|
|
// 运行测试
|
runTests().catch(error => {
|
console.error('测试过程中发生错误:', error);
|
});
|