tencent cloud

实时音视频

动态与公告
产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明
产品简介
产品概述
基本概念
产品功能
产品优势
应用场景
性能数据
购买指南
计费概述
免费时长说明
月订阅
现收现付
TRTC 逾期与暂停政策
常见问题解答
退款说明
新手指引
Demo 体验
视频通话 SDK
组件介绍
开通服务
跑通 Demo
快速接入
离线唤醒
会话聊天
云端录制
AI 降噪
界面定制
Chat 集成通话能力
更多特性
无 UI 集成
服务端 API
客户端 API
解决方案
错误码表
发布日志
常见问题
视频会议 SDK
组件介绍(TUIRoomKit)
开通服务(TUIRoomKit)
跑通 Demo(TUIRoomKit)
快速接入(TUIRoomKit)
屏幕共享(TUIRoomKit)
预定会议(TUIRoomKit)
会中呼叫(TUIRoomKit)
界面定制(TUIRoomKit)
虚拟背景(TUIRoomKit)
会议控制(TUIRoomKit)
云端录制(TUIRoomKit)
AI 降噪(TUIRoomKit)
会中聊天(TUIRoomKit)
机器人推流(TUIRoomKit)
更多特性(TUIRoomKit)
客户端 API(TUIRoomKit)
服务端 API(TUIRoomKit)
常见问题(TUIRoomKit)
错误码 (TUIRoomKit)
SDK更新日志(TUIRoomKit)
直播与语聊 SDK
Live 视频直播计费说明
组件介绍
开通服务(TUILiveKit)
跑通 Demo
无 UI 集成
UI 自定义
直播监播
视频直播
语聊房
高级功能
客户端 API
服务端 API
错误码
发布日志
常见问题
RTC Engine
开通服务
SDK 下载
API-Example
接入指引
API-参考手册
高级功能
AI 集成
概述
MCP 配置
Skills 配置
集成指南
常见问题
RTC RESTFUL API
History
Introduction
API Category
Room Management APIs
Stream mixing and relay APIs
On-cloud recording APIs
Data Monitoring APIs
Pull stream Relay Related interface
Web Record APIs
AI Service APIs
Cloud Slicing APIs
Cloud Moderation APIs
Making API Requests
Call Quality Monitoring APIs
Usage Statistics APIs
Data Types
Appendix
Error Codes
控制台指南
应用管理
套餐包管理
用量统计
监控仪表盘
开发辅助
解决方案
实时合唱
常见问题
迁移指南
计费相关
功能相关
UserSig 相关
应对防火墙限制相关
缩减安装包体积相关
Andriod 与 iOS 相关
Web 端相关
Flutter 相关
Electron 相关
TRTCCalling Web 相关
音视频质量相关
其他问题
旧版文档
RTC RoomEngine SDK(旧)
集成 TUIRoom (Web)
集成 TUIRoom (Android)
集成 TUIRoom (iOS)
集成 TUIRoom (Flutter)
集成 TUIRoom (Electron)
TUIRoom API 查询
实现云端录制与回放(旧)
监控仪表盘计费(旧)
协议与策略
安全合规认证
安全白皮书
信息安全说明
服务等级协议
苹果隐私策略:PrivacyInfo.xcprivacy
TRTC 政策
隐私协议
数据处理和安全协议
词汇表

云端录制和页面录制回调

PDF
聚焦模式
字号
最后更新时间: 2025-08-06 14:24:32
本文针对 新版云端录制功能页面录制功能 的回调事件进行具体说明。

配置信息

Tencent RTC 控制台 支持自助配置回调信息,配置完成后即可接收事件回调通知。



注意:
您需要提前准备以下信息并在控制台完成 回调配置
必要项:接收回调通知的 HTTP/HTTPS 服务器地址。
可选项计算签名的密钥 key,由您自定义一个最大32个字符的 key,以大小写字母及数字组成。

超时重试

事件回调服务器在发送消息通知后,5秒内没有收到您的服务器的响应,即认为通知失败。首次通知失败后会立即重试,后续失败会以10秒的间隔继续重试,直到消息存续时间超过1分钟,不再重试。

回调接口

您可以提供一个接收回调的 HTTP/HTTPS 服务网关来订阅回调消息。当相关事件发生时,云录制系统会回调事件通知到您的消息接收服务器。

事件回调消息格式

