第三方对接指南

一页看懂,5 步完成 UserMatrix 对接。附带可运行的完整 demo。

流程一览

你的应用                    UserMatrix                 用户
  │                            │                        │
  │── 1. 构造登录链接 ─────────→│                        │
  │                            │── 2. 跳转授权页 ───────→│
  │                            │←── 3. 用户扫码/授权 ────│
  │←── 4. 带 code 回调 ────────│                        │
  │── 5. code 换用户信息 ─────→│                        │
  │←── 返回 openid+token ──────│                        │
  │                            │                        │
  └─ 登录完成,后续用 token 调 API

全程只需调 2 个接口act=login(生成链接)和 act=callback(换用户信息)。其余是自动跳转。

准备材料

um.yunjii.cn/console/apps 创建应用,获得:

材料说明示例
appid应用 ID1001
appkey应用密钥(切勿泄露a3f8b2c9d1e7...
回调域名你的回调地址域名yourapp.com

5 步对接

接口GET https://um.yunjii.cn/php/connect.php?act=login

参数

参数必填说明
appid应用 ID
typewx / alipay / qq / douyin / self
redirect_uri回调地址(域名需与后台一致)
state防 CSRF,随机字符串,原样返回
timestamp当前时间戳(秒)
signMD5 签名(见下方算法)

响应

{
  "code": 1,
  "data": { "url": "https://open.weixin.qq.com/connect/qrconnect?..." }
}

拿到 url 后,引导用户跳转到该地址(302 或前端 window.location)。

用户在第三方平台(微信/支付宝等)完成扫码或授权。

这一步你不需要做任何事,UM 会自动处理。

用户授权后,UM 会带 code 参数跳转回你的 redirect_uri

https://yourapp.com/callback?code=CODE_xxx&state=你传的state

你需要:

  1. 验证 state 与第一步生成的是否一致(防 CSRF)
  2. 取出 code,进入下一步

code 5 分钟内只能用一次,过期或重复消费返回 40163

接口GET https://um.yunjii.cn/php/connect.php?act=callback

参数

参数必填说明
appid应用 ID
code上一步拿到的 code
timestamp时间戳
sign签名

响应

{
  "code": 1,
  "data": {
    "openid": "oXabc123...",
    "nickname": "张三",
    "avatar": "https://thirdwx.qlogo.cn/...",
    "social_uid": "um_a1b2c3d4e5f6",
    "login_type": "wx",
    "token": "um_token_xxx..."
  }
}

字段说明

字段说明
openid应用内用户唯一 ID(同应用不变)
social_uidUMID,跨应用唯一(同一用户在不同应用 UMID 相同)
token后续 API 调用凭证(7 天有效)
nickname / avatar用户资料

后续业务请求中,用 token 验证用户身份:

接口GET https://um.yunjii.cn/php/check_token.php

参数token + appid

响应

{
  "code": 1,
  "data": {
    "user_id": 12345,
    "openid": "um_a1b2c3...",
    "scope": "app",
    "expire_at": "2026-07-13 12:00:00"
  }
}

code=1 表示 token 有效,可放行请求。


签名算法

不用 SDK 时需要手动计算签名,3 行逻辑

// 1. 收集所有 GET 参数(除 sign 外),按 key 字典序排列
ksort($params);

// 2. 拼接成字符串,末尾加 appkey
$signStr = '';
foreach ($params as $k => $v) $signStr .= "$k=$v&";
$signStr .= "appkey=$appkey";

// 3. MD5
$sign = md5($signStr);

timestamp 必须在当前时间 ±5 分钟内,否则返回 errcode=105


完整 PHP Demo

复制以下代码,填入你的 appidappkey,保存为 login.php 即可运行:

<?php
// ====== 配置 ======
$appid = '你的_appid';
$appkey = '你的_appkey';
$redirect_uri = 'https://yourapp.com/login.php';

// ====== 签名函数 ======
function makeSign($params, $appkey) {
    ksort($params);
    $str = '';
    foreach ($params as $k => $v) $str .= "$k=$v&";
    $str .= "appkey=$appkey";
    return md5($str);
}

// ====== 主逻辑 ======
$act = $_GET['act'] ?? 'login';

if ($act === 'login') {
    // 第一步:构造登录链接
    $params = [
        'act' => 'login',
        'appid' => $appid,
        'type' => 'wx',              // 改成你要的平台
        'redirect_uri' => $redirect_uri,
        'state' => bin2hex(random_bytes(16)),
        'timestamp' => time(),
    ];
    $params['sign'] = makeSign($params, $appkey);

    $resp = json_decode(file_get_contents(
        'https://um.yunjii.cn/php/connect.php?' . http_build_query($params)
    ), true);

    if ($resp['code'] === 1) {
        header('Location: ' . $resp['data']['url']);
        exit;
    }
    die('登录链接生成失败: ' . $resp['msg']);
}

if ($act === 'callback') {
    // 第四步:code 换取用户信息
    $params = [
        'act' => 'callback',
        'appid' => $appid,
        'code' => $_GET['code'],
        'timestamp' => time(),
    ];
    $params['sign'] = makeSign($params, $appkey);

    $resp = json_decode(file_get_contents(
        'https://um.yunjii.cn/php/connect.php?' . http_build_query($params)
    ), true);

    if ($resp['code'] === 1) {
        $user = $resp['data'];
        echo "登录成功!<br>";
        echo "昵称: {$user['nickname']}<br>";
        echo "头像: <img src='{$user['avatar']}' width=64><br>";
        echo "UMID: {$user['social_uid']}<br>";
        echo "Token: {$user['token']}<br>";
        // TODO: 在这里创建会话,跳回首页
    } else {
        die('换取用户信息失败: ' . $resp['msg']);
    }
}

使用方式

  1. 修改 $appid$appkey
  2. 在 UM 控制台配置回调域名为你的域名
  3. 浏览器访问 https://yourapp.com/login.php?act=login
  4. 用户扫码授权后会自动回调 ?act=callback&code=xxx

用 SDK(更简单)

如果你用 PHP / JS / Python / 小程序,装 SDK 后签名自动生成:

$um = new UM($appid, $appkey, $callback, 'https://um.yunjii.cn/php');
$url = $um->login('wx', $state);    // 一步生成登录链接
$user = $um->callback($_GET['code']); // 一步换取用户信息

详见 SDK 文档


常见问题

问题原因解决
errcode=102appid 不存在或应用未审核检查 appid,确认应用状态为"运行中"
errcode=103回调域名未授权在控制台添加你的回调域名
errcode=105timestamp 过期保证服务器时间正确,5 分钟内有效
errcode=106签名验证失败检查 appkey、参数排序、拼接格式
errcode=40163code 重复消费code 只能用一次,5 分钟过期

下一步