OAuth 2.0 接入文档

概述

智穗语聊 OAuth 2.0 允许第三方应用使用智穗语聊账号进行用户登录。用户授权后,您的应用可以获取用户的基本信息。

API 基础地址: https://api.zhsidc.com

应用凭证说明

App ID(应用标识)

相当于应用的"用户名",是公开的标识符。用于在授权请求中告诉服务器"这是哪个应用在请求授权"。

  • 可以公开,无安全风险
  • 用于授权页面 URL 的 app_id 参数

App Secret(应用密钥)

相当于应用的"密码",用于证明请求确实来自你的应用。必须严格保密!

  • 只能存储在你的服务器后端,禁止暴露在前端代码
  • 用于服务端换取用户信息时的身份验证
  • 泄露后应立即重新生成

⚠️ 安全提示:App Secret 只在创建应用时显示一次。如果泄露或遗忘,请在应用详情页重新生成。

授权流程

┌─────────────┐     ┌──────────────────┐     ┌──────────────────┐
│   你的网站   │     │   智穗语聊服务器   │     │  智穗语聊客户端   │
└─────────────┘     └──────────────────┘     └──────────────────┘
      │                      │                        │
      │  1. 跳转授权页面       │                        │
      │ ────────────────────>│                        │
      │ (app_id, redirect_uri)                        │
      │                      │  2. 检测登录状态         │
      │                      │ ──────────────────────>│
      │                      │                        │
      │                      │<────────────────────── │
      │                      │  返回用户信息(id,头像等) │
      │                      │                        │
      │                用户点击头像确认授权              │
      │                      │                        │
      │  3. 回调并携带 token   │                        │
      │<──────────────────── │                        │
      │                      │                        │
      │  4. 用 token+secret   │                        │
      │     获取用户信息       │                        │
      │ ────────────────────>│                        │
      │                      │                        │
      │<──────────────────── │                        │
      │  返回用户数据          │                        │
      │                      │                        │
1

引导用户授权

将用户重定向到授权页面,用户需要打开智穗语聊客户端并登录。

2

用户确认授权

授权页面会自动检测客户端登录状态,用户点击头像即可确认授权。

3

获取一次性 Token

授权成功后,用户被重定向回你的回调地址,URL 中携带 token 参数。

4

换取用户信息

在你的服务器后端,使用 Token + App Secret 调用 API 获取用户信息。

API 接口

GET/oauth/authorize

打开授权页面,引导用户授权登录

请求参数

参数必填说明
app_id你的应用 App ID
redirect_uri授权成功后的回调地址(需与应用配置一致)
state推荐随机字符串,用于防止 CSRF 攻击,会原样返回
scope授权范围:userinfouserinfo,email

示例

https://api.zhsidc.com/oauth/authorize
  ?app_id=zs_xxxxxxxxxxxxxxxx
  &redirect_uri=https://example.com/callback
  &state=random_string_123
  &scope=userinfo,email

回调参数

授权成功后,用户会被重定向到:

https://example.com/callback?token=xxxxxxxxxxxx&state=random_string_123
POST/oauth/token

使用 Token 和 App Secret 换取用户信息(必须在服务端调用

请求参数

参数必填说明
app_id你的应用 App ID
app_secret你的应用 App Secret
token回调获得的一次性 Token(3分钟内有效,只能用一次)

请求示例

curl -X POST https://api.zhsidc.com/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "app_id": "zs_xxxxxxxxxxxxxxxx",
    "app_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "token": "回调获得的token"
  }'

成功响应

{
  "user_id": 12345,
  "zs_number": 100000001,
  "username": "zhangsan",
  "nickname": "张三",
  "avatar": "/uploads/avatars/xxx.jpg",
  "email": "zhangsan@example.com"
}

错误响应

{
  "error": "invalid_token",
  "message": "Token无效或已过期"
}

{
  "error": "invalid_client",
  "message": "App ID 或 App Secret 错误"
}

快速开始(PHP 示例)

1. 登录按钮(前端)

<a href="https://api.zhsidc.com/oauth/authorize?app_id=你的AppID&redirect_uri=https://你的网站/callback.php&scope=userinfo,email">
  使用智穗语聊登录
</a>

2. 回调处理(后端 callback.php)

<?php
// 配置信息(App Secret 必须保密,只能放在后端!)
$app_id = '你的AppID';
$app_secret = '你的AppSecret';

// 获取回调参数
$token = $_GET['token'] ?? '';
$state = $_GET['state'] ?? '';

if (empty($token)) {
    die('授权失败:未获取到 token');
}

// 调用 API 换取用户信息
$response = file_get_contents('https://api.zhsidc.com/oauth/token', false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode([
            'app_id' => $app_id,
            'app_secret' => $app_secret,
            'token' => $token
        ])
    ]
]));

$user = json_decode($response, true);

if (isset($user['error'])) {
    die('获取用户信息失败:' . $user['message']);
}

// 登录成功!
echo '欢迎,' . htmlspecialchars($user['nickname']);
echo '<br>智穗号:' . $user['zs_number'];
echo '<br>用户名:' . htmlspecialchars($user['username']);

// 在这里创建你网站的登录会话...
// $_SESSION['user_id'] = $user['user_id'];
?>

常见问题

Q: App Secret 可以放在前端吗?

绝对不可以!App Secret 相当于应用的密码,必须只存在于你的服务器后端。 前端代码(HTML/JS)可以被用户查看,Secret 泄露会导致他人可以伪装成你的应用。

Q: Token 有效期多长?

Token 有效期为 3 分钟,且只能使用一次。请在收到 Token 后立即在服务端调用 API 换取用户信息。

Q: 用户需要安装智穗语聊客户端吗?

是的,用户需要安装并登录智穗语聊客户端。授权页面会自动检测本地客户端的登录状态,类似于 QQ 快捷登录的方式。

Q: App Secret 泄露了怎么办?

请立即登录开发者中心,进入应用详情页,点击"重新生成密钥"按钮。旧密钥将立即失效。

Q: redirect_uri 有什么限制?

回调地址必须与创建应用时填写的一致,这是为了防止恶意网站截取授权 Token。