事件回调消息以 HTTP/HTTPS POST 请求发送给您的服务器,其中:
字符编码格式:UTF-8。
请求:body 格式为 JSON。
应答:HTTP STATUS CODE = 200,服务端忽略应答包具体内容,为了协议友好,建议客户应答内容携带 JSON: {"code":0}。

云端录制参数说明

事件回调消息的 header 中包含以下字段:

字段名
Content-Type
application/json
Sign
签名值
SdkAppId
sdk application id

事件回调消息的 body 中包含以下字段:

字段名
类型
含义
EventGroupId
Number
事件组 ID, 云端录制固定为3
EventType
Number
回调通知的事件类型
CallbackTs
Number
事件回调服务器向您的服务器发出回调请求的 Unix 时间戳,单位为毫秒
EventInfo
JSON Object
事件信息

事件类型说明:

字段名
类型
含义
EVENT_TYPE_CLOUD_RECORDING_RECORDER_START
301
云端录制录制模块启动
EVENT_TYPE_CLOUD_RECORDING_RECORDER_STOP
302
云端录制录制模块退出
EVENT_TYPE_CLOUD_RECORDING_UPLOAD_START
303
云端录制文件上传任务启动,仅在选择对象存储时回调
EVENT_TYPE_CLOUD_RECORDING_FILE_INFO
304
云端录制 生成 m3u8 索引文件,第一次生成并且上传成功后回调,仅在通过 API 录制 选择对象存储时回调
EVENT_TYPE_CLOUD_RECORDING_UPLOAD_STOP
305
云端录制文件上传结束,仅在选择对象存储时回调
EVENT_TYPE_CLOUD_RECORDING_FAILOVER
306
云端录制发生迁移,原有的录制任务被迁移到新负载上时触发
EVENT_TYPE_CLOUD_RECORDING_FILE_SLICE
307
云端录制 生成 m3u8 索引文件(切出第一个 ts 切片)生成后回调,仅在通过 API 录制 选择对象存储时回调
EVENT_TYPE_CLOUD_RECORDING_DOWNLOAD_IMAGE_ERROR
309
云端录制下载解码图片文件发生错误
EVENT_TYPE_CLOUD_RECORDING_MP4_STOP
310
云端录制 MP4 录制任务结束,仅在通过 API录制 选择对象存储时回调(控制台开启自动录制,选择授权给点播的 cos 作为存储时,请关注311事件)
EVENT_TYPE_CLOUD_RECORDING_VOD_COMMIT
311
云端录制 VOD 录制任务上传媒体资源完成,在选择云点播时和通过控制台自动录制存储至 cos 时回调(录制文件结束后携带点播索引信息,请订阅此类型回调事件)
EVENT_TYPE_CLOUD_RECORDING_VOD_STOP
312
云端录制 VOD 录制任务结束,仅在选择云点播时回调
注意:
301-309区间的回调状态为实时录制的中间状态,可以更加清晰的知晓录制任务的进行过程并记录状态,实际录制文件上传到点播成功会回调311事件,整体任务结束回调312事件。

事件信息说明:

字段名
类型
含义
RoomId
String/Number
房间名(类型与客户端房间号类型一致)
EventTs
Number
时间发生的 Unix 时间戳,单位为秒 (不建议使用该字段,建议使用EventMsTs)
EventMsTs
Number
事件发生的 Unix 时间戳,单位为毫秒
UserId
String
录制机器人的用户 ID
TaskId
String
录制 ID,一次云端录制任务唯一的 ID
Payload
JsonObject
根据不同事件类型定义不同

事件类型为301
(EVENT_TYPE_CLOUD_RECORDING_RECORDER_START)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表录制模块启动成功
1:代表录制模块启动失败
{
"EventGroupId": 3,
"EventType": 301,
"CallbackTs": 1622186275913,
"EventInfo": {
"RoomId": "xx",
"EventTs": "1622186275",
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0
}
}
}

事件类型为302
(EVENT_TYPE_CLOUD_RECORDING_RECORDER_STOP)时 Payload 的定义:
字段名
类型
含义
LeaveCode
Number
0:代表录制模块正常调用停止录制退出
1:录制机器人被客户踢出房间
2:客户解散房间
3:服务器将录制机器人踢出
4:服务器解散房间
99:代表房间内除了录制机器人没有其他用户流,超过指定时间退出
100:房间超时退出
101:同一用户重复进入相同房间导致机器人退出
{
"EventGroupId": 3,
"EventType": 302,
"CallbackTs": 1622186354806,
"EventInfo": {
"RoomId": "xx",
"EventTs": "1622186354",
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"LeaveCode": 0
}
}
}

