回调通知
合作方可在开放后台设置一个通用的API接口,用于与欢拓进行数据交换及回调操作
流程说明:
1、欢拓请求合作方接口
2、合作方获取POST过去的参数
3、调用SDK内部的 generateSign 方法生成签名,并校验签名是否合法
4、获取cmd参数,判断回调的业务类型并进行相应的处理
5、返回一个json结果数据,如果没有正常返回,欢拓将重试3次
协议说明
1、使用HTTP协议进行信息交互,字符编码统一采用UTF-8
2、除非特殊说明,接口地址统一为合作方填写的API接口地址
3、除非特殊说明,需同时支持GET和POST两种参数传递方式
4、除非特殊说明,返回信息为json格式
5、除了sign外,其余所有请求参数值都需要进行URL编码
6、参数表中,类型一栏声明的定义为:int 代表整数类型;string 代表字符串类型,如果后面有括号,括号中的数字代表该参数的最大长度;array表示数组类型
请求参数说明
名称 | 类型 | 描述 |
---|---|---|
openID | string | 合作方唯一标识码 |
timestamp | string | 当前Unix时间戳 |
cmd | string | 调用的api接口名称 |
params | string | 参数json格式字符串 |
ver | string | 协议版本号,统一 1.0 |
sign | string | 欢拓根据以上参数与openToken进行生成 |
sign生成规则可以分为4个步骤:
1、把其它所有参数按key升序排序。
2、把key和它对应的value拼接成一个字符串。按步骤1中顺序,把所有键值对字符串拼接成一个字符串。
3、把分配给的openToken拼接在第2步骤得到的字符串后面。
4、计算第3步骤字符串的md5值,使用md5值的16进制字符串作为sign的值。
返回参数说明
名称 | 类型 | 描述 |
---|---|---|
code | int | 状态值:0表示操作成功;其它值表示失败 |
msg | string | 状态说明 |
data | array | 返回具体信息 |
调用代码示例
PHP:
$handler = new ExampleHandler();
$handlerMethod = 'handler';
$MTCloud = new MTCloud();
$MTCloud->registerCallbackHandler(array($handler,$handlerMethod));
$MTCloud->callbackService();
class ExampleHandler {
function handler($cmd,$params){
if($cmd === 'live.start'){
...
}else if($cmd === 'live.stop'){
...
}
...
return $response;
}
}
Java:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.mtcloud.sdk.CommonResult;
import com.mtcloud.sdk.MTCloud;
@Controller
@RequestMapping(value = "/callback")
public class CallbackExampleAct {
@RequestMapping(value = "/api", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
@ResponseBody
public CommonResult callbackApi(HttpServletRequest request, HttpServletResponse response) {
//获取请求参数
Map<String, String> reqParams = new HashMap<String, String>();
reqParams.put("openID", request.getParameter("openID"));
reqParams.put("timestamp", request.getParameter("timestamp"));
reqParams.put("cmd", request.getParameter("cmd"));
reqParams.put("params", request.getParameter("params"));
reqParams.put("ver", request.getParameter("ver"));
//reqParams.put("sign", request.getParameter("sign"));
String sign = request.getParameter("sign");
MTCloud talkfunSDK = new MTCloud("My openID","My openToken");
if(!talkfunSDK.generateSign(reqParams).equals(sign)) {
//签名验证失败
return CommonResult.Builder.FAIL().initErrCodeAndMsg(MTCloud.CODE_SIGN_ERROR, "sign validate fail");
}
// 解析params
String jsonStr = URLDecoder.decode(reqParams.get("params"), "UTF-8");
JSONObject params = JSONObject.fromObject(jsonStr);
//签名验证成功
if(reqParams.get("cmd").equals("live.start")){
...
}else if(reqParams.get("cmd").equals("live.stop")){
...
}else{
...
}
return CommonResult.Builder.SUCC().initSuccCodeAndMsg(MTCloud.CODE_SUCCESS,"suc").initSuccData("response data");
}
}
直播状态事件通知
调用方式:
异步
1.直播开始
api名称:live.start
功能描述:通知直播开始
params参数说明:
名称 | 类型 | 描述 |
---|---|---|
title | string | 直播主题 |
liveid | string | 直播记录ID |
bid | string | 主播账号 |
thirdAccount | string | 第三方账号 |
roomid | string | 房间ID |
startTime | int | 直播开始时间 |
endTime | int | 直播结束时间 |
duration | int | 直播时长 |
course_id | int | 课程ID |
2.直播结束
api名称:live.stop
params参数说明:
同直播开始
3.直播回放生成
api名称:live.playback
params参数说明:
同直播开始
以及 增加 url 参数,url参数为直播回放页面地址4.上传文档
api名称:live.document.add
params参数说明:
名称 | 类型 | 描述 |
---|---|---|
id | int | 文档ID |
ext | string | 文件后缀 |
name | string | 文档名称 |
size | int | 文档大小 |
md5 | string | 文档md5 |
time | int | 文档上传时间 |
5.视频转码
api名称:video.convert
params参数说明:
名称 | 类型 | 描述 |
---|---|---|
videoId | int | 视频ID |
status | int | 转码状态,0转码成功,1转换中,3转换失败 |
filesize | int | 转换成功后的文件大小 |
convertMd5 | string | 转换后的文件MD5 |
doneTime | string | 转换成功时间 |
5.视频删除
api名称:video.delete
params参数说明:
名称 | 类型 | 描述 |
---|---|---|
videoId | int | 视频ID |