多语言短剧 MLS 接口文档(tool/mls)

文档更新时间:2026-04-09

调用路径 /mls/tool/xxx。需先登录(除另有说明的接口外)。除 index.php 中配置为免登录的接口(如 getTokencheckTokenlogingenerateCaptchasendSmsCoderegisterresetPassword)外,其余接口均需传 token。本文档不包含 TagparentUinuserId 等由调用方/路由约定的参数。

请求约定:所有 POST 类型接口均使用 Content-Type: application/json 提交请求体(除 8.1 分片上传直传服务使用 multipart/form-data 外)。

密码约定(2026-03-23 更新):所有密码字段均由前端加密后传输。后端不再对入参密码做二次加密处理;其中注册入库使用 PASSWORD('...') 写入数据库。

通用出参结构:

字段 类型 说明
flag int 状态码,100 表示成功
flagString string 提示信息
data object/array 成功时返回数据(部分接口无)
total int 部分列表接口返回总条数

1. /mls/tool/getSupportLanguageList - 获取支持语言列表

获取多语言支持的语言配置列表。返回范围由当前登录用户在 mls_user_conf.config.languages 决定(与 getUserConfconfig.languages 一致):

  • basic(默认):仅 id <= 12 且满足 enable 条件的语言。
  • allenable 条件下全部语言,不再限制 id

无有效 uin 或库中无配置行时,按 apiBase 默认 languages=basic 处理。不再按 parentUin 白名单区分。

入参

参数 类型 必填 说明
token string 登录后获得的 token
enable string 是否启用:1 启用(默认),0 禁用

出参

字段 类型 说明
flag int 100 成功,110 参数错误
flagString string 提示信息
data object 成功时包含
data.list array 语言列表,每项为 mls_languages 表字段

请求示例

{
  "token": "xxx",
  "enable": "1"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "list": [
      {
        "id": 1,
        "code": "zh",
        "name": "中文",
        "enable": 1
      }
    ]
  }
}

2. /mls/tool/getUserMlsList - 获取多语言任务列表

分页查询当前用户的多语言输出任务列表(仅未删除)。支持按 create_time 创建时间范围过滤(可选)。

入参

参数 类型 必填 说明
token string 登录后获得的 token
page int 页码,默认 1
num int 每页条数,默认 15,最大 100
title string 标题关键词,模糊匹配
resStatus int 状态:-1全部,0待处理,1处理中,2部分完成,3全部完成,4全部失败
createTimeStart int create_time 起始时间戳(秒级)
createTimeEnd int create_time 结束时间戳(秒级)

出参

字段 类型 说明
flag int 100 成功,110 参数错误
flagString string 提示信息
data array 当前页任务列表,每项为 mls_list 表一条记录
total int 符合条件的总条数

请求示例

{
  "token": "xxx",
  "page": 1,
  "num": 15,
  "title": "短剧",
  "createTimeStart": 1704067200,
  "createTimeEnd": 1704153600
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": [
    {
      "episodeId": 1,
      "dramaId": 0,
      "uin": 12345,
      "parentId": "01",
      "userId": 1000,
      "title": "任务标题",
      "origin_url": "http://xxx/source.mp4",
      "languages": "zh,en",
      "duration": 0,
      "resStatus": 0,
      "results": "[{\"language\":\"zh\",\"status\":0,\"uptime\":0,\"url\":\"\"}]",
      "is_del": 0,
      "create_time": 1770447600,
      "uptime": 1770447600
    }
  ],
  "total": 10
}

resStatus 枚举:0 待处理,1 处理中,2 部分完成,3 全部完成,4 全部失败。

results 单条 status(与 mls_list.results JSON 一致):0 待处理,1 处理中,2 成功,3 失败,4 待审核(用户开启成片审核时,管道回调成功可先入库为待审核,见下文附录 A)。


3. /mls/tool/getMlsDetail - 获取多语言任务详情

根据任务 episodeId 查询单条任务详情。

入参

参数 类型 必填 说明
token string 登录后获得的 token
episodeId int 任务 ID(表字段 episodeId),兼容历史 id 入参

出参

字段 类型 说明
flag int 100 成功,110 参数错误/记录不存在
flagString string 提示信息
data object 成功时为 mls_list 表一条完整记录

请求示例

{
  "token": "xxx",
  "episodeId": 1
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "episodeId": 1,
    "dramaId": 0,
    "uin": 12345,
    "parentId": "01",
    "userId": 1000,
    "title": "任务标题",
    "origin_url": "http://xxx/source.mp4",
    "languages": "zh,en",
    "duration": 0,
    "resStatus": 0,
    "results": "[{\"language\":\"zh\",\"status\":0,\"uptime\":0,\"url\":\"\"}]",
    "is_del": 0,
    "create_time": 1770447600,
    "uptime": 1770447600
  }
}

4. /mls/tool/addMlsTask - 新增多语言任务

创建一条多语言输出任务,results 按 languages 自动初始化为待处理。

入参

参数 类型 必填 说明
token string 登录后获得的 token
title string 任务标题
origin_url string 视频源地址
languages string 输出语种,逗号分隔,如 zh,en
duration int 视频时长,单位秒,默认 0

出参

字段 类型 说明
flag int 100 成功,110 参数错误/数据库失败
flagString string 提示信息
data - 成功时无 data

请求示例

{
  "token": "xxx",
  "title": "我的短剧任务",
  "origin_url": "http://xxx/source.mp4",
  "languages": "zh,en",
  "duration": 120
}

返回示例

{
  "flag": 100,
  "flagString": "success"
}

5. /mls/tool/updateMlsTask - 更新多语言任务

修改任务标题;可选传 languages,传入时会将新增的输出语言在 results 中补全为待处理(status=0),并把任务整体状态置为待处理(resStatus=0)。resStatus=1(处理中)时不允许修改

