通用约定

统一入口https://你的域名/api/{接口名称}
请求方式大部分为POST,特殊标注GET除外;application/x-www-form-urlencoded
返回格式JSON (UTF-8)

通用返回结构:

{
    "code": 0,
    "msg": "操作成功",
    "data": {}
}
A类鉴权:app_id + sign (MD5签名降序排序)
B类鉴权:api_token (安全KEY AES加密) + admin_user + admin_pass
C类鉴权:username + password

签名算法(A类API)— MD5(降序排序)

签名步骤 (重要:按key降序 krsort)
1. 收集所有参数(排除sign),过滤空值;
2. 按参数名 降序 (krsort) 排列;
3. 拼接为 key=value&key2=value2...;
4. 末尾追加 &app_key={appKey};
5. 计算MD5 32位小写。

PHP 示例

<?php
function buildSign($params, $appKey) {
    krsort($params);
    $str = '';
    foreach ($params as $k => $v) {
        if ($k === 'sign' || $v === '') continue;
        $str .= $k . '=' . $v . '&';
    }
    $str .= 'app_key=' . $appKey;
    return md5($str);
}
?>

安全令牌 · Admin API (AES-128-CBC)

准备:后台「系统设置 → 安全KEY」设置 secret_key。
生成 api_token:AES-128-CBC 加密 secret_key,IV随机,结果 Base64(iv+密文)

PHP 示例

function makeApiToken($plainKey) {
    $key = substr(hash('sha256', 'ylcloud_secret_key_v1', true), 0, 16);
    $iv = openssl_random_pseudo_bytes(16);
    $encrypted = openssl_encrypt($plainKey, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encrypted);
}
$api_token = makeApiToken('你的安全KEY');

错误码参考

分类错误场景说明
A类签名验证失败msg:"签名验证失败"
A类应用不存在/禁用msg:"应用不存在" / "应用已被禁用"
A类套餐过期/次数不足msg:"套餐已过期,请续费" / "调用次数不足"
B类安全令牌无效msg:"安全令牌无效"
B类管理员密码错误msg:"管理员密码错误"
C类账号不存在/密码错误msg:"账号不存在" / "密码错误"

人脸识别异步说明

/api/face 支持两种模式:发起扫脸( name+idcard ) 和 轮询结果( biz_token )。

// 发起响应
{ "code":0, "data":{ "status":"scan_pending", "biz_token":"xxx", "scan_url":"https://..." } }
// 查询结果
{ "code":0, "data":{ "status":"success", "result":"通过" } }