# 防沉迷-向外通知接口
为完成《关于防止未成年人沉迷网络游戏工作的通知》相关工作,各游戏需实现接收防沉迷通知消息的服务,用来接收防沉迷系统发来的“用户剩余时长通知”和“强制用户下线通知”;该服务采用http协议或者基于tcp的二进制协议实现,各游戏可根据开发的便利性选择一个实现,但为统一化,防沉迷制定了本页描述的协议接口规范
- 实现http服务的游戏,url路径自定义,支持按游戏、区、组的层级进行url配置
- 实现tcp服务的游戏,,支持按游戏、区、组的层级进行ip+port配置
# 一、HTTP协议
# 1、用户剩余时长通知
# 功能说明
- 接口访问需要鉴权,具体签名算法参见"附录"->"其他 SDO 服务端"->"SDO API访问鉴权"
- 通知游戏服务端用户剩余时长,游戏根据需要在客户端提醒给用户
# 请求参数
字段名 | 类型 | 必填 | 说明 |
---|---|---|---|
appid | int | Y | 应用编码,必须使用实际的游戏appid |
areaid | int | Y | 应用区号 |
groupid | int | Y | 应用组号 |
userid | string | Y | 账号id,与游戏调用online时使用的账号一致 |
characterid | string | Y | 角色 |
onlineTimeVal | int | Y | 当天累积在线时长,单位秒 |
remainingTime | int | Y | 当天剩余可玩时长,单位秒 |
msg | string | N | 提示信息,当该字段有值时,可用于客户端展示 |
guid | string | N | 消息追踪id,由调用方生成,用于问题排查 |
# 业务响应
{
"return_code": 0,
"return_message": "",
"data": { }
}
1
2
3
4
5
2
3
4
5
返回return_code为0表示通知成功
# 请求示例
请求: https://xxxxx/remain?appid=791000306&areaid=3&characterid=%E5%B0%8F%E9%B1%BC%E4%BA%BA&groupid=3&guid=4b54bbb75d79f1cd0000001788bcd700&merchant_name=test&msg=%E5%89%A9%E4%BD%99%E6%97%B6%E9%97%B4%E4%B8%BA0&onlineTimeVal=2700&remainingTime=900&signature_method=md5×tamp=1714284578&userid=2627364167&signature=5c0a08944d6af6d16cca9161cb60cdb7
响应:
{
"return_code": 0,
"return_message": "",
"data": { }
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 2、强制用户下线通知
# 功能说明
- 接口访问需要鉴权,具体签名算法参见"附录"->"其他 SDO 服务端"->"SDO API访问鉴权"
- 通知游戏服务端踢未成年人下线
- 游戏收到强制下线请求时,由游戏处理用户的下线操作,并将操作结果返回给防沉迷系统,强制下线请求接口的msg字段值,需准确显示给用户
- 收到强制下线请求时,必须立即处理用户下线,不可延迟处理,所以建议当未成年人用户需要进行长时间耗时的任务及副本时,先调用queryonlineduration接口查询剩余游戏时长,确保其剩余时长足够完成任务及副本
- 当游戏成功处理强制下线操作时,已停止该用户的防沉迷时间累积,无需将该用户的心跳发送至防沉迷系统
# 请求参数
字段名 | 类型 | 必填 | 说明 |
---|---|---|---|
appid | int | Y | 应用编码,必须使用实际的游戏appid |
areaid | int | Y | 应用区号 |
groupid | int | Y | 应用组号 |
userid | string | Y | 账号id,与游戏调用online时使用的账号一致 |
characterid | string | Y | 角色 |
msg | string | N | 提示信息,当该字段有值时,可用于客户端展示 |
guid | string | N | 消息追踪id,由调用方生成,用于问题排查 |
# 业务响应
{
"return_code": 0,
"return_message": "",
"data": { }
}
1
2
3
4
5
2
3
4
5
返回return_code为0表示通知成功;否则会重发通知, 最多重发3次
# 请求示例
请求: https://xxxxx/kick?appid=791000306&areaid=3&characterid=%E5%B0%8F%E9%B1%BC%E4%BA%BA&groupid=3&guid=4b54bbb75d79f1cd0000001788bcd700&merchant_name=test&msg=%E5%89%A9%E4%BD%99%E6%97%B6%E9%97%B4%E4%B8%BA0&signature_method=md5×tamp=1714035330&userid=2627364167&signature=b6e2c16b91c9ebc77103dadb7ad85e9d
响应:
{
"return_code": 0,
"return_message": "",
"data": { }
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 二、基于TCP的二进制协议
# 0、协议说明
||<---包长度(4字节)--->||<---消息类型(4字节)--->||<---消息体(不超2^32-1-4字节)--->||
# 消息结构
项目 | 说明 |
---|---|
Message Header | 消息头(所有消息公共包头) |
Message Body | 消息体 |
# 消息头格式(Message Header)
字段名 | 字节数 | 类型 | 描述 |
---|---|---|---|
PackageLength | 4 | 网络字节序4字节整型 | 消息总长度(含消息头及消息体) |
CommandId | 4 | 网络字节序4字节整型 | 消息类型 |
# 消息体格式(Message Body)
- 长度不超不超2^32-1-4字节
- json格式文本
- 不同消息体内json定义参见下述各接口的请求参数和业务响应的定义表格
# 1、用户剩余时长通知
# 功能说明
- 请求包中消息类型值为0x0001
- 响应包中消息类型值为0x8001
- 通知游戏服务端用户剩余时长,游戏根据需要在客户端提醒给用户
# 请求参数
字段名 | 类型 | 必填 | 说明 |
---|---|---|---|
appid | int | Y | 应用编码,必须使用实际的游戏appid |
areaid | int | Y | 应用区号 |
groupid | int | Y | 应用组号 |
userid | string | Y | 账号id,与游戏调用online时使用的账号一致 |
characterid | string | Y | 角色 |
onlineTimeVal | int | Y | 当天累积在线时长,单位秒 |
remainingTime | int | Y | 当天剩余可玩时长,单位秒 |
msg | string | N | 提示信息,当该字段有值时,可用于客户端展示 |
guid | string | N | 消息追踪id,由调用方生成,用于问题排查 |
# 业务响应
字段名 | 类型 | 说明 |
---|---|---|
return_code | int | 业务处理响应码,实现方自定义 |
return_message | string | 业务处理响应描述,实现方自定义 |
guid | string | 消息追踪id,使用请求中的值 |
返回return_code为0表示通知成功
# 2、强制用户下线通知
# 功能说明
- 请求包中消息类型值为0x0002
- 响应包中消息类型值为0x8002
- 通知游戏服务端踢未成年人下线
- 游戏收到强制下线请求时,由游戏处理用户的下线操作,并将操作结果返回给防沉迷系统,强制下线请求接口的msg字段值,需准确显示给用户
- 收到强制下线请求时,必须立即处理用户下线,不可延迟处理,所以建议当未成年人用户需要进行长时间耗时的任务及副本时,先调用queryonlineduration接口查询剩余游戏时长,确保其剩余时长足够完成任务及副本
- 当游戏成功处理强制下线操作时,已停止该用户的防沉迷时间累积,无需将该用户的心跳发送至防沉迷系统
# 请求参数
字段名 | 类型 | 必填 | 说明 |
---|---|---|---|
appid | int | Y | 应用编码,必须使用实际的游戏appid |
areaid | int | Y | 应用区号 |
groupid | int | Y | 应用组号 |
userid | string | Y | 账号id,与游戏调用online时使用的账号一致 |
characterid | string | Y | 角色 |
msg | string | N | 提示信息,当该字段有值时,可用于客户端展示 |
guid | string | N | 消息追踪id,由调用方生成,用于问题排查 |
# 业务响应
字段名 | 类型 | 说明 |
---|---|---|
return_code | int | 业务处理响应码,实现方自定义 |
return_message | string | 业务处理响应描述,实现方自定义 |
guid | string | 消息追踪id,使用请求中的值 |
返回return_code为0表示通知成功;否则会重发通知, 最多重发3次