事件类型为303
(EVENT_TYPE_CLOUD_RECORDING_UPLOAD_START)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表上传模块正常启动 1:代表上传模块初始化失败。

事件类型为304
(EVENT_TYPE_CLOUD_RECORDING_FILE_INFO )时 Payload 的定义:
字段名
类型
含义
FileList
String
生成的 M3U8 文件名

事件类型为305
(EVENT_TYPE_CLOUD_RECORDING_UPLOAD_STOP)时 Payload 的定义:
字段名
类型
含义
LeaveCode
Number
0:代表此次录制上传任务已经完成,所有的文件均已上传到指定的第三方云存储 1:代表此次录制上传任务已经完成,但至少有一片文件滞留在服务器或者备份存储上 2:代表滞留在服务器或者备份存储上的文件已经恢复上传到指定的第三方云存储
注意:305代表hls文件上传结束事件

事件类型为306
(EVENT_TYPE_CLOUD_RECORDING_FAILOVER)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表此次迁移已经完成
{
"EventGroupId": 3,
"EventType": 306,
"CallbackTs": 1622191989674,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191989,
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0
}
}
}

事件类型为307
(EVENT_TYPE_CLOUD_RECORDING_FILE_SLICE)时 Payload 的定义:
字段名
类型
含义
FileName
String
m3u8 文件名
UserId
String
录制文件对应的用户 ID
TrackType
String
音视频类型 audio/video/audio_video
BeginTimeStamp
String
录制开始时,服务器Unix时间戳(毫秒)

事件类型为309
(EVENT_TYPE_CLOUD_RECORDING_DOWNLOAD_IMAGE_ERROR)时 Payload 的定义:
字段名
类型
含义
Url
String
下载失败的 URL
{
"EventGroupId": 3,
"EventType": 309,
"CallbackTs": 1622191989674,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191989,
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Url": "http://xx"
}
}
}

事件类型为310
(EVENT_TYPE_CLOUD_RECORDING_MP4_STOP)时 Payload 的定义:
说明:
310 是上传mp4文件到客户指定第三方云存储COS完成后的回调事件,一个录制任务可能会回调多个310事件(每个事件对应一个录制文件信息)
段名
类型
含义
Status
Number
0:代表此次录制 mp4 任务已经正常退出,所有的文件均已上传到指定的第三方云存储
1:代表此次录制 mp4 任务已经正常退出,但至少有一片文件滞留在服务 器或者备份存储上  2:代表此次录制 mp4 任务异常退出(可能原因是拉取 cos 的 hls 文件失败)
FileList
Array
所有生成的 mp4 文件名
FileMessage
Array
所有生成的 mp4 文件信息
FileName
String
mp4 文件名
UserId
String
mp4 文件对应的用户 ID(当录制模式为混流模式时,此字段为空)
TrackType
String
audio 音频 / video 纯视频 / audio_video 音视频
MediaId
String
主辅流标识,main 代表主流(摄像头),aux 代表辅流(屏幕分享),mix 代表混流录制
StartTimeStamp
Number
mp4 文件开始的 Unix 时间戳(毫秒)
EndTimeStamp
Number
mp4 文件结束的 Unix 时间戳(毫秒)
{
"EventGroupId": 3,
"EventType": 310,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191989,
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0,
"FileList": ["xxxx1.mp4", "xxxx2.mp4"],
"FileMessage": [
{
"FileName": "xxxx1.mp4",
"UserId": "xxxx",
"TrackType": "audio_video",
"MediaId": "main",
"StartTimeStamp": 1622186279145,
"EndTimeStamp": 1622186282145
},
{
"FileName": "xxxx2.mp4",
"UserId": "xxxx",
"TrackType": "audio_video",
"MediaId": "main",
"StartTimeStamp": 1622186279153,
"EndTimeStamp": 1622186282153
}
]

}
}
}

