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
/**
 * 测试手机号解密功能
 * 验证修复后的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);
});