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

文档更新时间:2026-06-12

线上文档基址:https://doc.guangdianyun.tv/docs/b-ym(本文以该页为基准同步至仓库;代码块使用 json 语法高亮。线上原文末尾错误的「### 17. submitMlsPay」段落已剔除。)

免登录接口的完整列表以网关 code/apaasTool/mls/index.php 中常量 NO_TOKEN_CMDS 为准;与下表「附录 B」交叉核对。

调用路径:/mls/tool/xxx/mls/mlsUser/xxx(由 server 参数 tool/命令mlsUser/命令 决定)。除下文附录 B所列及另有说明外,一般需传 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 部分列表接口返回总条数

【2026-06-11 变更摘要】任务类型(mode_type)与非全流程

  • 任务支持多种处理类型mode_type),配置来自表 mls_mode_type,接口 getMlsModeTypeList 拉取(含单价、是否需选语种)。
  • 创建任务新增入参 mode_type(默认 full_pipeline);是否必填 languages 由类型的 requires_language 决定。
  • 任务新增字段:mode_typejob_id(新任务为 32 位 hex;老数据默认 001)。priority 为保留字段,前端不可传。
  • getUserMlsList / getMlsDetail 额外返回 jobResource(中间产物,结构见下文)。
  • 计费所需积分 = 时长(秒) × 计费倍数 × price_per_second;需选语种时倍数 = 语种数,否则倍数 = 1。预占额度按任务 mode_type 计算。
  • updateMlsTask:不需选语种的类型不允许修改 languages
  • retryMlsTask:每次重试生成新 job_id 并返回;不需选语种的类型仅重置任务状态。

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
      }
    ]
  }
}

1.1 /mls/tool/getMlsModeTypeList - 获取任务类型列表

获取 MLS 可创建的任务类型(读 mls_mode_type 表,服务端 Redis 缓存约 1 小时)。创建任务前先调此接口,用于渲染类型下拉、控制是否展示语种选择、展示单价说明。

入参

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

出参

字段 类型 说明
flag int 100 成功
flagString string 提示信息
data array 类型列表,按 sort 升序
data[].mode_type string 类型编码,创建任务时传 mode_type
data[].mode_name string 展示名称
data[].price_per_second int 积分单价(积分/秒)
data[].requires_language bool 创建时是否必须选择输出语种
data[].remark string 备注说明

当前默认类型(以库配置为准)

mode_type mode_name price_per_second requires_language
full_pipeline 全流程 10
subtitle_erase_dialog 字幕擦除-对话 3
subtitle_erase_dialog_art 字幕擦除-对话+艺术字 6

请求示例

{
  "token": "xxx"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": [
    {
      "mode_type": "full_pipeline",
      "mode_name": "全流程",
      "price_per_second": 10,
      "requires_language": true,
      "remark": "多语言全流程输出,按语种数计费"
    },
    {
      "mode_type": "subtitle_erase_dialog",
      "mode_name": "字幕擦除-对话",
      "price_per_second": 3,
      "requires_language": false,
      "remark": "不需选语种"
    }
  ]
}

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

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

【2026-06-11 变更】每条任务额外返回 mode_typejob_idjobResource(中间资源产物,结构同 OpenTool getMlsJobResource.data)。

入参

参数 类型 必填 说明
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 表一条记录
data[].mode_type string 任务类型,默认 full_pipeline
data[].job_id string 任务实例 id;新任务为 32 位 hex,老数据可能为 001
data[].jobResource object 中间资源产物,按语种分组,见下方结构说明
total int 符合条件的总条数

jobResource 结构说明(仅 fileStatus=1 的成功资源):

{
  "original": {
    "subtitle": { "url": "https://xxx/chat.srt", "uptime": 1798732799 },
    "voice": { "url": "https://xxx/voice.wav", "uptime": 1798732799 }
  },
  "english": {
    "subtitle": { "url": "https://xxx/en.srt", "uptime": 1798732799 }
  }
}
  • 外层 key 为语种(原文字幕等为 original)。
  • 内层 key 为资源类型 fileType(如 subtitlevoiceaudioRawasrSubtitlecloneVoice 等)。
  • 每项含 urluptime(秒级时间戳)。