入参

参数 类型 必填 说明
token string 登录后获得的 token
episodeId int 任务 ID(表字段 episodeId),兼容历史 id 入参
title string 新标题
languages string 输出语种逗号分隔,如 zh,en,ja;传则与当前 results 对比,新增语种写入 results 并置 resStatus=0

出参

字段 类型 说明
flag int 100 成功,110 参数错误/记录不存在或无权限/处理中不允许修改/更新失败
flagString string 提示信息
data -

请求示例

{
  "token": "xxx",
  "episodeId": 1,
  "title": "新标题",
  "languages": "zh,en,ja"
}

返回示例

{
  "flag": 100,
  "flagString": "success"
}

6. /mls/tool/retryMlsTask - 失败重试

对多语言任务中未成功的语种进行重试。不传 languages 时重置所有非成功状态语种为待处理;传入 languages 时仅重置指定语种中未成功的为待处理。任务整体状态(resStatus)会置为 0(待处理)。任务已完成(resStatus=3)时不可重试

入参

参数 类型 必填 说明
token string 登录后获得的 token
episodeId int 任务 ID(表字段 episodeId)
languages string 要重试的语种,逗号分隔,如 zh,en;不传则重试所有未成功语种

出参

字段 类型 说明
flag int 100 成功,110 参数错误/记录不存在或无权限/任务已完成无需重试/重试失败/所选语言已完成
flagString string 提示信息
data -

请求示例

{
  "token": "xxx",
  "episodeId": 1,
  "languages": "zh,en"
}

返回示例

{
  "flag": 100,
  "flagString": "success"
}

7. /mls/tool/deleteMlsTask - 删除多语言任务(软删)

将任务标记为已删除(is_del=1),不物理删除。

入参

参数 类型 必填 说明
token string 登录后获得的 token
episodeId int 任务 ID(表字段 episodeId),兼容历史 id 入参

出参

字段 类型 说明
flag int 100 成功,110 参数错误/删除失败
flagString string 提示信息
data -

请求示例

{
  "token": "xxx",
  "episodeId": 1
}

返回示例

{
  "flag": 100,
  "flagString": "success"
}

8. /mls/tool/getMaterialAccess - 获取素材上传签名参数

获取素材上传所需的签名等信息,用于直传或上传接口。

入参

参数 类型 必填 说明
token string 登录后获得的 token
classify string 分类
parentId string 分组 ID,默认 01
service string 服务类型:material-uploadprivate-upload(默认)
subService string 子服务,默认 mls
subType string 默认 mls
toolService string 工具服务标识
subDiyParam string 额外自定义参数,须为合法 JSON 字符串,会与内置 diyParam 合并

出参

字段 类型 说明
flag int 100 成功,102/110 参数或用户/服务错误
flagString string 提示信息
data object 成功时包含签名及上传参数
data.signatureNonce string 签名随机数
data.accessId string 访问 ID
data.expireTime int 签名过期时间戳
data.signature string 签名值
data.filePrefix string 文件前缀,如 mls-1011-1000-
data.diyParam string JSON 字符串,上传时携带的自定义参数

请求示例

{
  "token": "xxx",
  "classify": "video",
  "parentId": "01",
  "service": "private-upload",
  "subService": "mls"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "signatureNonce": "12345",
    "accessId": "xxx",
    "expireTime": 1770534000,
    "signature": "14224ad83a75b14b349300868161d726",
    "filePrefix": "material-1011-1000-",
    "diyParam": "{\"platform\":\"apaas\",\"service\":\"material-upload\",\"groupID\":\"01\",\"subUser\":\"1000\",\"subCode\":\"subId\",\"subService\":\"material\"}"
  }
}

错误示例:servicematerial-uploadprivate-upload 时返回「素材所属服务错误」;用户不存在返回「用户不存在」。

8.1 视频/文件分片上传(直传上传服务)

在调用本上传接口前,需先通过 8. getMaterialAccess 获取上传签名参数(accessId、expireTime、signature、signatureNonce、filePrefix、diyParam),再向直传上传服务发起分片上传。

  • 视频文件(后缀 .mp4.mkv,不区分大小写):使用 DVR.FormUpload
  • 非视频文件:使用 MFS.APAAS.FormUpload

当文件大小超过 10MB 时,需按 10MB 一片进行分片,按顺序逐片上传;小于等于 10MB 时视为 1 片。

接口地址

文件类型 路径
视频 {UPLOAD_URL}/v2/DVR.FormUpload
非视频 {UPLOAD_URL}/v2/MFS.APAAS.FormUpload

