切换日光/暗黑模式
就一件必须做对的事
每个请求都要带上你的 API Key,放在 Authorization 头里:
http
Authorization: Bearer sk-你的APIKey格式错一个字符就会 401,最常见的三个错误:
| 错误写法 | 问题 |
|---|---|
Authorization: sk-xxx | 少了 Bearer 前缀 |
Authorization: Bearer: sk-xxx | 多了个冒号 |
Authorization: Bearersk-xxx | Bearer 和 Key 之间少了一个空格 |
正确格式是:Bearer + 一个空格 + Key。
有些接口也认别的写法
Authorization: Bearer 是通用方式,所有接口都认。但少数接口为了兼容特定生态,额外接受其他写法——你从别处抄来的配置大概率能直接用:
| 接口 | 额外接受的写法 |
|---|---|
/v1/messages(Anthropic 协议) | x-api-key: sk-你的APIKey |
Gemini 协议(/v1beta/models/...) | x-goog-api-key: sk-你的APIKey,或 URL 参数 ?key=sk-你的APIKey |
| WebSocket 实时语音 | 密钥放进 Sec-WebSocket-Protocol(浏览器只能这么传,见 实时会话) |
拿不准就用 Bearer
除实时语音外,Authorization: Bearer 在所有接口上都能用。上面这些只是"额外兼容",不是"必须这样写"。
Key 从哪来
到 https://api.wxiai.com/token 新建。新建时默认设置就能用,不需要额外配置。
把 Key 放在哪里
放在服务端。 这是唯一安全的做法。
| 场景 | 正确做法 | 危险做法 |
|---|---|---|
| 后端服务 | 环境变量 / 配置中心 / 密钥管理服务 | 硬编码在源码里提交到 Git |
| 本地开发 | .env 文件,并写进 .gitignore | 直接写在代码常量里 |
| 桌面客户端 | 客户端自己的配置项 | 打包进安装包分发 |
| 网页前端 | 没有安全做法 | 任何写在前端 JS 里的 Key 都等于公开 |
前端直连会泄露 Key。浏览器里的代码用户能直接看到,也能在网络面板里看到请求头。如果必须让网页调用,请在你的后端做一层转发——前端调你的后端,你的后端拿 Key 去调我们。
用环境变量(推荐)
bash
# 写入环境变量,不要写进命令历史
export WXIAI_API_KEY="sk-你的APIKey"
curl https://api.wxiai.com/v1/chat/completions \
-H "Authorization: Bearer $WXIAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"grok-4.6","messages":[{"role":"user","content":"你好"}]}'python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["WXIAI_API_KEY"], # 从环境变量读,不写死在代码里
base_url="https://api.wxiai.com/v1",
)多把 Key 怎么分
建议按用途拆开,好处是能单独查看用量、单独停用,一把泄露不会牵连全部:
- 按环境拆:开发 / 测试 / 生产各一把。
- 按服务拆:不同的应用、不同的项目各一把。
- 按人拆:团队成员各自一把,离职直接停用。
Key 泄露了怎么办
- 立刻到 https://api.wxiai.com/token 把那一把删除(不是改名,是删除)。
- 新建一把替换掉。
- 检查账单,看有没有异常调用。
认证失败排查顺序
Authorization头的格式对不对(Bearer+ 一个空格)。- Key 是不是复制时漏了字符,或者已经被删了。
- 请求地址是不是
https://api.wxiai.com,有没有写错域名。 - 如果你经过了自己的网关、Nginx 或反向代理,确认它没有丢掉
Authorization头(这是很常见的一个坑)。
