最小可运行示例:QQ信息API从curl快速上手

最小可运行示例:QQ信息API从curl快速上手

适用场景

日常开发中,无论是搭建用户绑定、好友推荐、评论区展示,还是简单的信息校验,经常需要根据QQ号获取对应的基础资料。QQ信息API(/api/qq)提供了一个轻量级的查询入口:输入合法的QQ号码,即可拿到昵称、QQ邮箱、QQ空间链接,以及四组不同尺寸的头像直链(40px、100px、140px、640px)。前端可以直接将图片地址绑定到<img />标签,无需额外处理。

本文不讨论复杂的业务架构,而是聚焦“最小可运行示例”——任何开发者拿到API后,最先要做的就是打开终端,用一条最短的命令验证接口连通性。下面我们会从参数构造、鉴权、返回解析到异常处理,一步步跑通整个流程。

接口能力边界

请求方式

  • 方法:GET
  • 地址https://v1.apizero.cn/api/qq
  • QPS 限制:10次/秒(超过限制可能返回限流错误,请合理设计重试逻辑)
  • 字符集:输出统一为 UTF-8;腾讯上游历史数据中存在 GBK 编码的中文昵称,接口会自动识别并转码

核心能力

  1. 严格号码校验:只接受5-11位纯数字的QQ号码,不符合此范围的参数会直接返回参数错误。这避免了上游接口因字符串截断而返回错误号码。
  2. 安全增强:返回的qqkey 必须与请求的qq参数严格一致,否则视为未查询到。这是防御某些上游返回错误缓存的有效手段。
  3. 错误兼容:上游腾讯接口有时返回_Callback({error:...})格式的错误,有时返回portraitCallBack(...)格式的正常数据。该接口会自动识别两种格式,提取有效信息。
  4. 头像多尺寸avatars对象中包含s40s100s140s640四个字段,分别对应40、100、140、640像素的方形头像直链。注意:头像图片是腾讯 CDN 资源,加载速度通常较快,但少数冷门号码可能返回默认企鹅头像。

参数与鉴权

Query 参数

参数名必填类型说明示例值
qqstring5-11 位纯数字QQ号码。必须为数字字符串,不允许空格或非数字字符。88888888

鉴权方式

该接口同时支持以下两种鉴权方式(任选其一即可):

  • Authorization 头:格式Bearer sk_live_xxxxxxxxxxxxxx
  • X-API-Key 头:格式sk_live_xxxxxxxxxxxxxx

两种方式等效。为了最小可运行示例,本文使用X-API-Key头(因为 curl 中更简洁)。如果你尚未申请 API Key,也可以尝试匿名请求(每日有一定配额,但具体额度以文档为准)。

⚠️ 注意:生产环境中请将 API Key 存放在环境变量或密钥管理服务中,切勿硬编码到代码仓库。

最小可运行 curl 示例

下面是最精简的可复制 curl 命令。假设你已经将 API Key 设为环境变量APIZERO_API_KEY,直接复制到终端即可执行:

curl -sS \ -X GET \ -H "X-API-Key: $APIZERO_API_KEY" \ "https://v1.apizero.cn/api/qq?qq=10001"

如果你没有 API Key,也可以临时改用无鉴权请求(某些 endpoints 允许匿名,但这里建议用 Key 确保成功率):

curl -sS \ -X GET \ "https://v1.apizero.cn/api/qq?qq=10001"

执行后如果得到类似下面的 JSON,即表示接口连通成功:

{ "code": 0, "data": { "avatars": { "s100": "https://q1.qlogo.cn/g?b=qq&nk=10001&s=100", "s140": "https://q1.qlogo.cn/g?b=qq&nk=10001&s=140", "s40": "https://q1.qlogo.cn/g?b=qq&nk=10001&s=40", "s640": "https://q1.qlogo.cn/g?b=qq&nk=10001&s=640" }, "is_found": true, "mail": "10001@qq.com", "name": "QQ号码10001", "qq": "10001", "qzone": "https://user.qzone.qq.com/10001" }, "msg": "成功", "request_id": "abc123def456" }