UPLOAD_URL 为前端/环境配置的上传域名(upload-dvr.{DOMAIN},如:https://upload-dvr.jstest.aodianyun.cn/v2/DVR.FormUpload),请求时需带上与站点一致的协议(如 https:)。

请求方式

  • MethodPOST
  • Content-Typemultipart/form-data

请求参数(Form 表单字段)

参数 类型 必填 说明
file File (Binary) 当前分片内容(Blob/File.slice 得到)
access_id string getMaterialAccess 返回的 accessId
expires string getMaterialAccess 返回的 expireTime(转成字符串)
signature string getMaterialAccess 返回的 signature
signature_nonce string getMaterialAccess 返回的 signatureNonce(转成字符串)
file_prefix string getMaterialAccess 返回的 filePrefix
diy_param string getMaterialAccess 返回的 diyParam
chunk string 当前分片索引,从 0 开始
chunks string 总分片数(1 或 Math.ceil(fileSize / 10MB))
name string 原始文件名(含后缀,如 video.mp4

响应结构(JSON)

字段 类型 说明
Flag int 100 表示成功
FlagString string 提示信息,失败时为错误说明
location string 成功时可选,文件访问地址
data object 成功时可选,若存在则 data.location 为文件访问地址

成功时,文件最终 URL 以 response.data.locationresponse.data.data?.location 为准(二者有一即可)。

分片与顺序

  • 分片大小固定为 10MB(10 × 1024 × 1024 字节)。
  • 最后一片可为不足 10MB 的剩余部分。
  • 分片必须按 chunk 从 0 到 chunks-1 顺序上传;全部片上传成功后,最后一片的响应中返回文件 URL。

前端实现要点(参考)

  1. 先请求 getMaterialAccess,拿到 materialAccess(accessId、expireTime、signature、signatureNonce、filePrefix、diyParam)。
  2. 根据文件名后缀判断是否为视频(如 .mp4.mkv),选择 DVR.FormUpload 或 MFS.APAAS.FormUpload。
  3. 使用 File.slice(start, end) 切分 10MB 一片,循环上传;每片 FormData 带上表中所列签名参数及 chunk、chunks、name。
  4. 仅当 Flag === 100 时视为成功;最后一片成功响应中的 locationdata.location 即为上传结果 URL。

9. /mls/tool/getMlsAmount - 获取当前额度(积分)

获取当前用户 MLS 额度;若尚无额度记录,按规则自动创建(首次赠送 6000 积分)。可用额度会扣除处理中未计费任务(resStatus 0/1/2)的预占额度。扣费单价:10 积分/秒(计费 = 时长(秒) × 输出语言数 × 10,扣费为整数,无小数)。

入参

参数 类型 必填 说明
token string 登录后获得的 token

出参

字段 类型 说明
flag int 100 成功,110 参数/获取失败
flagString string 提示信息
data object 成功时包含
data.last_amount int 当前剩余额度(账面),整数
data.reserved int 处理中未计费任务占用的预估额度,整数
data.available int 可用额度 = last_amount - reserved,整数
data.invite_reward_total int 邀请累计奖励积分

【变更】 当前版本 data 包含 last_amountreservedavailableinvite_reward_total,不再返回 month 字段。

请求示例

{
  "token": "xxx"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "last_amount": 3000,
    "reserved": 0,
    "available": 3000,
    "invite_reward_total": 24000
  }
}

10. /mls/tool/getMlsAmountRunList - 额度(积分)使用记录

分页查询当前用户的 MLS 额度流水(mls_user_amount_run),按 id 倒序;每条记录可带关联任务标题 task_title(通过 episodeId 关联 mls_list)。支持按 uptime 时间范围和 trade_type 类型过滤(可选)。

入参

参数 类型 必填 说明
token string 登录后获得的 token
page int 页码,默认 1
num int 每页条数,默认 15,最大 100
uptimeStart int uptime 起始时间戳(秒级),不传则不限制
uptimeEnd int uptime 结束时间戳(秒级),不传则不限制
tradeType int 类型:1 存入,2 支出;不传则不过滤

出参

字段 类型 说明
flag int 100 成功,110 参数错误
flagString string 提示信息
data array 当前页流水列表
data[].id int 流水主键
data[].uin int 用户 uin
data[].trade_amount float 交易额度(正为存入,负为支出时取绝对值)
data[].last_amount float 交易后剩余额度
data[].trade_type int 1 存入,2 支出
data[].trade_desc string 备注描述(扣费时含任务标题、输出语种等)
data[].episodeId int 关联任务 id,扣费时有值
data[].uptime int 交易时间(秒级时间戳)
data[].task_title string 关联任务标题(来自 mls_list,可能为空)
total int 符合条件的总条数

请求示例

{
  "token": "xxx",
  "page": 1,
  "num": 15,
  "uptimeStart": 1704067200,
  "uptimeEnd": 1704153600,
  "tradeType": 2
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": [
    {
      "id": 1,
      "uin": 12345,
      "trade_amount": "10.40",
      "last_amount": "41.60",
      "trade_type": 2,
      "trade_desc": "episodeId:5 《示例短剧》 多语言制作扣费 本次新增成功2语种 输出语种:zh,en 2分钟",
      "episodeId": 5,
      "uptime": 1704067200,
      "task_title": "示例短剧"
    }
  ],
  "total": 1
}

11. /mls/tool/checkMlsAmount - 判断额度(积分)是否充足

若无额度记录会先走分配逻辑(同 getMlsAmount)。计费规则:单价 10 积分/秒,计费 = 时长(秒) × 输出语言数 × 10,扣费为整数,无小数

入参

参数 类型 必填 说明
token string 登录后获得的 token
duration int 视频时长,单位秒
languages string 二选一 输出语种逗号分隔,如 zh,en
languageCount int 二选一 输出语言数量

出参

字段 类型 说明
flag int 100 成功,110 参数/额度异常
flagString string 提示信息
data object 成功时包含
data.sufficient bool 可用额度是否 ≥ 本次所需
data.required int 本次所需额度(整数)
data.last_amount int 当前剩余额度(账面),整数
data.reserved int 处理中未计费任务占用额度,整数
data.available int 可用额度,整数
data.billable_seconds int 计费秒数 = duration × language_count(用于计费计算)
data.language_count int 语言数

【变更】 返回字段由 billable_minutes(计费分钟数)改为 billable_seconds(计费秒数 = 时长×语言数);计费规则为单价 10 积分/秒

请求示例

{
  "token": "xxx",
  "duration": 120,
  "languages": "zh,en"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "sufficient": true,
    "required": 2160,
    "last_amount": 3000,
    "reserved": 0,
    "available": 3000,
    "billable_seconds": 240,
    "language_count": 2
  }
}