请求示例

{
  "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",
      "mode_type": "full_pipeline",
      "job_id": "e8457f8f008a241deb9934929518561d",
      "duration": 0,
      "resStatus": 0,
      "results": "[{\"language\":\"zh\",\"status\":0,\"uptime\":0,\"url\":\"\"}]",
      "thumbnail": "https://1.jpg",
      "jobResource": {
        "original": {
          "subtitle": { "url": "https://xxx/chat.srt", "uptime": 1798732799 }
        }
      },
      "is_del": 0,
      "create_time": 1770447600,
      "uptime": 1770447600
    }
  ],
  "total": 10
}

非全流程且不需选语种的类型:languages 可能为空字符串,results 可能为 []jobResource 仍可能有中间产物。

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

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


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

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

【2026-06-11 变更】data 额外包含 mode_typejob_idjobResource,含义与 §2 getUserMlsList 一致。

入参

参数 类型 必填 说明
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",
    "mode_type": "full_pipeline",
    "job_id": "e8457f8f008a241deb9934929518561d",
    "duration": 0,
    "resStatus": 0,
    "results": "[{\"language\":\"zh\",\"status\":0,\"uptime\":0,\"url\":\"\"}]",
    "jobResource": {
      "original": {
        "subtitle": { "url": "https://xxx/chat.srt", "uptime": 1798732799 }
      }
    },
    "is_del": 0,
    "create_time": 1770447600,
    "uptime": 1770447600
  }
}

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

创建一条多语言输出任务。mode_type 决定计费规则及是否必选 languages;需选语种时 resultslanguages 初始化为待处理,否则 results[]

入参

参数 类型 必填 说明
token string 登录后获得的 token
title string 任务标题
origin_url string 视频源地址
mode_type string 任务类型,默认 full_pipeline;合法值见 getMlsModeTypeList
languages string 条件必填 输出语种逗号分隔,如zh,en;当类型 requires_language=true 时必填
duration int 视频时长(秒);实际以源视频解析为准,入参可忽略

出参

字段 类型 说明
flag int 100 成功,110 参数错误/额度不足/数据库失败
flagString string 提示信息
data object 成功时包含
data.episodeId int 新建任务 ID
data.job_id string 本次任务实例 id(32 位 hex,重试后会变更)
data.mode_type string 实际写入的任务类型

请求示例(全流程)

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

请求示例(非全流程,不需选语种)

{
  "token": "xxx",
  "title": "字幕擦除任务",
  "origin_url": "http://xxx/source.mp4",
  "mode_type": "subtitle_erase_dialog"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "episodeId": 1,
    "job_id": "e8457f8f008a241deb9934929518561d",
    "mode_type": "full_pipeline"
  }
}

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

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

【2026-06-11 变更】若任务类型 requires_language=false(不需选语种),传 languages 将返回错误「当前任务类型不允许修改语种」。

入参

参数 类型 必填 说明
token string 登录后获得的 token
episodeId int 任务 ID(表字段 episodeId),兼容历史id入参
title string 新标题
languages string 输出语种逗号分隔;仅 requires_language=true 的类型可传

出参

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

请求示例

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

返回示例

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

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

对失败或未完成的任务重试。每次重试均生成新的 job_id 并在响应中返回。

  • 需选语种requires_language=true,含全流程):逻辑与原先一致——不传 languages 时重置所有非成功语种;传入时仅重置指定语种。resStatus 置为 0。
  • 不需选语种:仅将 resStatus 置为 0 并更新 job_id,不修改 results

任务已完成(resStatus=3)时不可重试。

入参

参数 类型 必填 说明
token string 登录后获得的 token
episodeId int 任务 ID(表字段 episodeId)
languages string 要重试的语种,逗号分隔;仅 requires_language=true 时有效

出参

字段 类型 说明
flag int 100 成功,110 参数错误/记录不存在或无权限/任务已完成无需重试/重试失败/所选语言已完成
flagString string 提示信息
data object 成功时包含
data.job_id string 重试后的新任务实例 id