事件类型为311
(EVENT_TYPE_CLOUD_RECORDING_VOD_COMMIT)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表本录制文件正常上传至点播平台
1:代表本录制文件滞留在服务器或者备份存储上
2:代表本录制文件上传点播任务异常
UserId
String
本录制文件对应的用户 ID(当录制模式为合流模式时,此字段为空)
TrackType
String
audio 音频 / video 纯视频 / audio_video 音视频
MediaId
String
主辅流标识,main代表主流(摄像头),aux代表辅流(屏幕分享),mix代表混流录制
FileId
String
本录制文件在点播平台的唯一 ID
VideoUrl
String
本录制文件在点播平台的播放地址
CacheFile
String
本录制文件对应的 MP4/HLS 文件名
StartTimeStamp
Number
本录制文件开始的 UNIX 时间戳(毫秒)
EndTimeStamp
Number
本录制文件结束的 UNIX 时间戳(毫秒)
Errmsg
String
statue 不为0时,对应的错误信息
上传成功的回调:
{
"EventGroupId": 3,
"EventType": 311,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0,
"TencentVod": {
"UserId": "xx",
"TrackType": "audio_video",
"MediaId": "main",
"FileId": "xxxx",
"VideoUrl": "http://xxxx",
"CacheFile": "xxxx.mp4",
"StartTimeStamp": 1622186279153,
"EndTimeStamp": 1622186282153
}
}
}
}
上传失败的回调:
{
"EventGroupId": 3,
"EventType": 311,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 1,
"Errmsg": "xxx",
"TencentVod": {
"UserId": "123",
"TrackType": "audio_video",
"CacheFile": "xxx.mp4"
}
}
}
}
说明:
录制完成收到311回调后到文件上传完成,根据您本次录制文件的大小不同可能需等待30s-3min。

事件类型为312
(EVENT_TYPE_CLOUD_RECORDING_VOD_STOP)时 Payload 的定义:
字段名
类型
含义
Status
Number
0:代表本次上传 VOD 任务已经正常退出
1:代表本次上传 VOD 任务异常退出
{
"EventGroupId": 3,
"EventType": 312,
"CallbackTs": 1622191965320,
"EventInfo": {
"RoomId": "20015",
"EventTs": 1622191965,
"EventMsTs": 1622186275757,
"UserId": "xx",
"TaskId": "xx",
"Payload": {
"Status": 0
}
}
}

页面录制参数说明

页面录制事件类型:

字段名
类型
含义
EVENT_TYPE_WEB_RECORDER_START
801
页面录制模块启动
EVENT_TYPE_WEB_RECORDER_STOP
802
页面录制模块退出
EVENT_TYPE_WEB_RECORDER_STATUS_UPDATE
803
页面录制模块录制状态更新
EVENT_TYPE_WEB_RECORDER_RESOURCE_LIMIT
804
页面录制任务资源受限,结束录制任务,仅在录制时长超限、录制分辨率超限时回调

页面录制事件信息说明:

字段名
类型
含义
EventMsTs
Number
事件发生的 Unix 时间戳,单位为毫秒
TaskId
String
录制 ID,一次页面录制任务唯一的 ID
Payload
JsonObject
根据不同事件类型定义不同
EventMessage
String
对应Status的事件信息描述

事件类型为801
(EVENT_TYPE_WEB_RECORDER_START)时 Payload 的定义:
字段名
类型
含义
Status
Number
1:代表页面录制模块启动成功
2:代表页面录制模块启动失败
3:代表录制过程中异常退出
4:代表录制任务已迁移
5:代表录制任务异常,停止录制
EventMessage
String
Success:页面录制模块启动成功,开始录制
StartRecording error:页面录制模块启动失败
Goto url timeout:录制页面访问超时
Exception error, exit task:录制异常结束
Chrome exception, exit task:Chrome异常退出,录制结束
Recording tasks have been migrated:录制任务已迁移
Page load timeout:页面加载超时
{
"EventGroupId": 8,
"EventType": 801,
"CallbackTs": 1622186275913,
"EventInfo": {
"EventMsTs": 1622186275757,
"TaskId": "-m9-bVVU7id***K-m928oZWQndiborbEWH3zY-lIXlprc-gQvQE",
"Payload": {
"Status": 1,
"EventMessage": "Success"
}
}
}
说明:
收到状态码为2的801回调时,请检查 RecordUrl 是否可以正常访问。
801回调的状态码3和状态码4,为页面录制的中间状态,便于录制任务出现异常时的排查;页面录制会自动对上述两种状态进行处理,客户无需进行处理。
注意:
收到状态码为5的801回调时,录制任务将被终止,并不再重试,请您及时联系业务人员进行排查。