说明:扣费在 OpenToolupdateMlsResult 回调中触发:按「管道上报 成功(2) 且该语种此前非成功逐条扣费(计费 = 时长秒 × 本次新增成功语种数 × 单价 10 积分/秒)。若用户开启成片审核(mls_user_conf.batch_review=true),成功结果可能以 status=4(待审核) 入库,扣费规则不变;详见附录 AdeductMlsAmount 为内部逻辑,不单独对外暴露。


12. /mls/tool/login - 登录

【修改,更新时间:2026-03-24】 当前实现支持 3 种登录方式:

  • 手机号 + 密码
  • uin + 密码
  • 手机号 + 短信验证码

其中“手机号 + 短信验证码”模式下,若手机号未注册会自动创建账号后登录。

登录成功后返回 subToken(后端在 Redis 中保存用户会话信息)。本接口为免登录接口,无需传 token

入参

参数 类型 必填 说明
username string 登录账号:可传手机号(11位)或 uin(纯数字)
userPassword string 条件必填 密码登录时必填(前端加密后传输)
smsCode string 条件必填 短信验证码登录时必填
inviteUin int 邀请人 uin(固定参数名)。仅在“手机号+短信验证码且未注册自动注册”场景生效

账号判定规则

  • smsCode 非空时:username 按手机号处理(必须 11 位手机号)
  • smsCode 为空时:
    • username 为纯数字且不符合手机号格式时,按 uin + 密码 登录
    • 否则按 手机号 + 密码 登录

出参

字段 类型 说明
flag int 100 成功,1004 参数错误,110 登录失败
flagString string 提示信息
data object 成功时包含
data.subToken string 从跳转 URL 中解析出的 subToken,用于后续接口鉴权

请求示例

{
  "username": "13800138000",
  "userPassword": "front_encrypted_password"
}

手机号 + 短信验证码:

{
  "username": "13800138000",
  "smsCode": "123456"
}

uin + 密码:

{
  "username": "10001111",
  "userPassword": "front_encrypted_password"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "subToken": "md5_token_string"
  }
}

12.1 /mls/mlsUser/generateCaptcha - 生成图形验证码

【新增,更新时间:2026-03-23】 生成图片验证码。验证码内容与 check_key 拼接后存 Redis(5 分钟有效)。

说明:滑块/行为验证码由前端按平台文档接入,拿到 captchaId 后直接调用 sendSmsCodecaptchaId无需调用本接口。本接口为传统图形码,后续可能下线。

入参

参数 类型 必填 说明
check_key string 前端随机字符串,用于区分验证码会话

出参

返回 JPEG 图片流(content-type: image/jpeg),非 JSON。


12.2 /mls/mlsUser/sendSmsCode - 发送短信验证码

【更新时间:2026-04-07】 先发码前人机校验,支持两种方式(二选一):

  1. 滑块/行为验证码:传 captchaId(前端完成验证后获得的唯一 id)。服务端请求 MLS_CAPTCHA_VERIFY_BASE + /v1/message/Captcha/query?captcha_id=... 做二次校验,参见 广电云平台验证码·服务端校验
  2. 传统图形验证码:传 check_key + captcha(与 generateCaptcha 配套),Redis 一次性校验(逐步废弃)。

入参