请求示例

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

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": {
    "job_id": "a1b2c3d4e5f6789012345678abcdef01"
  }
}

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:)。

请求方式

  • Method:POST
  • Content-Type:multipart/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)的预占额度

【2026-06-11 变更】预占按每条待处理任务的 mode_typelanguages 计算:时长 × (需选语种 ? 语种数 : 1) × 单价,单价见 getMlsModeTypeList(全流程默认 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)。

【2026-06-11 变更】计费规则按 mode_type 区分(配置见 getMlsModeTypeList):

  • 公式required = duration × bill_multiplier × price_per_second(整数,无小数)
  • bill_multiplier:类型 requires_language=true 时为 max(语种数, 1),否则为 1
  • 预占:与 getMlsAmount 相同,按待处理任务各自的 mode_type 累加

全流程示例:120 秒 × 2 语种 × 10 = 2400 积分。
非全流程示例(subtitle_erase_dialog):120 秒 × 1 × 3 = 360 积分。

入参

参数 类型 必填 说明
token string 登录后获得的 token
duration int 视频时长,单位秒
mode_type string 任务类型,默认 full_pipeline
languages string 二选一 输出语种逗号分隔;requires_language=true 时必填其一
languageCount int 二选一 输出语言数量

出参

字段 类型 说明
flag int 100 成功,110 参数/额度异常(含 mode_type 无效)
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 × bill_multiplier
data.language_count int 语种数(不需选语种时可能为 0)
data.mode_type string 本次校验使用的任务类型

请求示例(全流程)

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

请求示例(非全流程)

{
  "token": "xxx",
  "duration": 120,
  "mode_type": "subtitle_erase_dialog"
}

返回示例

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

说明:扣费在 OpenTool 回调中触发——全流程 updateMlsResult 按语种成功逐条扣费;非全流程 updateMlsJobStatus 任务成功时扣一次。若用户开启成片审核(mls_user_conf.batch_review=true),全流程成功结果可能以 status=4(待审核)入库,扣费规则不变;详见附录 A。deductMlsAmount 为内部逻辑,不单独对外暴露。


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为纯数字且不符合手机号格式时,按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.2.3 /mls/mlsUser/getMlsI18nLocaleList - 获取 App 界面语言列表

【新增,更新时间:2026-05-09】从 apaas.mls_admin_ui_locale 读取界面国际化可选语言(语言名称 + 语言码),供 App 语言切换展示。与 1 getSupportLanguageList(任务翻译语种、mls_languages + mls_user_conf)数据源与用途不同。

登录:本命令不在网关 NO_TOKEN_CMDS 中,须传有效 token(与其它需登录的 mlsUser 接口一致)。

查询条件:enable = 1。排序:sort_order 升序NULL 会排在 MySQL 默认顺序中,配置时请填具体序号)。

入参

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

出参

字段 类型 说明
flag int 100 成功
flagString string 提示信息
data array 语言行列表;无数据时为 []。每项仅含表字段:locale_codelocale_name

请求示例

{
  "token": "xxx"
}

返回示例

{
  "flag": 100,
  "flagString": "success",
  "data": [
    {
      "locale_code": "zh-CN",
      "locale_name": "简体中文"
    },
    {
      "locale_code": "en-US",
      "locale_name": "English"
    }
  ]
}

12.5.2.4 /mls/mlsUser/updateUserLocale - 更新用户界面语言码

【新增,更新时间:2026-05-09】已登录用户更新 apaas.mls_user.locale_code。入参语言码须在 mls_admin_ui_locale 中存在且 enable = 1。成功后调用 refreshMlsUserRedisSession,刷新当前 token 对应 Redis 会话,保证 getUserInfo 读到最新 locale_code

登录:须传 tokenuin 由网关在校验 token 后注入,客户端一般无需在 body 重复传 uin

入参

参数 类型 必填 说明
token string 登录 token
locale_code string getMlsI18nLocaleList 返回的某条 locale_code 一致

