多语言短剧 MLS 接口文档(tool/mls)
文档更新时间:2026-04-09
调用路径 /mls/tool/xxx。需先登录(除另有说明的接口外)。除 index.php 中配置为免登录的接口(如 getToken、checkToken、login、generateCaptcha、sendSmsCode、register、resetPassword)外,其余接口均需传 token。本文档不包含 Tag、parentUin、userId 等由调用方/路由约定的参数。
请求约定:所有 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 决定(与 getUserConf 中 config.languages 一致):
basic(默认):仅id <= 12且满足enable条件的语言。all:enable条件下全部语言,不再限制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-upload、private-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\"}"
}
}
错误示例:service 非 material-upload 或 private-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.location 或 response.data.data?.location 为准(二者有一即可)。
分片与顺序
- 分片大小固定为 10MB(10 × 1024 × 1024 字节)。
- 最后一片可为不足 10MB 的剩余部分。
- 分片必须按
chunk从 0 到chunks-1顺序上传;全部片上传成功后,最后一片的响应中返回文件 URL。
前端实现要点(参考)
- 先请求
getMaterialAccess,拿到materialAccess(accessId、expireTime、signature、signatureNonce、filePrefix、diyParam)。 - 根据文件名后缀判断是否为视频(如
.mp4、.mkv),选择 DVR.FormUpload 或 MFS.APAAS.FormUpload。 - 使用
File.slice(start, end)切分 10MB 一片,循环上传;每片 FormData 带上表中所列签名参数及 chunk、chunks、name。 - 仅当
Flag === 100时视为成功;最后一片成功响应中的location或data.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_amount、reserved、available、invite_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
}
}
说明:扣费在 OpenTool 的 updateMlsResult 回调中触发:按「管道上报 成功(2) 且该语种此前非成功」逐条扣费(计费 = 时长秒 × 本次新增成功语种数 × 单价 10 积分/秒)。若用户开启成片审核(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按手机号处理(必须 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后直接调用sendSmsCode传captchaId,无需调用本接口。本接口为传统图形码,后续可能下线。
入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| check_key | string | 是 | 前端随机字符串,用于区分验证码会话 |
出参
返回 JPEG 图片流(content-type: image/jpeg),非 JSON。
12.2 /mls/mlsUser/sendSmsCode - 发送短信验证码
【更新时间:2026-04-07】 先发码前人机校验,支持两种方式(二选一):
- 滑块/行为验证码:传
captchaId(前端完成验证后获得的唯一 id)。服务端请求MLS_CAPTCHA_VERIFY_BASE+/v1/message/Captcha/query?captcha_id=...做二次校验,参见 广电云平台验证码·服务端校验。 - 传统图形验证码:传
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 | 否 | 单位 |
| 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 | 是 | 头像地址,需为 http 或 https 链接,最大长度 255 |
返回示例
{
"flag": 100,
"flagString": "修改成功"
}
12.5.2.2 /mls/mlsUser/updateProfile - 修改基础资料
【更新时间:2026-04-07】 已登录用户更新资料字段:仅处理请求体里出现的键,未传的字段不修改。至少传下列之一:username、realname、company、email。成功后刷新当前 token 的 Redis 会话。
说明:
mls_user表中无nickname列,昵称使用username字段;本接口只接收参数名username。
入参
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| token | string | 是 | 登录 token |
| username | string | 否 | 用户昵称,对应库字段 username(最大 255) |
| realname | string | 否 | 真实姓名,最大 255 |
| company | string | 否 | 单位,最大 255 |
| 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_username、invitee_avatar、invitee_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=basic、batch_review=false、duration_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 | 是 | 可含:languages(basic/all)、batch_review(布尔)、duration_limit(1–10080 分钟整数);未传的键不修改 |
出参
成功时与 getUserConf 一致:data.uin、data.type(all)、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.3为mlsUser.php中接口,对应mls/mlsUser路由;12.6为mls.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;会包含Token与userId)。 - 未登录或 token 无效:返回:
flag=200flagString="您还未登录"
返回示例(成功)
{
"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_base 或 snsapi_userinfo,默认 snsapi_userinfo |
| afterLoginUrl | string | 否 | 登录成功后跳转地址;若传,回调接口会 302 并追加 subToken |
| inviteUin | int | 否 | 邀请人 uin,会写入 state,供回调自动注册发奖使用 |
说明:
redirectUri与afterLoginUrl都会做域名校验:其 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 或为其子域名(与 getWechatMpAuthUrl 的 redirectUri 规则一致)。
返回示例
{
"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_base 或 snsapi_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-AccessId、X-TimeStamp、X-Signature、X-SignatureNonce等,与项目内其他 openTool 接口一致),不是/mls/index.php的免登录路由。
本文档不展开 openTool 鉴权细节;以下为业务字段与状态约定。
作用
多语言处理服务向业务侧回写某任务的各语种处理结果,合并写入 apaas.mls_list.results,并可能触发积分扣费。
请求体(JSON)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| episodeId | int | 是 | 任务 ID |
| results | array 或 string | 是 | 各语种结果列表;可为 JSON 字符串。每项含 language、status、uptime、url 等 |
管道上报的 status 语义:0 待处理,1 处理中,2 成功,3 失败。
存储侧扩展:status = 4(待审核)
当任务所属用户的 mls_user_conf 中 batch_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.com、api.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」时:
- 登录 支付宝开放平台 → 控制台 → 你的应用 → 开发信息 → 接口加签方式。
- 确认已配置 应用公钥(与代码里用的
MLS_ALIPAY_PRIVATE_KEY私钥成对):用该私钥导出公钥,在开放平台「设置应用公钥」处粘贴(通常为去掉-----BEGIN/END PUBLIC KEY-----和换行的一行)。 - 应用公钥是「我们自己的公钥」供支付宝验我们请求;支付宝公钥是「支付宝的公钥」供我们验回调,二者不要混用。
- 商品名称(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 | 商品数组,每项含 goodsId、goodsName、amount(元)、points、price、isPreset、enable 等 |
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 网页跳转 |
出参
返回为 订单信息 + 支付数据 合并:payDataId、outTradeNo、amount、payType、goodsName、points、existingOrder(若有),以及按支付方式:
- 微信 PC:
code_url→ 用二维码库生成二维码,用户微信扫码支付 - 微信内 JSAPI:
appId、timeStamp、nonceStr、package、signType、paySign→ 调微信 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 小时内未支付则复用该支付单。返回 payDataId、outTradeNo 等,用于后续调 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_code;page 返回 form_html |
出参
按支付方式返回:
- 微信 NATIVE(PC):
data.code_url→ 生成二维码,用户微信扫码 - 微信 JSAPI(微信内):
data含appId、timeStamp、nonceStr、package、signType、paySign,用于前端调起微信支付 - 支付宝扫码(默认):
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为该地址)。
验签通过且订单状态为成功/完成后,系统会:
- 更新
mls_pay_data状态,从该表points字段读取购买积分; - 增加
mls_user_amount额度并写入mls_user_amount_run流水(trade_type=2 积分充值); - 向 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"
}