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
149
150
151
const axios = require('axios');
 
const graphqlUrl = 'http://localhost:8080/api/graphql';
 
// 使用一个测试token(需要先获取有效token)
const token = 'Bearer_TOKEN_HERE'; // 这里需要替换为有效token
 
async function testMiniprogramFormat() {
  try {
    console.log('=== 模拟微信小程序请求格式测试 ===\n');
 
    // 模拟微信小程序的请求格式
    const query = `
      query GetUnReviewedProjects($page: Int!, $pageSize: Int!, $searchKeyword: String) {
        unReviewedProjects(page: $page, pageSize: $pageSize, searchKeyword: $searchKeyword) {
          items {
            id
            projectName
            activityName
            stageName
            studentName
            submitTime
            status
          }
          total
          hasMore
        }
      }
    `;
 
    const variables = {
      page: 1,
      pageSize: 10,
      searchKeyword: ""
    };
 
    console.log('发送的查询:');
    console.log('Query:', query);
    console.log('Variables:', variables);
    console.log('Headers:', {
      'Content-Type': 'application/json',
      'Authorization': token ? `Bearer ${token}` : ''
    });
 
    // 模拟微信小程序的请求
    const response = await axios.post(graphqlUrl, {
      query: query,
      variables: variables
    }, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : ''
      }
    });
 
    console.log('\n响应状态码:', response.status);
    console.log('响应数据:', response.data);
 
    if (response.data.errors) {
      console.error('\n❌ GraphQL错误:', response.data.errors);
    } else {
      console.log('\n✅ 请求成功!');
    }
 
  } catch (error) {
    console.error('\n❌ 请求失败:');
    console.error('错误信息:', error.message);
    
    if (error.response) {
      console.error('HTTP状态码:', error.response.status);
      console.error('响应头:', error.response.headers);
      console.error('响应数据:', error.response.data);
      
      // 特别检查400错误
      if (error.response.status === 400) {
        console.error('\n🔍 这是400错误!可能的原因:');
        console.error('1. GraphQL查询语法错误');
        console.error('2. 变量类型不匹配');
        console.error('3. 字段不存在');
        console.error('4. 权限问题');
        console.error('5. 请求格式问题');
      }
    }
  }
}
 
// 首先尝试获取有效token
async function getValidToken() {
  try {
    console.log('正在获取有效token...');
    
    const loginMutation = `
      mutation wxLogin($input: WxLoginRequest!) {
        wxLogin(input: $input) {
          token
          userInfo {
            userId
            name
            userType
          }
        }
      }
    `;
 
    // 需要用户提供新的微信code
    const wxCode = 'NEED_NEW_WX_CODE'; // 这里需要替换为新的微信code
 
    const loginResponse = await axios.post(graphqlUrl, {
      query: loginMutation,
      variables: {
        input: {
          code: wxCode,
          wxOpenid: "test-openid-152"
        }
      }
    });
 
    if (loginResponse.data.errors) {
      console.error('登录失败:', loginResponse.data.errors);
      console.log('\n请提供新的微信登录code来测试!');
      return null;
    }
 
    const { token } = loginResponse.data.data.wxLogin;
    console.log('✅ 获取token成功!');
    return token;
 
  } catch (error) {
    console.error('获取token失败:', error.message);
    return null;
  }
}
 
async function main() {
  // 如果没有有效token,先尝试获取
  if (token === 'Bearer_TOKEN_HERE') {
    console.log('需要先获取有效token...');
    const validToken = await getValidToken();
    if (!validToken) {
      console.log('\n❌ 无法获取有效token,请提供新的微信登录code');
      return;
    }
    // 这里应该更新token变量,但由于是const,我们需要手动替换
    console.log('\n请将获取到的token替换到脚本中的token变量,然后重新运行测试');
    return;
  }
 
  await testMiniprogramFormat();
}
 
main();