出参

flag 说明
100 flagString 一般为「更新成功」
110 参数错误(uin 无效或 locale_code 为空)、语言不支持(不在启用配置中)、或数据库更新失败

请求示例

{
  "token": "xxx",
  "locale_code": "zh-CN"
}

返回示例

{
  "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;网关校验通过后注入当前用户 uin
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.6 /mls/tool/logout - 退出登录

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

说明:路径为 /mls/mlsUser/... 且本章已列出的接口由 mlsUser.php 实现;12.6 logout 等为 mls.php,路径为 /mls/tool/...

入参

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

返回示例

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

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

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

入参

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

返回结构

未登录或 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,
    "locale_code": "zh-cn",
    "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-bin 的access_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

附录 B:NO_TOKEN_CMDS 免登录接口与本文档对照

以下与网关 code/apaasTool/mls/index.phpNO_TOKEN_CMDS 逐项对齐。说明:

  • 免登录指网关不强制校验 token;部分接口仍可根据业务在请求体传 token(如 shareMlsWorks 带 token 可记录分享用户)。
Tag(server 第二段) 典型路径 文档位置 备注
getToken /mls/tool/getToken 未成章 当前仓库 tool/mls.php 未见 getToken 方法,若线上仍配置则可能返回「接口不存在」
checkToken /mls/tool/checkToken 未成章 mls::checkToken,用于校验 token 是否有效
login /mls/tool/login 12
wechatPayNotify /mls/tool/wechatPayNotify 支付完成回调 微信服务器回调,免登录
alipayPayNotify /mls/tool/alipayPayNotify 支付完成回调 支付宝异步通知,免登录
generateCaptcha /mls/mlsUser/generateCaptcha 12.1
sendSmsCode /mls/mlsUser/sendSmsCode 12.2
register /mls/mlsUser/register 12.3
resetPassword /mls/mlsUser/resetPassword 12.5
getWechatMpAuthUrl /mls/mlsUser/getWechatMpAuthUrl 12.7
getWechatJsSdkConfig /mls/mlsUser/getWechatJsSdkConfig 12.7.1
wechatMpLoginByCode /mls/mlsUser/wechatMpLoginByCode 12.8
wechatMpAuthCallback /mls/mlsUser/wechatMpAuthCallback 12.9
getWorksFeed /mls/tool/getWorksFeed 未成章 首页公开作品流;可选带 token 以返回 isLiked
shareMlsWorks /mls/tool/shareMlsWorks 未成章 分享统计;可不传 token(游客 userId=0),见 index.phpshareMlsWorks 的特殊处理
reportMlsWorksStat /mls/tool/reportMlsWorksStat 未成章 作品统计上报;可不传 token

已下线(2026-06-12,临时 MLS 管理页)getMlsTaskListapproveMlsResultReviewgetMlsUserConfsetMlsUserConfgetMlsAccessForUin。对应能力改由管理后台或其它服务提供;网关 NO_TOKEN_CMDS 与业务实现均已移除。


附录 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(若有),以及按支付方式:

  • 微信 PC:code_url→ 用二维码库生成二维码,用户微信扫码支付
  • 微信内 JSAPI:appIdtimeStampnonceStrpackagesignTypepaySign→ 调微信 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/collectOperationLog - 上报操作日志

已登录用户上报前端操作行为;网关 mls/index.php 在校验 token 后转发。成功后将异步 POST 至 OPERATION_HOST 下的采集服务(见 code/apaasTool/mls/operation_log.inc.php)。

入参

参数 类型 必填 说明
token string 登录 token
moduleName string 模块名
actionName string 操作名
requestData string 请求详情,建议为 JSON 字符串(由前端自定义结构)
apiPath string 接口路径;不传时网关默认 /api/mls/ + 当前路由

出参

字段 类型 说明
flag int 100 成功,110 参数错误
flagString string 提示信息

请求示例

{
  "token": "xxx",
  "moduleName": "任务管理",
  "actionName": "下载",
  "requestData": "{\\"type\\":\\"原片\\"}"
}

返回示例

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