注意:10001是一个非常早期的 QQ 号码(实际上可能属于腾讯官方账号),输出的昵称会因数据源不同而不同。如果你的 API Key 正确但返回code != 0,请检查qq参数是否合法。

返回值解读

完整的响应结构字段含义如下:

字段类型说明
codeinteger业务状态码。0表示成功;非0表示错误(见错误码表)。
msgstring状态描述文本,成功时为“成功”,错误时为具体错误原因。
request_idstring请求唯一标识,可用于后续排查日志。
dataobject成功时存在,包含查询结果。
data.qqstring查询的QQ号,与请求参数一致。
data.namestring昵称。可能为空字符串或默认名称。
data.mailstringQQ邮箱地址,格式qq号@qq.com
data.qzonestringQQ空间链接,格式https://user.qzone.qq.com/qq号
data.is_foundboolean是否找到真实用户信息。如果为falsename可能为默认值。
data.avatarsobject头像直链集合,包含s40s100s140s640四个字段。

关于is_found的说明

  • is_found = true时,表示腾讯上游确认了该号码存在且包含有效用户数据。
  • is_found = false时,表示该号码可能未被准备、被冻结或数据不可用,但接口仍会根据缓存返回一些基础信息(如默认昵称、默认头像)。生产环境中建议根据此字段判断是否展示用户信息。

头像直链的使用

avatars中的 URL 可以直接用于<img>标签,例如:

<img src="https://q1.qlogo.cn/g?b=qq&nk=10001&s=640" alt="头像" />

需要注意的是,头像图片是腾讯 CDN 资源,不保证永久有效。建议定期刷新或提供 fallback 头像。另外,s参数值必须为 40、100、140、640 之一,其他数值可能导致 404 或重定向。

常见错误与处理

错误码列表

codemsg 含义排查方向
1001参数错误:qq 必须为5-11位数字检查qq参数是否纯数字且长度合法
1002鉴权失败:无效的 API Key检查X-API-KeyAuthorization头是否正确
1003上游服务异常等待一段时间后重试,或联系接口提供方
1004请求频率超过限制减小并发量或加入退避重试
-1系统内部错误建议附带request_id反馈给技术支持

上游兼容性注意

由于接口会对上游的 GBK 编码进行转码,极少数情况下转码可能不完美,例如繁体中文或特殊符号可能出现乱码。建议在前端对name做一层简单的 unicode 净化。

cURL 常见问题

  • Mac/Linux 下:curl 默认输出到终端,加-sS可以静默且显示错误。
  • Windows 下:推荐使用 Git Bash 或 WSL;使用 cmd 时注意变量引用方式:%APIZERO_API_KEY%
  • 代理环境:如果使用代理,curl 可能无法直连,请添加--noproxy '*'或配置正确的代理。

工程化注意事项

  1. 缓存策略:QQ 昵称和头像变更频率很低,可以缓存结果 1 小时以上,减少 API 调用。注意缓存 key 使用qq号,并定期失效。
  2. 头像尺寸选择:列表页推荐使用s40s100(节省带宽),详情页使用s640(清晰度高)。
  3. 参数校验前置:在业务代码中先校验qq是否为5-11位纯数字,避免无效请求浪费配额。
  4. 错误重试:遇到1003上游异常或1004限流时,采用指数退避(如 1s、2s、4s 重试,最多3次)。
  5. 日志记录:每次请求记录request_idqqcode、耗时,便于排查线上问题。
  6. 保密 API Key:前端代码中绝对不要暴露 API Key,服务端调用时建议通过环境变量或配置中心读取。
  7. 匿名调用限制:如果你使用匿名请求(不带 Key),注意每日调用量有限,且 QPS 可能更低。正式项目请申请 Key 并妥善保管。

参考文档

  • QQ信息 API 官方文档
  • 原始接口文档 Markdown