参数 类型 必填 说明
phone string 手机号
module string 场景:register / login / password
captchaId string 滑块等行为验证码 id;与下方图形码二选一,同时传时优先按 captchaId 走远程校验
check_key string 图形验证码随机字符串(未传 captchaId必填,与 generateCaptcha 一致)
captcha string 图形验证码字符(未传 captchaId必填

业务规则

  • module=register:手机号必须未注册
  • module=login:允许未注册手机号(用于短信登录自动注册)
  • module=password:手机号必须已注册
  • 使用图形码时:校验通过后 Redis 中对应 key 即删除(一次性)
  • 使用 captchaId 时:须在运行环境配置 MLS_CAPTCHA_VERIFY_BASE(验证码服务根地址,无末尾斜杠,例如 https://message.guangdianyun.tv

返回示例

{
  "flag": 100,
  "flagString": "发送成功"
}

12.3 /mls/mlsUser/register - 注册

【新增,更新时间:2026-03-23】 手机号注册,需短信验证码校验通过。

入参

参数 类型 必填 说明
phone string 手机号
password string 前端加密后的密码
confirmPassword string 与 password 一致
smsCode string 短信验证码(module=register)
inviteUin int 邀请人 uin(固定参数名,用于邀请奖励)
username string 为空时自动生成为 138****1234 形式
wxUnionId string 微信 unionId
wxMpOpenId string 微信公众号 openId
wxMiniOpenId string 小程序 openId
avatar string 头像 URL
company string 单位
email string 邮箱
realname string 真实姓名

说明

  • 注册时会先调用外部账户服务创建底层账号并获取 uin
  • mls_user.password 入库使用 PASSWORD('{$password}')

12.4 /mls/mlsUser/changePassword - 已登录修改密码

【新增,更新时间:2026-03-23】 已登录用户修改密码(当前版本不要求旧密码)。

入参

参数 类型 必填 说明
token string 登录 token
uin int 用户 uin
newPassword string 前端加密后的新密码
confirmPassword string 与 newPassword 一致

12.5 /mls/mlsUser/resetPassword - 忘记密码重置

【新增,更新时间:2026-03-23】 未登录场景,通过手机号 + 短信验证码重置密码。

入参

参数 类型 必填 说明
phone string 手机号
password string 前端加密后的新密码
confirmPassword string 与 password 一致
smsCode string 短信验证码(module=password)

说明

  • 本接口为免登录接口
  • 校验短信验证码后更新密码(当前实现为直接写入前端加密值)

12.5.1 /mls/mlsUser/bindPhone - 绑定手机号(微信未绑定用户)

【新增,更新时间:2026-03-24】 适用于微信登录后账号未绑定手机号的场景。已被其他账号注册的手机号不允许绑定。

入参

参数 类型 必填 说明
token string 登录 token
phone string 待绑定手机号(11位)
smsCode string 短信验证码(module=login)

业务规则

  • 仅允许当前账号 phone 为空时绑定
  • 手机号格式必须符合 ^1\\d{10}$
  • 目标手机号必须未注册

返回示例

{
  "flag": 100,
  "flagString": "绑定成功"
}

12.5.2 /mls/mlsUser/changePhone - 修改手机号(已绑定用户)

【新增,更新时间:2026-03-24】 已登录且已有手机号的用户修改手机号。新手机号若已注册则不允许修改。

入参

参数 类型 必填 说明
token string 登录 token
newPhone string 新手机号(11位)
smsCode string 短信验证码(module=login)

业务规则

  • 当前账号必须已绑定手机号
  • 新手机号不能与当前手机号相同
  • 手机号格式必须符合 ^1\\d{10}$
  • 新手机号必须未注册

返回示例

{
  "flag": 100,
  "flagString": "修改成功"
}

12.5.2.1 /mls/mlsUser/updateAvatar - 修改头像

【新增,更新时间:2026-04-07】 已登录用户更新 mls_user.avatar。成功后刷新当前 token 对应的 Redis 会话,避免 getUserInfo 读到旧头像。

入参

参数 类型 必填 说明
token string 登录 token
avatar string 头像地址,需为 httphttps 链接,最大长度 255

返回示例

{
  "flag": 100,
  "flagString": "修改成功"
}

12.5.2.2 /mls/mlsUser/updateProfile - 修改基础资料

【更新时间:2026-04-07】 已登录用户更新资料字段:仅处理请求体里出现的键,未传的字段不修改。至少传下列之一:usernamerealnamecompanyemail。成功后刷新当前 token 的 Redis 会话。

说明:mls_user 表中 nickname 列,昵称使用 username 字段;本接口只接收参数名 username

入参

参数 类型 必填 说明
token string 登录 token
username string 用户昵称,对应库字段 username(最大 255)
realname string 真实姓名,最大 255
company string 单位,最大 255
email string 邮箱,最大 20(与表字段长度一致)

返回示例

{
  "flag": 100,
  "flagString": "修改成功"
}

12.5.3 /mls/mlsUser/getInviteRecordList - 邀请记录列表

【更新时间:2026-04-07】 分页查询当前用户邀请记录;列表项连表返回被邀请人基础信息;支持按状态、被邀请人、创建时间筛选。

说明:/mls/index 网关在校验 token 后会自动把当前登录用户的 uin 写入请求参数,业务侧按邀请人 uin 过滤;客户端一般只需传 token 及下方筛选参数。

入参

参数 类型 必填 说明
token string 登录 token
page int 页码,默认 1
num int 每页条数,默认 15,最大 100
status int 发奖状态:0 待发奖,1 已发奖;不传或 -1 查全部
inviteeUin int 被邀请人 uin;大于 0 时仅查该被邀请人记录
createTimeStart int 创建时间下限(Unix 秒),大于 0 时生效
createTimeEnd int 创建时间上限(Unix 秒),大于 0 时生效;与 createTimeStart 同时传时,开始不能大于结束

排序规则:create_time 倒序,id 倒序(同一时间戳下分页稳定)。

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": [
    {
      "id": 1,
      "inviter_uin": 1001,
      "invitee_uin": 2001,
      "reward_points": 2000,
      "status": 1,
      "create_time": 1710000000,//邀请时间,被邀请者注册时间
      "update_time": 1710000000,//更新时间(奖励发放时间)
      "invitee_username": "昵称或用户名",
      "invitee_avatar": "https://...",
      "invitee_company": ""
    }
  ],
  "total": 1
}

说明:invitee_usernameinvitee_avatarinvitee_company 来自 mls_user 左连接;未返回手机号等敏感字段。若用户无对应行则上述字段为 null


邀请功能 SQL 变更

邀请功能数据库变更脚本已提供在:

  • code/apaasTool/api/tool/mls_invite_schema.sql

包含:

  • mls_user_amount 新增 invite_reward_total
  • 新建 mls_user_invite_record(含 invitee_uin 唯一索引,防止重复发奖)

12.5.4 /mls/mlsUser/getUserConf - 获取用户配置

【新增,更新时间:2026-04-08】 获取用户配置。返回结构统一:始终返回 config(默认配置与用户配置合并结果)。

存储设计:mls_user_conf 表每个 uin 一条记录,config 字段为 JSON。接口返回为“默认配置 + 用户配置”的合并结果。

入参

参数 类型 必填 说明
token string 登录 token
type string 配置类型:languages / batch_review / duration_limit / all;默认 all

出参(统一结构)

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "uin": 1001,
    "type": "all",
    "config": {
      "languages": "basic",
      "batch_review": false,
      "duration_limit": 5
    }
  }
}

说明:

  • 不论 type 是否传入,data 都统一返回 config 字段
  • type=all(或不传)时,data.type 返回 all
  • type 传单项(如 duration_limit)时,data.type 返回该单项,但 config 仍返回全量配置
  • 默认值:languages=basicbatch_review=falseduration_limit=5
  • type 传不支持值时返回参数错误
  • batch_review:为 true 时,管道回调在成片成功时会先以 待审核(results.status=4) 写入任务(详见附录 A);管理端审核通过后再变为成功(2)并重算任务 resStatus

12.5.5 /mls/mlsUser/setMlsUserConf - 保存用户配置(需登录)

【新增,更新时间:2026-04-09】 按字段更新 mls_user_conf.config(JSON),与 getUserConf 的默认项对齐;可只传需要修改的键。

入参