事件类型为802
(EVENT_TYPE_WEB_RECORDER_STOP)时 Payload 的定义:
字段名
类型
含义
Status
Number
1:代表本次页面录制任务正常结束
EventMessage
String
Success:页面录制模块正常调用停止录制退出
{
"EventGroupId": 8,
"EventType": 802,
"CallbackTs": 1622186275913,
"EventInfo": {
"EventMsTs": 1622186275757,
"TaskId": "-m9-bVVU7id***K-m928oZWQndiborbEWH3zY-lIXlprc-gQvQE",
"Payload": {
"Status": 1,
"EventMessage": "Success"
}
}
}
说明:
收到802回调说明页面录制任务已完成,实际录制文件上传完成会回调311事件,整体完成回调312事件。

事件类型为803
(EVENT_TYPE_WEB_RECORDER_STATUS_UPDATE)时 Payload 的定义:
字段名
类型
含义
Status
Number
1:代表页面录制任务页面刷新
2:代表页面录制任务暂停录制
3:代表页面录制任务恢复录制
EventMessage
String
PageRefresh:刷新录制页面
RecordPaused:录制任务暂停
RecordResume:录制任务恢复
Page load timeout:页面加载超时
{
"EventGroupId": 8,
"EventType": 803,
"CallbackTs": 1622186275913,
"EventInfo": {
"EventMsTs": 1622186275757,
"TaskId": "-m9-bVVU7id***K-m928oZWQndiborbEWH3zY-lIXlprc-gQvQE",
"Payload": {
"Status": 1,
"EventMessage": "PageRefresh"
}
}
}

事件类型为804
(EVENT_TYPE_WEB_RECORDER_RESOURCE_LIMIT)时 Status 的定义:
字段名
类型
含义
Status
Number
1:代表本次页面录制任务达到设定的最大录制时间,结束录制
2:代表本次页面录制任务的录制页面中出现了超过设定的最大录制分辨率的视频流,结束录制
EventMessage
String
Over time limit:录制时长达到设定的最大录制时长,自动结束录制
Over resolution limit:录制任务中出现超过最大分辨率限制的视频源,自动结束录制
{
"EventGroupId": 8,
"EventType": 804,
"CallbackTs": 1622186275913,
"EventInfo": {
"EventMsTs": 1622186275757,
"TaskId": "-m9-bVVU7id***K-m928oZWQndiborbEWH3zY-lIXlprc-gQvQE",
"Payload": {
"Status": 1,
"EventMessage": "Over time limit"
}
}
}
说明:
收到804回调状态码为2时,请检查录制过程中是否出现超出分辨率限制(1920*1080)的视频流。

计算签名

签名由 HMAC SHA256 加密算法计算得出,您的事件回调接收服务器收到回调消息后,通过同样的方式计算出签名,相同则说明是腾讯云的实时音视频的事件回调,没有被伪造。签名的计算如下所示:
//签名 Sign 计算公式中 key 为计算签名 Sign 用的加密密钥。
Sign = base64(hmacsha256(key, body))
注意:
body 为您收到回调请求的原始包体,不要做任何转化,示例如下:
body="{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t103,\\n\\t\\"CallbackTs\\":\\t1615554923704,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t12345,\\n\\t\\t\\"EventTs\\":\\t1608441737,\\n\\t\\t\\"UserId\\":\\t\\"test\\",\\n\\t\\t\\"UniqueId\\":\\t1615554922656,\\n\\t\\t\\"Role\\":\\t20,\\n\\t\\t\\"Reason\\":\\t1\\n\\t}\\n}"

签名校验示例

Java
Python
PHP
Golang
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
//# 功能:第三方回调sign校验
//# 参数:
//#   key:控制台配置的密钥key
//#   body:腾讯云回调返回的body体
//#   sign:腾讯云回调返回的签名值sign
//# 返回值:
//#   Status:OK 表示校验通过,FAIL 表示校验失败,具体原因参考Info
//#   Info:成功/失败信息

