简要描述

云学堂直播平台会对直播室的推流状态直播回看视频路径直播加会统计生成礼物赠送记录进行通知回调。

通知类型

通知类型 描述 通知体
SessionStatusChanged 直播会话状态改变时触发 UTF8的Json结构体
StreamingStatusChanged 直播流状态改变时触发 UTF8的Json结构体
RecordFileGenerated 录制文件生成时触发 UTF8的Json结构体
GiftPrecentDetail 礼物赠送记录直播结束时触发 UTF8的Json结构体
AttendeeStatisticsGenerated 加会纪录生成触发 UTF8的Json结构体

通知格式

通过HTTP或者HTTPS请求将通知消息POST到配置的通知接口

公共字段说明

名称 类型 描述
roomId String 直播间id
sessionId String 直播场次id
notifyTime String 回调时间 yyyy-MM-ddThh:mm:ssZ
type String 回调类型(SessionStatusChanged-状态改变、StreamingStatusChanged-状态改变、RecordFileGenerated-录像文件生成记录、GiftPrecentDetail-直播礼物赠送记录、AttendeeStatisticsGenerated-直播加会统计生成通知)
sign String 签名(详见签名算法)
body Object 消息体,详见Body体字段说明

Body体字段说明

类型:SessionStatusChanged 或 StreamingStatusChanged, 直播会话状态或直播流状态改变时触发
名称 类型 描述
body.previous String 改变前状态(ONGOING-直播中;STREAMING-直播中;NO_SOURCE-无直播源;READY-就绪;PAUSED-暂停)
body.current String 改变后状态(ONGOING-直播中;STREAMING-直播中;NO_SOURCE-无直播源;READY-就绪;PAUSED-直播流结束;ZHIBO_CLOSED-直播结束)

响应Body体示例

  1. {
  2. "roomId": "3dec025c-49a0-4f15-921b-836cf8532271",
  3. "sessionId": "7f8e8ddf-48d5-4876-9a17-c298e00c8fd9",
  4. "body": {
  5. "previous": "READY",
  6. "current": "ONGOING"
  7. },
  8. "notifyTime": "2017-01-10T01:29:04Z",
  9. "type": "SessionStatusChanged",
  10. "sign": "5f4ee21fc17c42c583a470509cf235fd"
  11. }

  1. {
  2. "roomId": "3dec025c-49a0-4f15-921b-836cf8532271",
  3. "sessionId": "7f8e8ddf-48d5-4876-9a17-c298e00c8fd9",
  4. "body": {
  5. "previous": "NO_SOURCE",
  6. "current": "STREAMING"
  7. },
  8. "notifyTime": "2017-01-10T01:29:04Z",
  9. "type": "StreamingStatusChanged",
  10. "sign": "5f4ee21fc17c42c583a470509cf235fd"
  11. }
类型:RecordFileGenerated, 录制文件生成时触发
名称 类型 描述
body.bucket String bucket标识
body.key String 录制文件储存地址
body.createTime String 录制文件生成时间
body.format String 录制文件格式
body.recordingFile Object 回看文件信息
body.recordingFile.filePath String 回看文件地址,如:https://ljliveo-test.yxt.com/play-test.yunxuetang.com.cn/app90/1e428fce90864cb588364a8c49fa7c11/recording_20161230164845_20161230164849.mp4
body.recordingFile.duration long 录像时长,单位:秒(s)
body.recordingFile.startTime String 录像开始时间,如:2016-12-29 09:21:33
body.recordingFile.endTime String 录像结束时间,如:2016-12-29 09:23:31

响应Body体示例

  1. {
  2. "roomId": "3dec025c-49a0-4f15-921b-836cf8532271",
  3. "sessionId": "7f8e8ddf-48d5-4876-9a17-c298e00c8fd9",
  4. "body": {
  5. "bucket": "yxtliveo-test",
  6. "key": "play-test.yunxuetang.com.cn/app90/3dddb5c985dc4c15aca62e2fc6734ab8/recording_20170110092905_20170110094520.mp4",
  7. "createTime": "2017-01-10T01:45:33Z",
  8. "format": "mp4",
  9. "recordingFile": {
  10. "duration": 54,
  11. "endTime": "2017-04-12 17:39:59",
  12. "filePath": "https://ljliveo-test.yxt.com/play-test.yunxuetang.com.cn/app90/556dd52a77cb49f68bb9431a1d93405d/recording_20170412173905_20170412173959.mp4",
  13. "startTime": "2017-04-12 17:39:05"
  14. }
  15. },
  16. "notifyTime": "2017-01-10T01:45:33Z",
  17. "type": "RecordFileGenerated",
  18. "sign": "5f4ee21fc17c42c583a470509cf235fd"
  19. }
