服务端 SDK 与 REST 客户端
Node / Java / Go / Python / .NET / PHP 服务端 SDK 的安装、签发 Token、调用 REST 与校验回调签名。
版本 v1.1.0 · 更新于 2026-10-26 · 修订 1
服务端 SDK 解决三件事:签发 Token、调用 REST、校验回调签名。Node / Java / Go / Python / .NET / PHP 六种语言提供同一套语义。
三层结构#
| 层 | 内容 | 对应文档 |
| Token | AccessToken2 / RtcTokenBuilder / RtmTokenBuilder:签发与校验频道 Token | AccessToken2 语义 |
| REST 客户端 | 声网形状的端点封装(频道查询、封禁、录制、推流、水晶球) | REST API 参考 |
| 回调 | Agora-Signature(SHA1)/ Agora-Signature-V2(SHA256)校验与信封解析 | 回调接入 |
| 语言 | 包 / 引入方式 |
| Node.js / TypeScript | @nimeet/server-sdk |
| Java | 引入 Java 版服务端 SDK 的 pom.xml 依赖 |
| Go | Go module nimeet |
| Python | pip install .(无运行时依赖) |
| .NET / C# | NiMeet.ServerSdk.csproj |
| PHP | composer require nimeet/server-sdk |
三行代码签一个 Token(Node)#
typescriptimport { NiMeetClient, RtcTokenBuilder2 } from '@nimeet/server-sdk';
const token = RtcTokenBuilder2.buildTokenWithUid(appId, appCertificate, 'weekly-sync', 10001, 'host', 3600, 3600);
const channels = await new NiMeetClient({ baseUrl, customerId, customerSecret }).api.getChannelByAppid(appId, 0, 100);
参数顺序在所有语言里一致:appId, appCertificate, channel, uid, role, tokenTtlSeconds, privilegeTtlSeconds。 Token 的语义(权限位、exp/pexp、通配)见 AccessToken2 语义。
什么时候用 SDK、什么时候直接 HTTP#
| 场景 | 建议 |
| 已有后端服务,要签发 Token | 用 SDK(少写一遍签名) |
| 批量查询/治理频道 | 用 SDK 的类型化封装 |
| 依赖注入框架、需要精细控制超时/重试 | 直接 HTTP + 自己的客户端 |
| 边缘函数(体积敏感) | 直接 HTTP(SDK 类型面较大) |
回调校验(所有语言同形)#
typescriptimport { verifyCallbackSignature } from '@nimeet/server-sdk';
const ok = verifyCallbackSignature({
rawBody,
signature: headers['agora-signature'],
signatureV2: headers['agora-signature-v2'],
secret: process.env.WEBHOOK_SECRET!,
});
事件码与负载见 回调事件参考,重试与对账见 回调接入。
常见问题#
| 现象 | 原因 | 处理 |
401 invalid_credentials | customerSecret 是轮换前的旧值 | 从控制台重新获取并更新环境变量 |
| 生成的 Token 校验失败 | 用了别的项目的 appCertificate | 一个项目一套凭证,不要跨项目复用 |
| 回调签名永远不匹配 | 用了反序列化后的 JSON 重新序列化 | 用原始 body 字节 |
| Go 模块拉不到 | 模块代理不可达 | 用 replace 指向本地目录 |
| PHP 无运行时 | 环境没有 PHP | 属环境限制,不是 SDK 问题 |