Codex Assistant
17 小时以前 58d9f460b2f8c34430285115e2557d18333c5cab
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
// 调试saveUserInfo GraphQL请求的脚本
const fetch = require('node-fetch');
 
console.log('=== 调试saveUserInfo GraphQL请求 ===');
 
// 测试用的token(请替换为实际的token)
const testToken = 'YOUR_TOKEN_HERE'; // 请从小程序控制台获取实际token
 
// GraphQL查询
const mutation = `
  mutation SaveUserInfo($input: UserInput!) {
    saveUserInfo(input: $input) {
      id
      name
      avatar
      phone
      gender
      birthday
      wxOpenId
      unionId
    }
  }
`;
 
const variables = {
  input: {
    name: "测试用户",
    phone: "13981970816",
    gender: "MALE",
    birthday: "2025-10-07"
  }
};
 
async function testSaveUserInfo() {
  console.log('\n--- 测试参数 ---');
  console.log('GraphQL Endpoint:', 'http://localhost:8080/api/graphql');
  console.log('Token:', testToken ? `${testToken.substring(0, 20)}...` : '无');
  console.log('Variables:', JSON.stringify(variables, null, 2));
  
  if (!testToken || testToken === 'YOUR_TOKEN_HERE') {
    console.log('\n❌ 请先设置有效的token');
    console.log('💡 在小程序开发者工具控制台运行: console.log("token:", wx.getStorageSync("token"))');
    return;
  }
  
  try {
    console.log('\n--- 发送请求 ---');
    
    const headers = {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${testToken}`
    };
    
    console.log('请求头:', headers);
    
    const response = await fetch('http://localhost:8080/api/graphql', {
      method: 'POST',
      headers: headers,
      body: JSON.stringify({
        query: mutation,
        variables: variables
      })
    });
    
    console.log('\n--- 响应信息 ---');
    console.log('状态码:', response.status);
    console.log('状态文本:', response.statusText);
    
    const responseText = await response.text();
    console.log('响应内容:', responseText);
    
    if (responseText) {
      try {
        const result = JSON.parse(responseText);
        
        if (result.errors) {
          console.log('\n❌ GraphQL错误:');
          result.errors.forEach((error, index) => {
            console.log(`错误 ${index + 1}:`, error.message);
            if (error.extensions) {
              console.log('扩展信息:', error.extensions);
            }
          });
        }
        
        if (result.data && result.data.saveUserInfo) {
          console.log('\n✅ 保存成功:');
          console.log(JSON.stringify(result.data.saveUserInfo, null, 2));
        }
        
      } catch (parseError) {
        console.log('\n❌ JSON解析失败:', parseError.message);
      }
    }
    
  } catch (error) {
    console.log('\n❌ 请求失败:', error.message);
  }
}
 
// 测试token有效性
function testTokenFormat(token) {
  console.log('\n--- Token格式检查 ---');
  
  if (!token || token === 'YOUR_TOKEN_HERE') {
    console.log('❌ 没有提供token');
    return false;
  }
  
  const parts = token.split('.');
  if (parts.length !== 3) {
    console.log('❌ Token格式无效(不是JWT格式)');
    return false;
  }
  
  try {
    const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
    console.log('Token payload:', {
      userId: payload.userId,
      phone: payload.phone,
      exp: payload.exp ? new Date(payload.exp * 1000).toLocaleString() : 'N/A',
      iat: payload.iat ? new Date(payload.iat * 1000).toLocaleString() : 'N/A'
    });
    
    const now = Math.floor(Date.now() / 1000);
    const isExpired = payload.exp && payload.exp <= now;
    console.log('Token是否过期:', isExpired);
    
    return !isExpired;
  } catch (error) {
    console.log('❌ Token解析失败:', error.message);
    return false;
  }
}
 
// 执行测试
console.log('开始测试...');
const isValidToken = testTokenFormat(testToken);
 
if (isValidToken) {
  testSaveUserInfo();
} else {
  console.log('\n🔧 解决步骤:');
  console.log('1. 在小程序开发者工具控制台获取token:');
  console.log('   console.log("token:", wx.getStorageSync("token"))');
  console.log('2. 将获取到的token替换脚本中的 YOUR_TOKEN_HERE');
  console.log('3. 重新运行此脚本');
}