v1.0 · 现在开始接入

多姿态聚合登录平台 API 文档

一套 API 连接 50+ 主流 OAuth 登录平台。完善的 RESTful 接口设计, 支持多语言 SDK, 5 分钟即可完成接入。

快速开始

5 分钟完成 OAuth 登录接入

1
创建账号和应用
注册 多姿态聚合登录平台 账号,进入「控制台 → 我的应用」创建一个新应用,获取 API KeyAPI Secret
2
发起 OAuth 授权
调用 OAuth 授权接口,将用户重定向到第三方平台进行授权。
3
处理回调
用户授权后,第三方平台会携带 code 参数跳转到您设置的回调地址,用 code 换取用户信息。
4
完成登录
获取到用户信息后,将其关联到您的系统用户,完成登录流程。
login.php
$baseUrl = 'https://login.duozitai.com';
$params = [
    'act' => 'login',
    'appid' => 'YOUR_API_KEY',
    'appkey' => 'YOUR_API_SECRET',
    'type' => 'qq',
    'redirect_uri' => 'https://your-domain.com/callback.php',
    'state' => bin2hex(random_bytes(16))
];
$url = $baseUrl . '/connect.php?' . http_build_query($params);
$result = json_decode(file_get_contents($url), true);
if ($result['code'] == 0) {
    header('Location: ' . $result['url']);
    exit;
}
login.py
import requests
import secrets

BASE_URL = 'https://login.duozitai.com'
params = {
    'act': 'login',
    'appid': 'YOUR_API_KEY',
    'appkey': 'YOUR_API_SECRET',
    'type': 'qq',
    'redirect_uri': 'https://your-domain.com/callback',
    'state': secrets.token_hex(16)
}
resp = requests.get(f'{BASE_URL}/connect.php', params=params).json()
if resp['code'] == 0:
    # 重定向用户到授权页面
    print(resp['url'])
server.js (Express)
const axios = require('axios');
const BASE_URL = 'https://login.duozitai.com';

// 发起登录
app.get('/oauth/:platform', async (req, res) => {
  const { platform } = req.params;
  const params = {
    act: 'login',
    appid: process.env.API_KEY,
    appkey: process.env.API_SECRET,
    type: platform,
    redirect_uri: 'https://your-domain.com/callback',
    state: crypto.randomBytes(16).toString('hex')
  };
  const { data } = await axios.get(`${BASE_URL}/connect.php`, { params });
  if (data.code === 0) res.redirect(data.url);
  else res.status(400).send(data.msg);
});
Terminal
# 发起 OAuth 登录
curl -s "https://login.duozitai.com/connect.php?act=login&appid=YOUR_API_KEY&appkey=YOUR_API_SECRET&type=qq&redirect_uri=https%3A%2F%2Fyour-domain.com%2Fcallback"

# 用 code 换取用户信息
curl -s "https://login.duozitai.com/connect.php?act=callback&appid=YOUR_API_KEY&appkey=YOUR_API_SECRET&code=CALLBACK_CODE"

API 概述

基础信息、认证方式、请求与响应格式

Base URL:
https://login.duozitai.com
请求方式
GET / POST(OAuth 接口支持 GET,管理接口支持 POST)
返回格式
统一 JSON 格式响应
字符编码
UTF-8
HTTPS
生产环境强制 HTTPS 加密传输

认证方式