参数 类型 必填 说明
token string 登录 token
config object 可含:languagesbasic/all)、batch_review(布尔)、duration_limit(1–10080 分钟整数);未传的键不修改

出参

成功时与 getUserConf 一致:data.uindata.typeall)、data.config(默认 + 用户配置合并结果)。

请求示例

{
  "token": "xxx",
  "config": {
    "batch_review": true,
    "duration_limit": 10
  }
}

12.6 /mls/tool/logout - 退出登录

【新增,更新时间:2026-03-23】 退出登录并删除 Redis 中 token 对应会话数据。

说明:12.1 ~ 12.5.3mlsUser.php 中接口,对应 mls/mlsUser 路由;12.6mls.php 中接口,对应 mls/tool 路由。

入参

参数 类型 必填 说明
token string 当前登录 token

返回示例

{
  "flag": 100,
  "flagString": "退出成功"
}

12.6.1 /mls/tool/getUserInfo - 获取当前登录用户信息

从 Redis 读取当前 token 对应的用户会话信息并返回。

入参

参数 类型 必填 说明
token string 登录后获得的 token(即 subToken)

返回结构

  • 已登录:返回 flag=100,并在 data 返回用户信息(字段为登录时从 mls_user 取出的字段,且不包含 password;会包含 TokenuserId)。
  • 未登录或 token 无效:返回:
    • flag=200
    • flagString="您还未登录"

返回示例(成功)

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "uin": 12345,
    "phone": "13800138000",
    "wxUnionId": "xxxx",
    "wxMpOpenId": "xxxx",
    "wxMiniOpenId": "xxxx",
    "avatar": "https://xxx/avatar.jpg",
    "company": "xxx",
    "email": "xxx",
    "parentId": "01",
    "parentUin": 0,
    "realname": "xxx",
    "username": "xxxx",
    "createTime": 1700000000,
    "Token": "当前 token",
    "userId": 12345
  }
}

返回示例(未登录)

{
  "flag": 200,
  "flagString": "您还未登录"
}

12.7 /mls/mlsUser/getWechatMpAuthUrl - 获取微信公众号授权链接

用于移动端 H5 进入微信 OAuth2 授权页。

入参

参数 类型 必填 说明
redirectUri string 微信授权回调地址;不传默认用环境变量 MLS_WECHAT_MP_CALLBACK_URL
scope string snsapi_basesnsapi_userinfo,默认 snsapi_userinfo
afterLoginUrl string 登录成功后跳转地址;若传,回调接口会 302 并追加 subToken
inviteUin int 邀请人 uin,会写入 state,供回调自动注册发奖使用

说明:

  • redirectUriafterLoginUrl 都会做域名校验:其 host 必须等于 DOMAIN 或属于其子域名。

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "authUrl": "https://open.weixin.qq.com/connect/oauth2/authorize?...",
    "scope": "snsapi_userinfo"
  }
}

12.7.1 /mls/mlsUser/getWechatJsSdkConfig - 微信 JS-SDK 签名(分享等)

前端在微信内置浏览器内引入 jssdk,调用 wx.config 前需向后端索取签名。本接口使用公众号 cgi-binaccess_token 换取 jsapi_ticket 并做 SHA1 签名(与网页 OAuth 的 access_token 不是同一类)。

入参

参数 类型 必填 说明
url string 当前页面完整 URL(不含 # 及哈希段;查询串需保留)。须与调用 wx.config 时所在页面 URL 一致,建议前端传 location.href.split('#')[0]

域名校验:url 的 host 必须等于环境变量 DOMAIN 或为其子域名(与 getWechatMpAuthUrlredirectUri 规则一致)。

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "appId": "wx...",
    "timestamp": 1710000000,
    "nonceStr": "abc123...",
    "signature": "sha1_hex..."
  }
}

前端示例:wx.config({ appId, timestamp, nonceStr, signature, jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData'] })(具体 API 以微信文档为准)。

说明:服务端会缓存 jsapi_ticket(Redis),避免频繁请求微信接口。


12.8 /mls/mlsUser/wechatMpLoginByCode - 微信 code 登录

前端已拿到微信 code 后,直接调用本接口换取 subToken
逻辑:微信已注册 => 直接登录;未注册 => 自动补全账号并登录(phone 为空,不再生成虚拟手机号)。

入参

参数 类型 必填 说明
code string 微信 OAuth2 返回的 code
scope string snsapi_basesnsapi_userinfo,默认 snsapi_userinfo
strictRegister int 1 时仅允许已注册微信登录(未注册报错);默认 0 自动注册
inviteUin int 邀请人 uin(仅新用户自动注册时生效)

返回示例

{
  "flag": 100,
  "flagString": "登录成功",
  "data": {
    "subToken": "md5_token_string"
  }
}

表结构说明:若要支持微信用户不填手机号,建议将 mls_user.phone 调整为可空,并按业务需要调整唯一索引(避免空值约束冲突)。


12.9 /mls/mlsUser/wechatMpAuthCallback - 微信授权回调

微信公众号后台 OAuth 回调地址。可直接返回 JSON;若 state 中携带了 afterLoginUrl,会自动 302 跳转并附带 subToken

入参

参数 类型 必填 说明
code string 微信回调 code
state string getWechatMpAuthUrl 返回的 state
scope string 默认 snsapi_userinfo

附录 A:OpenTool mls/updateMlsResult(管道结果回调,签名校验)

本接口走 openTool 网关(请求头 X-AccessIdX-TimeStampX-SignatureX-SignatureNonce 等,与项目内其他 openTool 接口一致),不是 /mls/index.php 的免登录路由。
本文档展开 openTool 鉴权细节;以下为业务字段与状态约定。

作用

多语言处理服务向业务侧回写某任务的各语种处理结果,合并写入 apaas.mls_list.results,并可能触发积分扣费。

请求体(JSON)

参数 类型 必填 说明
episodeId int 任务 ID
results array 或 string 各语种结果列表;可为 JSON 字符串。每项含 languagestatusuptimeurl

管道上报的 status 语义:0 待处理,1 处理中,2 成功,3 失败。

存储侧扩展:status = 4(待审核)

当任务所属用户的 mls_user_confbatch_review 为 true(读取结果带 Redis 缓存,约 5 分钟;用户在前台修改配置并保存后会清除该缓存)时:

  • 对本次回调中「新成功」的语种(该语种合并前在库中状态不是 2):入库时 status 记为 4(待审核),而不是 2。
  • 积分扣费仍按管道上报的 成功(2) 且「此前非成功」统计,与是否写入 4 无关
  • 若本请求中发生了上述 2→4 降级,则本次更新不修改 mls_list.resStatus(保持回调前任务总状态);其余情况按合并后的 results 重算 resStatus
  • resStatus 与单条 status 的汇总规则中,4 视为未结案(不视为已完成),直至该语种被置为 2(例如管理端审核通过)。

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "resStatus": 1,
    "deduct": true
  }
}
字段 说明
data.resStatus 写入后的任务总状态(若本次仅做待审核降级则可能仍为原值)
data.deduct 本次是否成功完成扣费流水