类型:GiftPrecentDetail, 礼物赠送记录直播结束时触发
名称 类型 描述
body.datas[].pid String 赠送记录pid
body.datas[].giftId String 礼物pid
body.datas[].giftName String 礼物名称
body.datas[].sessionId String 直播场次id
body.datas[].unitPoint int 单价积分
body.datas[].prdPoint int 使用产线积分
body.datas[].fromUserId String 推流或观看客户端系统版本
body.datas[].toUserId String 推流或观看客户端版本号
body.datas[].quantity int 赠送数量
body.datas[].totalPoint int 总积分(产线可忽略)
body.datas[].createTime String 赠送发生时间

响应Body体示例

  1. {
  2. "roomId": "2a51eb78-9d65-49cc-bc7f-3ccb182dde47",
  3. "sessionId": "7f8e8ddf-48d5-4876-9a17-c298e00c8fd9",
  4. "body": {
  5. "datas": [
  6. {
  7. "createTime": "2017-06-20 12:06:04.0",
  8. "fromUserId": "fddd324b-16f9-43b4-96ad-16a91e31133f",
  9. "giftId": "33d8eed4-a983-4776-b2a3-2d374e5432d5",
  10. "giftName": "火箭",
  11. "pid": "aa308c6f-3f85-4d7e-8d51-fb8ed9130c56",
  12. "prdPoint": 500,
  13. "quantity": 1,
  14. "sessionId": "8c593e4e-2fac-4965-a64b-c42632a8ed8d",
  15. "toUserId": "5a23d8f1-6f92-44a2-85c3-e4e3e01ed4ad",
  16. "totalPoint": 500,
  17. "unitPoint": 500
  18. },
  19. {
  20. "createTime": "2017-06-20 12:05:59.0",
  21. "fromUserId": "fddd324b-16f9-43b4-96ad-16a91e31133f",
  22. "giftId": "33d8eed4-a983-4776-b2a3-2d374e5432d5",
  23. "giftName": "火箭",
  24. "pid": "f72b380e-fe44-40b1-aa46-da836107cfd3",
  25. "prdPoint": 500,
  26. "quantity": 1,
  27. "sessionId": "8c593e4e-2fac-4965-a64b-c42632a8ed8d",
  28. "toUserId": "5a23d8f1-6f92-44a2-85c3-e4e3e01ed4ad",
  29. "totalPoint": 500,
  30. "unitPoint": 500
  31. }
  32. ]
  33. },
  34. "notifyTime": "2017-06-20 12:06:25",
  35. "type": "GiftPrecentDetail",
  36. "sign": "33C55FEDF212CA967BE317A03798BA4B"
  37. }
类型:AttendeeStatisticsGenerated, 加会纪录生成触发

Body空,收到通知请通过API:产线获取某直播间参会签到明细(http://open.ljlive.cn/23 ) 获取

响应Body体示例

  1. {
  2. "roomId": "3dec025c-49a0-4f15-921b-836cf8532271",
  3. "sessionId": "7f8e8ddf-48d5-4876-9a17-c298e00c8fd9",
  4. "body": {},
  5. "notifyTime": "2017-01-10T01:29:04Z",
  6. "type": "AttendeeStatisticsGenerated",
  7. "sign": "5f4ee21fc17c42c583a470509cf235fd"
  8. }

签名算法

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:

  1. 参数名ASCII码从小到大排序(字典序);
  2. 如果参数的值为空不参与签名;
  3. 参数名区分大小写;
  4. 验证调用返回,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

第二步,在stringA最后拼接上key(每个机构的sk)得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

详情参见微信支付签名算法:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3

修改历史

  • 2018-02-12 增加回调字段:sessionId