管理 API 认证:所有 /api/v1/* 接口需要在请求头中携带 Authorization: Bearer {api_key},或通过 POST/GET 参数传递 api_keyapi_secret

统一响应格式

Response Format
// 成功响应
{
    "code": 0,
    "msg": "success",
    "data": { ... }
}

// 错误响应
{
    "code": 401,
    "msg": "认证失败",
    "errcode": 40101
}

支持的平台

50+ 主流 OAuth 登录平台,持续新增中

QQ 登录
type=qq
微信登录
type=wx
支付宝
type=alipay
微博
type=sina
百度
type=baidu
GitHub
type=github
Gitee
type=gitee
Google
type=google
Microsoft
type=microsoft
华为
type=huawei
小米
type=xiaomi
哔哩哔哩
type=bilibili
钉钉
type=dingtalk
飞书
type=feishu
企业微信
type=wecom
抖音
type=douyin
访问 平台列表接口 可获取完整的实时平台列表及图标资源。

创建应用

POST /api/v1/app/create

POST /api/v1/app/create

创建一个新的 OAuth 应用,系统将自动分配 API Key 和 API Secret。

请求参数

参数必填类型说明
namestring应用名称,最长 50 字符
descriptionstring应用描述
callback_urlstring授权回调地址

成功响应

{
    "code": 0,
    "msg": "success",
    "data": {
        "id": 1,
        "api_key": "1234567890123456",
        "api_secret": "abcdef1234567890abcdef1234567890"
    }
}

更新应用

POST /api/v1/app/update

POST /api/v1/app/update

更新指定应用的信息(名称、描述、回调地址)。

请求参数

参数必填类型说明
idint应用 ID
namestring新应用名称
descriptionstring新描述
callback_urlstring新回调地址
只需传入需要更新的字段,未传入的字段将保持原值不变。

删除应用

POST /api/v1/app/delete

POST /api/v1/app/delete

删除指定应用,删除后该应用的所有配置和密钥将立即失效。

请求参数

参数必填类型说明
idint应用 ID
警告:此操作不可逆。删除后使用该应用的所有登录请求将立即停止工作。

应用列表

GET /api/v1/app/list

GET /api/v1/app/list

分页获取当前账号下的所有应用列表。

请求参数

参数必填类型说明
pageint页码,默认 1
per_pageint每页条数,默认 20,最大 100

成功响应

{
    "code": 0,
    "msg": "success",
    "data": {
        "total": 10,
        "per_page": 20,
        "current_page": 1,
        "last_page": 1,
        "data": [
            {
                "id": 1,
                "name": "我的应用",
                "description": "应用描述",
                "api_key": "1234567890123456",
                "callback_url": "https://example.com/callback",
                "status": 1,
                "created_at": "2024-01-01 00:00:00"
            }
        ]
    }
}

应用详情

GET /api/v1/app/info

GET /api/v1/app/info

获取指定应用的详细信息。

请求参数

参数必填类型说明
idint应用 ID

平台列表

GET /api/v1/platforms

GET /api/v1/platforms

获取当前所有已启用的 OAuth 登录平台列表,包含平台名称、图标、type 值等信息。此接口无需认证。

成功响应

{
    "code": 0,
    "msg": "success",
    "data": [
        {
            "id": 1,
            "name": "qq",
            "platform": "QQ登录",
            "icon": "/assets/icon/qq.svg",
            "enabled": 1,
            "sort": 1
        }
    ]
}

OAuth 授权

GET /oauth/{platform} 或 GET /connect.php?act=login

GET /oauth/{platform}

发起 OAuth 授权流程。系统将生成第三方授权 URL,您需要将用户重定向到此 URL。

请求参数

参数必填类型说明
platformstring路径参数,平台标识如 qqwx
appidstring应用 API Key
appkeystring应用 API Secret
redirect_uristring回调地址,需 URL 编码
statestring自定义状态参数,用于防止 CSRF

成功响应

{
    "code": 0,
    "msg": "success",
    "type": "qq",
    "url": "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=xxx&redirect_uri=xxx&state=xxx"
}

回调处理

GET /connect.php?act=callback

GET /connect.php?act=callback

用户在第三方平台授权成功后,会携带 code 参数跳转到回调地址。调用此接口用 code 换取用户信息。

请求参数

参数必填类型说明
actstring固定值 callback
appidstring应用 API Key
appkeystring应用 API Secret
codestring授权码,5 分钟内有效,仅可使用一次

成功响应

{
    "code": 0,
    "msg": "success",
    "type": "qq",
    "social_uid": "ABCD1234567890",
    "nickname": "用户昵称",
    "faceimg": "https://thirdqq.qlogo.cn/g?b=oidb&k=xxx",
    "gender": 1,
    "location": "广东 深圳",
    "ip": "113.89.xxx.xxx"
}
重要:social_uid 是用户唯一标识,建议存储到数据库;每个 code 只能使用一次。

代码示例

PHP / Python / Node.js 完整接入代码

PHP 完整回调示例

callback.php
$apiurl = 'https://login.duozitai.com/connect.php';
$appid = 'YOUR_API_KEY';
$appkey = 'YOUR_API_SECRET';
$code = $_GET['code'] ?? '';
if ($code) {
    $url = $apiurl.'?'.http_build_query([
        'act'=>'callback','appid'=>$appid,
        'appkey'=>$appkey,'code'=>$code
    ]);
    $result = json_decode(file_get_contents($url), true);
    if ($result['code']==0) {
        echo '登录成功:'.$result['nickname'];
    }
}

Python Flask 示例

app.py
import requests
from flask import Flask, redirect, request
app = Flask(__name__)
BASE='https://login.duozitai.com'

@app.route('/login/<p>')
def login(p):
    d=requests.get(f'{BASE}/connect.php',
        params={'act':'login','appid':'YOUR_KEY',
                'appkey':'YOUR_SECRET','type':p,
                'redirect_uri':f'{BASE}/callback'}).json()
    return redirect(d['url'])

@app.route('/callback')
def callback():
    d=requests.get(f'{BASE}/connect.php',
        params={'act':'callback','appid':'YOUR_KEY',
                'appkey':'YOUR_SECRET',
                'code':request.args.get('code')}).json()
    return f"登录成功:{d['nickname']}" if d['code']==0 else d['msg']

Node.js Express 示例

server.js
const express=require('express');
const axios=require('axios');
const app=express();
const BASE='https://login.duozitai.com';

app.get('/login/:p',async(req,res)=>{
  const {data}=await axios.get(`${BASE}/connect.php`,{
    params:{act:'login',appid:process.env.API_KEY,
      appkey:process.env.API_SECRET,type:req.params.p,
      redirect_uri:`${BASE}/callback`}});
  data.code===0?res.redirect(data.url):res.status(400).send(data.msg);
});

app.get('/callback',async(req,res)=>{
  const {data}=await axios.get(`${BASE}/connect.php`,{
    params:{act:'callback',appid:process.env.API_KEY,
      appkey:process.env.API_SECRET,code:req.query.code}});
  data.code===0?res.send(`登录成功:${data.nickname}`):res.status(400).send(data.msg);
});

错误码说明

API 统一错误码及处理建议

错误码HTTP 状态说明处理建议
0200请求成功正常处理业务逻辑
-1200通用错误查看 msg 字段获取详细信息
101401参数错误检查必填参数是否完整
102401应用不存在或已禁用确认 API Key 和应用状态
103401API Secret 错误检查密钥是否正确
201400授权码无效code 仅可用一次,请重新授权
202400授权码过期code 有效期 5 分钟
301429请求频率过高降低请求频率
401401未认证检查 Authorization 头
403403无权限确认套餐权限
500500服务器错误稍后重试或联系支持

OAuth 2.0 授权流程

标准授权码模式完整流程

1
用户访问您的网站
用户点击"第三方登录"按钮,服务端调用 /connect.php?act=login
2
生成授权 URL
返回第三方授权 URL,您将用户 302 重定向
3
用户在第三方授权
用户同意授权后,平台携带 code 重定向到回调地址
4
用 code 换取信息
调用 /connect.php?act=callback&code=xxx 获取用户信息
5
完成登录
获取 social_uidnickname 等信息,关联本地用户

流程示意图

用户 您的网站 聚合登录
第三方平台 回调地址 数据库

常见问题

FAQ 与故障排除

回调地址必须与应用配置中设置的授权域名完全匹配,包括协议、域名、路径。
OAuth code 只能使用一次,有效期 5 分钟。获取后请立即调用 callback 接口。
免费版每秒 5 次,基础版每秒 20 次,企业版可按需定制。建议添加缓存和重试机制。
请勿在前端暴露 API Key/Secret,所有调用应在服务端发起。如泄露请立即重新生成。
部分平台支持 HTTP 本地调试。建议使用 ngrok 等工具将本地服务暴露为 HTTPS 地址进行开发。
通过网站联系表单提交工单,或购买企业版套餐享受优先技术支持服务。