O OauthGo

第三方登录接入文档

为其他目标站点提供第三方登录聚合服务。以下两套接口可任选其一接入:
彩虹聚合登录协议(/connect.php,兼容彩虹官方)与自研 REST 风格接口(/api/v1/oauth/*)。

彩虹聚合登录协议

兼容彩虹聚合登录(u.cccyun.cc)的接入方式,目标站点通过 appid / appkey 调用本平台接口完成第三方登录。统一返回 {code, msg, ...}code=0 成功,code=1 失败,code=2 登录未完成。 接口访问根路径 /connect.php/api/connect.php 为等价别名), 支持 GET / POST,参数可放查询串或 application/x-www-form-urlencoded 表单体。

接入流程

1
目标站点跳转 connect.php?act=login,携带 appid/appkey/type/redirect_uri,获取第三方授权地址。
2
目标站点将用户重定向到返回的 url,引导用户在第三方平台完成授权。
3
授权完成后平台 302 跳回 redirect_uri,并携带 typecode 两个参数。
4
目标站点调用 connect.php?act=callback,用 code 换取用户信息(一次性),完成登录。

接口:/connect.php

参数必填说明
act动作:login / callback / query
appid应用 ID
appkey应用密钥
type登录类型,见下方「类型对照表」
redirect_uriact=login 时必填登录完成后的回跳地址,域名须在应用白名单内
codeact=callback 时必填回调携带的授权码(一次性)
social_uidact=query 时必填第三方平台用户唯一标识

1. 发起登录(act=login)

GET /connect.php?act=login&appid=10001&appkey=your_appkey&type=gitee&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback
{ "code": 0, "msg": "succ", "type": "gitee",
  "url": "https://gitee.com/oauth/authorize?client_id=xxx&redirect_uri=xxx&state=xxx",
  "qrcode": "" }

返回的 url 即为第三方授权地址(已附带一次性 state),目标站点直接 302 跳转即可。

2. 回调(由平台 302 跳回)

用户完成授权后,平台自动跳转到目标站点的 redirect_uri,并追加以下参数:

https://example.com/callback?type=gitee&code=xxxx

3. 换取用户信息(act=callback)

GET /connect.php?act=callback&appid=10001&appkey=your_appkey&type=gitee&code=xxxx
{ "code": 0, "msg": "succ", "type": "gitee",
  "access_token": "xxxx",
  "social_uid": "123456",
  "faceimg": "https://avatar.example.com/1.png",
  "nickname": "张三",
  "location": "广东深圳",
  "gender": "男",
  "ip": "1.2.3.4" }

code 已使用、过期或登录未完成,返回 code=2

{ "code": 2, "msg": "未完成登录", "type": "gitee" }

4. 按 social_uid 查询(act=query)

用于目标站点在本地用户登录时校验第三方 UID 是否已绑定,无需携带 code:

GET /connect.php?act=query&appid=10001&appkey=your_appkey&type=gitee&social_uid=123456
{ "code": 0, "msg": "succ", "type": "gitee",
  "social_uid": "123456",
  "faceimg": "https://avatar.example.com/1.png",
  "nickname": "张三",
  "location": "广东深圳",
  "ip": "1.2.3.4" }

类型对照表

type 参数第三方平台
qqQQ 互联
wx微信开放平台
alipay支付宝开放平台
sina微博开放平台
baidu百度开放平台
douyin抖音开放平台
dingtalk钉钉开放平台
giteeGitee(码云)
wework企业微信

REST 风格接口

自研 REST 风格登录接口,请求与响应均为 JSON,统一返回 {code, message, data}。 登录接口(/api/v1/oauth/login)明文校验 appid/appkey;信息接口 (userinfo / query)只传 appid,通过服务端 MD5 签名校验身份,避免 appkey 泄漏。

接入流程

1
目标站点调用 POST /api/v1/oauth/login,携带 appid/appkey/type/redirect_uri,获取第三方授权地址。
2
用户授权完成后平台 302 跳回 redirect_uri,携带 typecode
3
目标站点调用 POST /api/v1/oauth/userinfo,用 code + sign 换取用户信息(一次性),完成登录。

签名规则

信息接口使用 MD5 签名:将接口相关参数按 key 升序拼接为 k1=v1&k2=v2,末尾追加 &key=<appkey>,整体取 MD5(小写)。

以 userinfo 为例,参数为 appid / type / code:
原串 = appid=10001&code=xxxx&type=gitee&key=your_appkey
sign = md5(原串)
接口签名参与参数
POST /api/v1/oauth/userinfoappid、type、code
POST /api/v1/oauth/queryappid、type、social_uid

1. 发起登录

POST /api/v1/oauth/login,请求体(JSON):

{ "appid": "10001", "appkey": "your_appkey", "type": "gitee",
  "redirect_uri": "https://example.com/callback" }
{ "code": 0, "message": "success",
  "data": { "url": "https://gitee.com/oauth/authorize?client_id=xxx&redirect_uri=xxx&state=xxx",
            "type": "gitee" } }

用户授权完成后,平台 302 跳回 redirect_uri

https://example.com/callback?type=gitee&code=xxxx

2. 换取用户信息

POST /api/v1/oauth/userinfo,请求体(JSON):

{ "appid": "10001", "code": "xxxx", "type": "gitee",
  "sign": "32 位 MD5 小写" }
{ "code": 0, "message": "success",
  "data": { "type": "gitee", "openid": "123456", "unionid": "u_8888",
            "nickname": "张三", "avatar": "https://avatar.example.com/1.png",
            "email": "zhangsan@example.com", "gender": "男",
            "location": "广东深圳", "access_token": "xxxx", "ip": "1.2.3.4" } }

3. 按 UID 查询用户

POST /api/v1/oauth/query,请求体(JSON):

{ "appid": "10001", "type": "gitee", "social_uid": "123456",
  "sign": "32 位 MD5 小写" }
{ "code": 0, "message": "success",
  "data": { "type": "gitee", "openid": "123456", "nickname": "张三",
            "avatar": "https://avatar.example.com/1.png",
            "location": "广东深圳", "ip": "1.2.3.4" } }

4. 获取已启用渠道

GET /api/oauth/providers,公开接口,无需鉴权:

[ { "name": "gitee", "display_name": "Gitee", "category": "social" } ]

错误码

code含义
0成功
1业务失败(message 中给出具体原因)
2登录未完成(code 无效 / 已使用)