支付相关(商品 / 订单 / 微信与支付宝)

支付能力依赖系统环境变量配置,部署时在 Web 服务器或 PHP 环境中设置以下变量。

环境变量说明

  • 微信支付:使用 Pay SDK(pay-php-sdk)V2 接口(unifiedorder)。
  • 支付宝:扫码支付(当面付 precreate)与异步通知验签使用支付宝官方 EasySDK(alipaysdk/easysdk);电脑网站支付(form 跳转)仍使用 Pay SDK。环境变量与现有一致,无需变更。后续可扩展手机端唤起支付宝 App 支付(EasySDK 支持 Factory::payment()->app()->pay(...))。

微信支付

变量名 说明
MLS_WECHAT_APPID 公众号 AppID(JSAPI 与 NATIVE 共用)
MLS_WECHAT_MCH_ID 微信商户号
MLS_WECHAT_MCH_KEY 商户 API 密钥(32 位,在微信商户平台「API 安全」中设置)

微信公众号授权登录(H5)

变量名 说明
MLS_WECHAT_MP_APPID 公众号 AppID(未配置时回退使用 MLS_WECHAT_APPID
MLS_WECHAT_MP_SECRET 公众号 AppSecret(未配置时回退使用 MLS_WECHAT_APPSECRET
MLS_WECHAT_MP_CALLBACK_URL OAuth2 回调地址(可选,不传则默认 /mls/mlsUser/wechatMpAuthCallback

短信前置验证码(sendSmsCode 使用 captchaId 时)

变量名 说明
MLS_CAPTCHA_VERIFY_BASE 验证码服务端根地址(无末尾斜杠),例如 https://message.guangdianyun.tv。代码仅读取 $_SERVER['MLS_CAPTCHA_VERIFY_BASE'];与 服务端校验GET /v1/message/Captcha/query 所在域名一致;仅走图形码时可不配

说明:当前代码未引入专门“微信登录 SDK”,采用微信官方 OAuth2 接口(open.weixin.qq.comapi.weixin.qq.com)并在项目内做了轻量封装。

支付宝

变量名 说明
MLS_ALIPAY_APP_ID 支付宝应用 AppID
MLS_ALIPAY_PRIVATE_KEY 应用私钥 PEM 内容或文件路径
MLS_ALIPAY_PUBLIC_KEY 支付宝公钥 PEM 内容或文件路径(验签用)
MLS_ALIPAY_DEBUG 可选,非空时使用支付宝沙箱网关
MLS_ALIPAY_DEBUG_LOG 可选,非空时调试打印:每次请求支付宝的 URL 和完整参数会写入 PHP error_log,并追加到 log/alipay_request_YYYYMMDD.log(需目录可写)

上述支付宝环境变量同时用于 EasySDK(扫码、回调)与 Pay SDK(网页支付),配置一次即可。

支付宝报「验签出错 / isv.invalid-signature」时

  1. 登录 支付宝开放平台 → 控制台 → 你的应用 → 开发信息接口加签方式
  2. 确认已配置 应用公钥(与代码里用的 MLS_ALIPAY_PRIVATE_KEY 私钥成对):用该私钥导出公钥,在开放平台「设置应用公钥」处粘贴(通常为去掉 -----BEGIN/END PUBLIC KEY----- 和换行的一行)。
  3. 应用公钥是「我们自己的公钥」供支付宝验我们请求;支付宝公钥是「支付宝的公钥」供我们验回调,二者不要混用。
  4. 商品名称(subject)中不要含反斜杠 \、双引号等,否则可能造成签名字符串不一致;代码已对 subject 做过滤。

数据库

  • 支付表 mls_pay_data 需有字段 points(购买积分,下单时写入,回调时从该字段读积分更新到 mls_user_amount)。若尚未添加可执行:
ALTER TABLE mls_pay_data ADD COLUMN points int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '购买积分' AFTER amount;
  • 下单与支付仅使用 mls_pay_data,不再依赖 mls_order 表;若业务无需独立订单表,可不再使用或删除 mls_order

13. /mls/tool/getMlsGoodsList - 获取商品列表

获取已启用的 MLS 商品列表(用于下单前展示)。

入参

需登录,可无额外参数(传 token 即可)。

出参

字段 类型 说明
data.list array 商品数组,每项含 goodsIdgoodsNameamount(元)、pointspriceisPresetenable

14. /mls/tool/createMlsOrderAndPay - 下单并获取支付凭证(推荐)

一个接口完成下单 + 获取支付二维码/链接,前端只需请求一次即可拿到订单信息与支付数据。

入参

参数 类型 必填 说明
token string 登录 token
goodsId int 商品 ID(来自 getMlsGoodsList)
payType int 1 微信,2 支付宝
amount int 自定义商品必填 金额(元,1–3000 整数)
clientType string pc 默认;微信内传 wechat 走 JSAPI
openid string JSAPI 必填 用户 openid
returnUrl string 支付宝支付完成跳转地址(仅 alipayScene=page 时有效)
alipayScene string 支付宝 PC:scan(默认)返回 qr_code 扫码;page 返回 form_html 网页跳转

出参

返回为 订单信息 + 支付数据 合并:payDataIdoutTradeNoamountpayTypegoodsNamepointsexistingOrder(若有),以及按支付方式:

  • 微信 PCcode_url → 用二维码库生成二维码,用户微信扫码支付
  • 微信内 JSAPIappIdtimeStampnonceStrpackagesignTypepaySign → 调微信 JSSDK 调起支付
  • 支付宝 PC(默认)qr_code → 用二维码库生成二维码,用户打开支付宝 App 扫码支付
  • 支付宝 PC(网页跳转):传 alipayScene=page 时返回 form_html → 新窗口写入并提交:var w = window.open('', '_blank'); w.document.write(data.form_html); w.document.close();

15. /mls/tool/createMlsOrder - 下单

仅创建支付记录(mls_pay_data,含 points)。同账户同商品 2 小时内未支付则复用该支付单。返回 payDataIdoutTradeNo 等,用于后续调 submitMlsPay

入参

参数 类型 必填 说明
token string 登录 token
goodsId int 商品 ID(来自 getMlsGoodsList)
payType int 1 微信,2 支付宝
amount int 自定义商品必填 金额(元,1–3000 整数)

出参

字段 类型 说明
data.payDataId int 支付单主键,提交支付时传此值或 outTradeNo
data.outTradeNo string 商户订单号
data.amount int 金额(分)
data.payType int 1 微信,2 支付宝
data.goodsName string 商品名称
data.points int 购买积分

16. /mls/tool/submitMlsPay - 提交支付

根据下单结果调起支付:PC 端微信返回 code_url,支付宝默认返回 qr_code(扫码);传 alipayScene=page 时支付宝返回 form_html(网页跳转)。

入参

参数 类型 必填 说明
token string 登录 token
outTradeNo string 与 payDataId 二选一 商户订单号(createMlsOrder 返回)
payDataId int 与 outTradeNo 二选一 支付单主键(createMlsOrder 返回)
payType int 1 微信,2 支付宝
clientType string pc 默认;微信内请传 wechat 走 JSAPI
openid string JSAPI 必填 用户 openid(微信内授权获得)
returnUrl string 支付宝网页支付完成跳转(仅 alipayScene=page)
alipayScene string 支付宝 PC:scan(默认)返回 qr_codepage 返回 form_html

出参

按支付方式返回:

  • 微信 NATIVE(PC)data.code_url → 生成二维码,用户微信扫码
  • 微信 JSAPI(微信内)dataappIdtimeStampnonceStrpackagesignTypepaySign,用于前端调起微信支付
  • 支付宝扫码(默认)data.qr_code → 生成二维码,用户打开支付宝 App 扫码
  • 支付宝网页:传 alipayScene=page 时返回 data.form_html → 新窗口写入并提交:var w = window.open('', '_blank'); w.document.write(data.form_html); w.document.close();

支付完成回调(免登录)

由微信/支付宝服务器 POST 调用,无需 token。

  • 微信异步通知POST /mls/tool/wechatPayNotify(配置微信商户平台「支付结果通知 URL」为该地址)。
  • 支付宝异步通知POST /mls/tool/alipayPayNotify(下单时传入的 notify_url 为该地址)。

验签通过且订单状态为成功/完成后,系统会:

  1. 更新 mls_pay_data 状态,从该表 points 字段读取购买积分;
  2. 增加 mls_user_amount 额度并写入 mls_user_amount_run 流水(trade_type=2 积分充值);
  3. 向 DMS 推送一条消息,便于下游(如站内信、推送)处理。

前端域名引入域名:wss://mqttdms.{DOMAIN}:8300/mqtt,如:wss://mqttdms.jstest.aodianyun.cn.cn:8300/mqtt

DMS 推送内容

项目 说明
接口 messages/mls_pay_success_{uin}(uin 为支付用户)
请求体 body JSON 字符串,内容为:
{
  "uin": 123,
  "points": 1000,
  "tradeDesc": "积分充值",
  "payType": 1,
  "payDataId": 456,
  "status": 1,
  "message": "success"
}
字段 类型 说明
uin int 用户 uin
points int 本次到账积分
tradeDesc string 交易说明,如「积分充值」
payType int 1 微信,2 支付宝
payDataId int 支付单主键
status int 1 表示成功,2失败
message string “success”

17. /mls/tool/submitMlsPay - 上报操作日志

创建一条多语言输出任务,results 按 languages 自动初始化为待处理。

入参

参数 类型 必填 说明
token string 登录后获得的 token
moduleName string 模块名
actionName string 操作名
requestData string 请求详情介绍

出参

字段 类型 说明
flag int 100 成功,110 参数错误/数据库失败
flagString string 提示信息
data - 成功时无 data

请求示例

{
  "moduleName": "任务管理",
  "actionName": "下载",
  "requestData": "{\"type\":\"原片\"}", // 具体传有什么由前端自己定义,以json字符串的形式传递
  "token": "XXX"
}

返回示例

{
  "flag": 100,
  "flagString": "success"
}
最后编辑: 广电云技术部  文档更新时间: 2026-04-24 16:14   作者:广电云技术部