酷码开放平台基于 OAuth 2.0 授权码模式(Authorization Code),让第三方软件通过酷码统一账号体系完成登录验证。用户授权后,你的应用获取 access_token,可读取用户的昵称与头像。
适用场景:桌面应用、小程序、任何想要"用酷码账号登录"的软件。
在官网注册并激活账号,联系管理员授予开发者角色。
进入开发者中心,填写应用名称与回调地址 redirect_uri,创建后一次性获得 appId 与 appSecret。
在你的软件里调用获取授权 URL 接口,然后用系统浏览器打开返回的地址,用户登录并授权后自动跳回。
回调收到 code 后,用 code + appId + appSecret 换取 access_token,即可查询用户信息。
你的软件 酷码账号中心 用户
│ ① 调用 /api/authorize-url.php │ │
│──────────────────────────────────▶│ │
│ ② 返回授权地址 │ │
│◀──────────────────────────────────│ │
│ ③ 系统浏览器打开授权地址 ────────────▶ 用户登录 + 点击授权确认 │
│ │◀─────────────────────▶│
│ ④ 授权成功后带 code+state 回跳 │ │
│◀──────────────────────────────────│ │
│ ⑤ code+appSecret 调 /api/token │ │
│──────────────────────────────────▶│ │
│ ⑥ 返回 access_token │ │
│◀──────────────────────────────────│ │
│ ⑦ 携 access_token 调 /api/userinfo│ │
│──────────────────────────────────▶│ │
│ ⑧ 返回用户信息 │ │
│◀──────────────────────────────────│ │
以 Electron / C# / 任意桌面程序为例,核心就三步:取授权 URL → 用系统浏览器打开 → 本地回调收 code 换 token。
// ① 获取授权 URL(浏览器可用原生 fetch,Node/Electron 若无 fetch 用 axios 等)
const resp = await fetch(
'https://kuma2.cn/api/authorize-url.php' +
'?client_id=' + encodeURIComponent(APP_ID) +
'&redirect_uri=' + encodeURIComponent(REDIRECT_URI) +
'&state=' + state
);
const { authorize_url } = await resp.json();
// ② 打系统浏览器打开授权站(用户登录 + 授权后自动回跳 RETDIRECT_URI?code=...&state=...)
require('child_process').exec('start "" "' + authorize_url + '"'); // Windows
// macOS / Linux: open 或 xdg-open
// ③ 本地回调端口收到 code 后,后端换取 access_token
const token = await fetch('https://kuma2.cn/api/token.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: 'code=' + encodeURIComponent(code) +
'&client_id=' + encodeURIComponent(APP_ID) +
'&client_secret=' + encodeURIComponent(APP_SECRET) +
'&redirect_uri=' + encodeURIComponent(REDIRECT_URI)
}).then(r => r.json());
// ④ 用 access_token 查询用户
const me = await fetch('https://kuma2.cn/api/userinfo.php', {
headers: { 'Authorization': 'Bearer ' + token.access_token }
}).then(r => r.json());
console.log(me.user.nickname);
桌面程序常见回调方式:开启一个 http://127.0.0.1:端口/callback 的本地 HTTP 服务,把该地址注册为应用回调;授权成功后浏览器跳转到这里,本地服务捕获 code 后自动关闭浏览器窗口,完成令牌交换并存下登录态。
校验应用并返回可打开的授权地址(软件端入口)
授权确认页(浏览器打开),用户授权后回跳
用授权码换取 access_token
用 access_token 查询当前用户信息
用户授权后,浏览器会带着 code(和 state)跳回你的回调地址。你的软件用该 code 向后端换取令牌。
/api/token.php| 参数 | 说明 |
|---|---|
| code | 上一步拿到的授权码 |
| client_id | appId |
| client_secret | appSecret |
| redirect_uri | 与授权时一致的回调地址 |
{
"ok": true,
"access_token": "f0c4...",
"token_type": "Bearer",
"expires_in": 600
}
/api/userinfo.php鉴权方式:请求头 Authorization: Bearer <access_token>,或 URL 参数 ?access_token=...
{
"ok": true,
"user": {
"id": 12,
"email": "user@example.com",
"nickname": "小码",
"avatar": "/uploads/avatars/xxxx.png"
}
}
| HTTP | 错误信息 | 说明 |
|---|---|---|
| 401 | missing_token / invalid_token | 缺少或无效的 access_token |
| 401 | invalid_client | appId / appSecret 错误 |
| 400 | invalid_grant | 授权码无效、过期或已被使用 |
| 400 | redirect_mismatch | 回调地址与注册不一致(防劫持拦截) |
| 400 | unknown_client | 应用不存在或已停用 |
| 429 | 请求过于频繁 | 触发频率限制,稍后再试 |
redirect_uri 必须与注册值完全一致。Q:桌面应用的回调地址填什么?
A:建议在软件内本地启动一个回调端口(例如 http://127.0.0.1:18000/callback),把该地址填入应用设置。auth 完成后浏览器带 code 访问此地址,本地服务捕获后即可继续换取令牌。
Q:为什么提示"回调地址与注册不一致"?
A:你传的 redirect_uri 与控制台注册的值不完全相同(包括 http/https、端口、末尾斜杠)。请逐字符核对。
Q:appSecret 丢了怎么办?
A:在开发者中心点击"重置密钥",旧密钥立即失效,会重新生成一个。
Q:授权码有效期多久?token 呢?
A:授权码 10 分钟且一次性;access_token 默认 10 分钟,过期需重新授权。