public class checkSign {
    public static String getResultSign(String key, String body) throws Exception {
        Mac hmacSha256 = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");
        hmacSha256.init(secret_key);
        return Base64.getEncoder().encodeToString(hmacSha256.doFinal(body.getBytes()));
    }
    public static void main(String[] args) throws Exception {
        String key = "123654";
        String body = "{\\n" + "\\t\\"EventGroupId\\":\\t2,\\n" + "\\t\\"EventType\\":\\t204,\\n" + "\\t\\"CallbackTs\\":\\t1664209748188,\\n" + "\\t\\"EventInfo\\":\\t{\\n" + "\\t\\t\\"RoomId\\":\\t8489,\\n" + "\\t\\t\\"EventTs\\":\\t1664209748,\\n" + "\\t\\t\\"EventMsTs\\":\\t1664209748180,\\n" + "\\t\\t\\"UserId\\":\\t\\"user_85034614\\",\\n" + "\\t\\t\\"Reason\\":\\t0\\n" + "\\t}\\n" + "}";
        String Sign = "kkoFeO3Oh2ZHnjtg8tEAQhtXK16/KI05W3BQff8IvGA=";
        String resultSign = getResultSign(key, body);

        if (resultSign.equals(Sign)) {
            System.out.println("{'Status': 'OK', 'Info': '校验通过'}");
        } else {
            System.out.println("{'Status': 'FAIL', 'Info': '校验失败'}");
        }
    }
}
# -*- coding: utf8 -*-
import hmac
import base64
from hashlib import sha256

# 功能:第三方回调sign校验
# 参数:
#   key:控制台配置的密钥key
#   body:腾讯云回调返回的body体
#   sign:腾讯云回调返回的签名值sign
# 返回值:
#   Status:OK 表示校验通过,FAIL 表示校验失败,具体原因参考Info
#   Info:成功/失败信息

def checkSign(key, body, sign):
    temp_dict = {}
    computSign = base64.b64encode(hmac.new(key.encode('utf-8'), body.encode('utf-8'), digestmod=sha256).digest()).decode('utf-8')
    print(computSign)
    if computSign == sign:
        temp_dict['Status'] = 'OK'
        temp_dict['Info'] = '校验通过'
        return temp_dict
    else:
        temp_dict['Status'] = 'FAIL'
        temp_dict['Info'] = '校验失败'
        return temp_dict

if __name__ == '__main__':
    key = '123654'
    body = "{\\n" + "\\t\\"EventGroupId\\":\\t2,\\n" + "\\t\\"EventType\\":\\t204,\\n" + "\\t\\"CallbackTs\\":\\t1664209748188,\\n" + "\\t\\"EventInfo\\":\\t{\\n" + "\\t\\t\\"RoomId\\":\\t8489,\\n" + "\\t\\t\\"EventTs\\":\\t1664209748,\\n" + "\\t\\t\\"EventMsTs\\":\\t1664209748180,\\n" + "\\t\\t\\"UserId\\":\\t\\"user_85034614\\",\\n" + "\\t\\t\\"Reason\\":\\t0\\n" + "\\t}\\n" + "}"
    sign = 'kkoFeO3Oh2ZHnjtg8tEAQhtXK16/KI05W3BQff8IvGA='
    result = checkSign(key, body, sign)
    print(result)
<?php

class TlsEventSig {
private $key = false;
private $body = false;
public function __construct( $key, $body ) {
$this->key = $key;
$this->body = $body;
}

private function __hmacsha256() {
$hash = hash_hmac( 'sha256', $this->body, $this->key, true );
return base64_encode( $hash);
}
public function genEventSig() {
return $this->__hmacsha256();
}
}

$key="789";
$data="{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t101,\\n\\t\\"CallbackTs\\":\\t1608086882372,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t20222,\\n\\t\\t\\"EventTs\\":\\t1608086882,\\n\\t\\t\\"UserId\\":\\t\\"222222_phone\\"\\n\\t}\\n}";

$api = new TlsEventSig($key, $data);
echo $api->genEventSig();
package main
import "fmt"
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
)

func main () {
var data = "{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t101,\\n\\t\\"CallbackTs\\":\\t1608086882372,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t20222,\\n\\t\\t\\"EventTs\\":\\t1608086882,\\n\\t\\t\\"UserId\\":\\t\\"222222_phone\\"\\n\\t}\\n}"
var key = "789"

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
fmt.Println(hmacsha256(data,key))
}

func hmacsha256(data string, key string) string {
h := hmac.New(sha256.New, []byte(key))
h.Write([]byte(data))
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