提交 584b618a 作者: 闫永超

合并分支 'release' 到 'master'

服务端接口文档

查看合并请求 zwwl/zw_game_sdk!246
# 第三方接口说明
# 第三方接口说明
### 目录
      [签名规则1](#sigin1)
        1.1 [发送邮件模块](#sec1.1)
        1.2 [合区区服信息上报模块](#sec1.2)
        1.3 [禁言角色接口](#sec1.3)
        1.4 [解封角色禁言接口](#sec1.3)
        1.5 [封角色、 账号 接口](#sec1.3)
        1.6 [解封角色、 账号 接口](#sec1.3)
        1.7 [跨服活动抓取模块](#sec1.4)
##### 签名规则1<a name="sigin1"></a>
1. POST 数据结构 JSON
2. Header数据需要加验证参数 Authorization
3. Authorization 将请求数据,
a. 按照key ascll 码小到大排序,
b.拼接参数 string = "key1=value1&key2=value2";
c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization
### 1.1 发送邮件模块 <a name="sec1.1"></a>
打通掌游和游戏之间,发送邮件功能
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|--------------|------|-----------|--------------------------| ---- |
| email_type | 是 | int | 邮件类型 : 1 个人邮件 2 全服邮件 | |
| platform | 是 | int | 平台 | |
| main_game_id | 是 | Int | 主游戏ID | |
| title | 是 | String | 标题 | |
| send_user | 是 | String | 发送人(指定为管理员) | |
| content | 是 | String | 内容 | |
| send_time | 是 | datetime | 发送时间 | |
| server_id | 是 | string | 原始区服id | |
| cp_role_id | 否 | string | cp角色id (个人邮件必传) | |
| role_name | 否 | string | 角色名 (个人邮件必传) | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- |--------------|
| code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 发送成功 |
### 1.2 合区区服信息上报模块 <a name="sec1.2"></a>
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|-------------------------|------|-----|-----------------|------|
| merge_server_start_time | 是 | int | 合服开始时间(时间戳精确到秒) | |
| merge_server_end_time | 是 | int | 合服结束时间(时间戳精确到秒) | |
返回数据
| | 是否必要 | 字段类型 | |
|------------------------| -------- | -------- | ------------------------------------------------------------ |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
| data | 是 | Object[] | |
| data.main_server | 是 | String | 主服 | |
| data.deputy_server | 是 | String | 被合区服 | |
| data.merge_server | 是 | String | 合服后名称 | |
| data.main_game_id | 是 | int | 主游戏ID | |
| data.state | 是 | int | 当前合服状态 | |
| data.server_ids | 是 | String | 原始区服 (原始区服id-名称 逗号链接) 例:46838-无相838区,46842-无相842区 | |
| data.platform | 是 | int | 平台 | |
| data.merge_server_time | 是 | int | 合服时间(时间戳精确到秒) | |
### 1.3 禁言角色接口 <a name="sec1.3"></a>
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| banned_type | 是 | int | 封禁方式 : 1 禁言角色 3 静默禁言 | |
| banned_time_type | 是 | Int | 封禁时间类型 : 1 小时 2 天 3 永久封禁 | |
| banned_time | 是 | Int | 封禁时间值: 例如 1 0 | |
| cp_role_id | 是 | String | 角色ID | |
| server_id | 是 | String | 角色注册区服ID | |
| game_id | 否 | int | 创角游戏ID | |
| zw_number | 是 | int | 1 2 3 4 例如掌玩1 | |
| player_id | 是 | string | 登录账号返回信息 唯一信息 确定账号 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 封禁成功 |
### 1.4 解封角色禁言接口 <a name="sec1.4"></a>
​ 请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ----------- | -------- | -------- | ----------------------------------------- | ---- |
| cp_role_id | 是 | String | 角色ID | |
| game_id | 否 | int | 创角游戏ID | |
| zw_number | 是 | int | 1 2 3 4 例如掌玩1 | |
| banned_type | 是 | int | 封禁方式 : 1 禁言角色 3 静默禁言 | |
| server_id | 是 | String | 角色注册区服ID | |
| player_id | 是 | string | 登录账号返回信息 唯一信息 确定账号 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | ----------------------------- |
| code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 解封角色禁言成功 |
### 1.5 封角色、 账号 接口 <a name="sec1.5"></a>
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ----------- | -------- | -------- | ------------------------------------ | ---- |
| cp_role_id | 是 | String | 角色ID | |
| banned_type | 是 | int | 1 封角色 2 封账号 默认封角色 | |
| server_id | 是 | String | 角色注册区服ID | |
| game_id | 否 | int | 创角游戏ID | |
| zw_number | 是 | int | 1 2 3 4 例如掌玩1 | |
| player_id | 是 | string | 登录账号返回信息 唯一信息 确定账号 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | ------------------------- |
| code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 封禁角色成功 |
### 1.6 封角色、 账号 接口 <a name="sec1.5"></a>
​ 请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ----------- | -------- | -------- | ------------------------------------ | ---- |
| cp_role_id | 是 | String | 角色ID | |
| banned_type | 是 | int | 1 封角色 2 封账号 默认封角色 | |
| game_id | 否 | int | 创角游戏ID | |
| zw_number | 是 | int | 1 2 3 4 例如掌玩1 | |
| server_id | 是 | String | 角色注册区服ID | |
| player_id | 是 | string | 登录账号返回信息 唯一信息 确定账号 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | ------------------------- |
| code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 解封角色成功 |
### 1.7 跨服活动抓取模块 <a name="sec1.7"></a>
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|----------------|------|-----|------------------------------------------------|------|
| min_start_time | 是 | dateTime | 活动开始时间最小值筛选,筛选start_time字段 2025-10-29 00:00:00 | |
| max_start_time | 是 | dateTime | 活动开始时间最大值筛选,筛选start_time字段 2025-10-29 23:59:59 | |
| page | 是 | int | 页数 | |
| page_size | 是 | int | 每页数据条数 | |
返回数据
| | 是否必要 | 字段类型 | |
|------------------------| -------- | -------- |---------------------------------------------|
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
| data | 是 | Object[] | |
| data.platform | 是 | int | 平台 | |
| data.main_game_id | 是 | int | 主游戏ID | |
| data.group_id | 是 | String | 跨服组id | |
| data.server_id | 是 | Array | 区服ID 数据格式传数组,示例格式:["13000","14000","15000"] | |
| data.name | 是 | String | 活动名称 | |
| data.start_time | 是 | dateTime | 活动开始时间 2025-10-29 09:00:00 | |
| data.end_time | 是 | dateTime | 活动结束时间 2025-10-29 12:00:00 | |
v1.0 v1.0
...@@ -12,7 +12,7 @@ v1.0 ...@@ -12,7 +12,7 @@ v1.0
3. Authorization 将请求数据, 3. Authorization 将请求数据,
a. 按照key ascll 码小到大排序, a. 按照key ascll 码小到大排序,
b.拼接全部body参数 string = "cp_role_id=value1&cp_account=value2" + secert; b.拼接全部body参数 string = "key1=value1&key2=value2" + secert;
c. 将string 转为32 位的md5数据, stringMd5 = string.md5(); c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization
......
# 服务端接口说明-v1.0.0 # 服务端接口说明-v1.0.0
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
> >
> 请求参数(去除 sign)通过参数名作升序排序;如果参数值是一个数组不参与签名,如果参数值是一个对象不参与签名, game_secret 以一下格式进行字符串拼接(game_secret 放在最后) > 请求参数(去除 sign)通过参数名作升序排序;如果参数值是一个数组不参与签名,如果参数值是一个对象不参与签名, game_secret 以一下格式进行字符串拼接(game_secret 放在最后)
> >
> key1=value1&key2=value2&key3=value3&game_secret=secret > key1=value1&key2=value2&key3=value3game_secret
> **签名算法** > **签名算法**
> >
......
# 服务端接口说明
# 服务端接口说明
### 目录
1.[接入说明](#sec1)
&nbsp;&nbsp;&nbsp;&nbsp;1.1 [术语表](#sec1.1)
&nbsp;&nbsp;&nbsp;&nbsp;1.2 [数据字典](#sec1.2)
2.[服务端接口](#sec2)
&nbsp;&nbsp;&nbsp;&nbsp;2.1 [接口规则](#sec2.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求域名
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求方式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请求格式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回格式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;状态说明
3.[接口列表](#sec3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则1](#sigin1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.1 [AI检查敏感词](#sec3.1.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.2 [企微客服绑定回调接口](#sec3.1.2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.3 [灵符日志上报接口](#sec3.1.3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.4 [角色击杀日志上报接口](#sec3.1.4)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.5 [boss击杀日志上报接口](#sec3.1.5)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.6 [拍卖行上架上报](#sec3.1.6)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.7 [玩家交易记录](#sec3.1.7)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.8 [查询账号角色创角数接口](#sec3.1.8)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.9 [跨服活动上报接口](#sec3.1.9)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.10 [道具日志接口](#sec3.1.10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1.11 [聊天记录风控接口](#sec3.1.11)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则2](#sigin2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.2.1 [AI敏感词聊天记录上报](#sec3.2.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则3](#sigin3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.3.1 [AI自动封禁上报接口](#sec3.3.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则4](#sigin4)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.1 [接收前日全量角色数据接口](#sec3.4.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则5](#sigin4)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.5.1 [获取小游戏token](#sec3.5.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则6](#sigin6)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.6.1 [服务端角色上报(此接口和sdk只保留一个)](#sec3.6.1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.6.2 [是否允许创角](#sec3.6.2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.6.3 [聊天记录](#sec3.6.3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.6.4 [地图记录](#sec3.6.4)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[签名规则7](#sigin7)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.7.1 [AI获取角色标签接口](#sec3.7.1)
1. 接入说明<a name="sec1"></a>
### 1.1 术语表<a name="sec1.1"></a>
> | 名称 | 说明 |
> | ---------- | ------------------------------------------------------------ |
> | CP | 游戏研发商。 |
> | SDK | 由平台方提供给游戏研发商,用于游戏接入平台登录,支付。 |
> | SDK 服务 | 由平台方开发,用于完成 SDK 的登录,支付流程,承接游戏服务端的数据。 |
> | 游戏服务 | 游戏研发商开发,为游戏提供服务。 |
> | 小游戏 | 游戏研发方商开发的微信小游戏。 |
> | H5游戏 | 游戏研发商开发的网页版游戏一般情况系与小游戏同游同服 |
> | 支付服务 | 由平台方调用支付服务,包括米大师,微信支付等 |
> | 小游戏入口 | 小游戏的入口链接,SDK 方默认为 pages/index/index(如果 CP 方不同需要提前与 SDK 沟通) |
### 1.2 数据字典<a name="sec1.2"></a>
> | 名称 | 说明 |
> |-------------|---------------------------------|
> | member_id | 用户在平台注册账号的唯一标识。 |
> | player_id | 用户在平台的一个游戏中的唯一标识。 |
> | user_token | 用户在平台登录的会话标识。 |
> | game_id | 游戏在平台的唯一标识。 |
> | game_secret | 平台方提供,游戏签名秘钥。 |
> | cp_order_id | 游戏研发商订单唯一标识 |
> | order_id | 平台方提供,订单唯一标识,与 cp_order_id 一一对应 |
> | secret | 平台方提供,游戏签名秘钥 与 game_secret 不同 |
## 2.服务端接入<a name="sec2"></a>
### 2.1 接口规则<a name="sec2.1"></a>
##### 请求域名
> 【HTTPS】zyouapi.wozhangwan.com
##### 请求方式
> 【POST】
##### 请求格式
> 【JSON】
##### 返回格式
> 【JSON】
##### 状态说明
| 状态码 | 说明 |
| ------ | -------- |
| 1 | 成功 |
| -1 | 错误 |
| -100 | 未登录 |
| -422 | 参数错误 |
## 3.接口列表<a name="sec3"></a>
##### 签名规则1<a name="sigin1"></a>
1. POST 数据结构 JSON
2. Header数据需要加验证参数 Authorization
3. Authorization 将请求数据,
a. 按照key ascll 码小到大排序,
b.拼接参数 string = "key1=value1&key2=value2" + secert;
c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization
### 3.1.1 AI检查敏感词<a name="sec3.1.1"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
接口地址:/server/chat/chatRickReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|------------------|------|----------|-----------------------------------------|------|
| zw_app_id | 是 | String | 掌玩appId | |
| cp_role_id | 是 | String | 发言角色ID | |
| action_time | 是 | DateTime | 发送时间 | |
| context | 是 | String | 聊天内容 | |
| context_type | 是 | String | 文本类型,默认为'chat' 聊天 'nick' 昵称 'post' 帖子 | |
| channel_id | 否 | String | 渠道ID | |
| user_id | 否 | String | 用户ID | |
| ip | 否 | String | IP | |
| room_id | 否 | String | 聊天ID | |
| room_name | 否 | String | 聊天室名 | |
| server_id | 否 | String | 区服ID | |
| game_version | 否 | String | 游戏版本号 用于游戏区分不同版本 | |
| receive_id | 否 | String | 消息接受者 私聊场景下聊天对象角色ID | |
| main_game_id | 是 | Int | 主游戏ID | |
| open_server_time | 是 | DateTime | 开服时间 | |
| is_send_diting | 否 | Int | 是否推送谛听,默认为1-是,传参值:1-是,2-否 | |
返回数据
| | 是否必要 | 字段类型 | |
| --------------- | -------- | -------- | ------------------------------------------------------------ |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
| data | 是 | Object | |
| data.label | 是 | string | 标签 normal: 正常; politics: 政治敏感; terror: 暴恐违禁; porn: 文本色情; ad:恶意推广; curse: 咒骂敌视; nonsense: 刷屏灌水; customize: 用户自定义。 |
| data.suggestion | 是 | String | 是否通过 pass: 通过。 review: 建议人工审核。 block: 文本不合规,建议屏蔽。 |
```shell
请注意:room_id需要传聊天室id,我们需要根据不同的聊天类型设置不同的检测规则,让消息的拦截更智能和精准。
所需的聊天类型:
● 世界:1
● 行会:2
● 系统:3
● 地图:4
● 组队:5
● 跨服:8
● 个人:100
数据传输内容
● 聊天审核:在玩家发送聊天时, 调用审核接口,其中context为聊天内容   context_type设置为 chat
● 昵称审核:在玩家设置昵称或更改昵称时,调用审核接口,  其中context为待审核文本(昵称名), context_type设置为 nick, 昵称审核时若无角色ID(cp_role_id), 则不传cp_role_id字段或传空字符串, 注意不要传0
● 行会公告审核:在玩家设置行会公告时,调用审核接口,其中context为待审核文本(公告内容), context_type设置为post
● 行会昵称审核:在玩家设置行会昵称时,调用审核接口,其中context为待审核文本(行会昵称名), context_type设置为nick
● 区服审核:当调用审核服务时,  接口传输增加一个字段,字段名为server_id 内容为区服,类型为字符串
返回结果处理
● 接口返回结果中 suggestion 为pass则允许发送该聊天 为block或review均拦截
```
### 3.1.2 企微客服绑定回调接口<a name="sec3.1.2"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
/server/customer_sdk/bindCallback
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| corp_id | 是 | String | 企微主体ID | |
| corp_name | 是 | String | 企微主体名 | |
| user_id | 是 | String | 企微用户ID | |
| corp_customer_id | 是 | String | 企微客服号ID | |
| corp_customer_name | 是 | String | 企微客服号名 | |
| game_id | 是 | Int | 游戏ID | |
| main_game_id | 是 | String | 主游戏ID | |
| u_id | 是 | int | 账号ID | |
| timestamp | 是 | int | 时间戳 | | | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.3 灵符日志上报接口<a name="sec3.1.3"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
/server/magic/magicReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- |--------------------------| ---- |
| zw_app_id | 是 | String | app_id | |
| cp_role_id | 是 | String | cp角色ID | |
| role_name | 是 | String | 角色名称 | |
| server_id | 是 | String | 区服ID | |
| server_name | 是 | String | 区服名称 | |
| cp_account | 是 | String | 用户ID | |
| action_time | 是 | dateTime | 发生时间 2024-05-08 15:00:00 | |
| behavior | 是 | String | 行为 | |
| variation | 是 | String | 改变量 | |
| remaining | 是 | String | 剩余量 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 操作成功 |
### 3.1.4 角色击杀日志上报接口<a name="sec3.1.4"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
/server/attack/attackReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| zw_app_id | 是 | String | app_id | |
| cp_role_id | 是 | String | 被击杀杀角色ID | |
| server_id | 是 | String | 区服ID | |
| server_name | 是 | String | 区服名称 | |
| cp_account | 是 | String | 用户ID | |
| action_time | 是 | dateTime | 击杀时间 2024-05-08 15:00:00 | |
| source | 是 | String | 击杀来源 | |
| source_cp_role_id | 是 | String | 击杀人角色ID 击杀是玩家的时候必传击杀人角色ID | |
| main_game_id | 是 | int | 主游戏ID | |
| map | 是 | String | 击杀地图 | |
| drop | 是 | String | 击杀掉落 | |
|
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.5 boss击杀日志上报接口<a name="sec3.1.5"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
接受boss击杀日志数据
/server/attack/bossAttackReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| zw_app_id | 是 | String | app_id | |
| cp_role_id | 是 | String |击杀角色ID | |
| server_id | 是 | String | 区服ID | |
| server_name | 是 | String | 区服名称 | |
| cp_account | 是 | String | 用户ID | |
| action_time | 是 | dateTime | 击杀时间 2024-05-08 15:00:00 | |
| role_name | 是 | String | 角色名 | |
| boss_name | 是 | String | 被击杀boss 名称 | |
| main_game_id | 是 | int | 主游戏ID | |
| map | 是 | String | 击杀地图 | |
| type | 是 | int | 击杀者 1 参与者 2 | |
|
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.6 拍卖行上架上报接口<a name="sec3.1.6"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
拍卖行上架上报
/server/game_auction_house/report
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- |------| -------- |------------------------| ---- |
| zw_app_id | 是 | String | app_id | |
| cp_role_id | 是 | String | 角色ID | |
| server_id | 是 | String | 区服ID | |
| server_name | 是 | String | 区服名称 | |
| cp_account | 是 | String | 用户ID | |
| action_time | 是 | dateTime | 交易时间 2024-05-08 15:00:00 | |
| role_name | 是 | String | 角色名 | |
| good_name | 是 | String | 上架物品名称 | |
| good_num | 是 | int | 上架物品数量 | |
| auction_prop_num | 否 | int | 消耗道具数量 1竞拍价 | |
| auction_prop_name | 否 | String | 消耗道具名称 1竞拍价 | |
| prop_name | 否 | String | 消耗道具名称 一口价 | |
| prop_num | 否 | int | 消耗道具数量 一口价 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.7 玩家交易记录接口<a name="sec3.1.7"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
玩家交易记录上报
/server/game_auction_house/trade
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|------------------| -------- | -------- |-------------------------| ---- |
| zw_app_id | 是 | String | app_id | |
| cp_role_id | 是 | String | cp角色id 1 | |
| server_id | 是 | String | 区服ID | |
| server_name | 是 | String | 区服名称 | |
| cp_account | 是 | String | 用户id 1 | |
| cp_account_two | 是 | String | 用户id 2 | |
| action_time | 是 | dateTime | 交易时间 2024-05-08 15:00:00 | |
| role_name | 是 | String | 角色名 1 | |
| trade_role_name | 是 | String | 角色名 2 | |
| trade_cp_role_id | 是 | String | cp角色id 2 | |
| good_name | 是 | String | 物品名称1 多个逗号隔开 | |
| good_name_two | 是 | String | 物品名称2 多个逗号隔开 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.8 查询账号角色创角数接口<a name="sec3.1.8"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
查询账号角色创角数
/server/role/getMemberRoleNum
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|------------------| -------- | -------- |-----------------------------------------| ---- |
| member_id | 是 | String | 账号ID | |
返回数据
| | 是否必要 | 字段类型 | |
|---------------| -------- |--------|---------------------------------------------------|
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
| data | 是 | Object | |
| data.role_num | 是 | int | 账号角色创角数 |
### 3.1.9 跨服活动上报接口<a name="sec3.1.9"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
> server_id字段是数组,不需要放到签名生成的参数里。签名只需要传zw_app_id,group_id,name,start_time,end_time这几个参数;
/server/gameCrossZoneActivity/activityReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|-------------------| -------- | -------- |-------------------------------------------------------------------------------------------------------------------------------| ---- |
| zw_app_id | 是 | String | app_id | |
| group_id | 是 | String | 跨服组id | |
| server_id | 是 | Array<String> | 区服ID 数据格式传数组,示例格式:["13000","14000","15000"] <br/>生成签名的时候不要把server_id参数放进去,只需要放zw_app_id,group_id,name,start_time,end_time这几个参数进去生成 | |
| name | 是 | String | 活动名称 | |
| start_time | 是 | dateTime | 活动开始时间 2024-08-29 09:00:00 | |
| end_time | 是 | dateTime | 活动结束时间 2024-08-31 12:00:00 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- |--------------|
| status_code | 是 | int | 1 成功 -1 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.10 道具日志接口<a name="sec3.1.10"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
接受道具日志数据
/server/prop/reportLog
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|---------------------|------|----------|--------------------------|------|
| zw_app_id | 是 | String | app_id | |
| cp_account | 是 | String | 用户ID | |
| cp_role_id | 是 | String | 角色ID | |
| role_name | 否 | String | 角色名称 | |
| server_id | 否 | String | 区服ID | |
| server_name | 否 | String | 区服名称 | |
| recharge_total | 否 | Int | 累计充值(单位:分) | |
| week_recharge_total | 否 | Int | 周充值(单位:分) | |
| prop_id | 否 | String | 道具id | |
| prop_name | 否 | String | 道具名 | |
| special_prop_name | 否 | String | 特殊道具名 | |
| amount | 否 | Int | 收入支出金额(单位:分) | |
| prop_num | 否 | String | 道具数量 | |
| prop_remain_num | 否 | Int | 道具剩余数量 | |
| source | 否 | String | 来源 | |
| action_time | 否 | dateTime | 发生时间 2024-05-08 15:00:00 | |
|
返回数据
| | 是否必要 | 字段类型 | |
|-------------|------|--------|--------------|
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
### 3.1.11 聊天记录风控接口<a name="sec3.1.11"></a>
> 接口需要进行签名,签名方法详见[签名规则1](#sigin1)
接受风控数据
/server/chat/rickReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| main_game_name | 是 | String | 主游戏名称 | |
| cp_role_id | 是 | String | 角色ID | |
| server_id | 是 | String | 区服ID | |
| cp_account | 是 | String | 用户ID | |
| action_time | 是 | dateTime | 发送时间 | |
| content | 是 | String | 聊天内容 | |
| context | 否 | String | 上下文检索 | |
| risk_text | 否 | String | 风控类型 | |
| handle_text | 否 | String | 处理结果 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
##### 签名规则2<a name="sigin2"></a>
1. POST 数据结构 JSON
2. Header数据需要加验证参数 Authorization
3. Authorization 将请求数据,
b.拼接参数 string = "date=yyyy-mm-dd(例如:2024-11-19)" + secert;
c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization
### 3.2.1 AI敏感词聊天记录上报接口<a name="sec3.2.1"></a>
> 接口需要进行签名,签名方法详见[签名规则2](#sigin2)
定时同步匹配到敏感词的聊天记录
/server/chat/chatSensitiveReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
|-------------------|------|----------|---------------------|---------------------|
| token | 是 | String | 谛听token | data里面只传该token下面的数据 | |
| data | 是 | Object[] | 传输具体数据 | 一次最多1000条 | | |
| data.log_id | 是 | String | 记录唯一id | | | |
| data.role_id | 是 | String | 角色ID | | | |
| data.action_time | 是 | dateTime | 发送时间 | | | |
| data.context | 是 | String | 聊天内容 | | | |
| data.context_type | 否 | String | 文本类型 | | | |
| data.channel_id | 否 | String | 渠道ID | |
| data.user_id | 否 | String | 用户ID | |
| data.ip | 否 | String | IP | |
| data.room_id | 是 | String | 聊天ID | | | |
| data.room_name | 否 | String | 聊天室名 | | | |
| data.area | 是 | String | 区服ID | | | |
| data.label | 是 | String | 标签 | | | |
| data.receive_id | 否 | String | 消息接受者 私聊场景下聊天对象角色ID | | | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
```shell
```
##### 签名规则3<a name="sigin3"></a>
1. POST 数据结构 JSON
2. Header数据需要加验证参数 Authorization
3. Authorization 将请求数据,
a. 按照key ascll 码小到大排序,
b.拼接参数 string = "cp_role_id=value1&cp_account=value2&time=当天的年月日date('Y-m-d')" + secert;
c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization
### 3.3.1 AI自动封禁上报接口<a name="sec3.3.1"></a>
> 接口需要进行签名,签名方法详见[签名规则3](#sigin3)
接受AI自动封禁数据
/server/chat/bannedReport
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| main_game_name | 是 | String | 主游戏名称 | |
| cp_role_id | 是 | String | 角色ID | |
| server_id | 是 | String | 区服ID | |
| cp_account | 是 | String | 用户ID | |
| action_time | 是 | dateTime | 发送时间 | |
| banned_time_type | 是 | Int | 封禁时间单位 1小时2天3永久封禁4分钟 | |
| banned_time | 是 | String | 封禁时间 | |
| banned | 是 | Object | 封禁详情 | |
| banned.project | 是 | String | 所属项目 | | | |
| banned.cp_role_id | 是 | String | 角色id | | | |
| banned.list_type | 是 | String | 名单类型 | | | |
| banned.current_hit | 是 | String | 当前命中 | | | |
| banned.hit_total | 是 | String | 累计命中 | | | |
| banned.release_time | 是 | dateTime | 释放时间 | | | |
| banned.handel_user | 是 | String | 操作用户 | | | |
| banned.remark | 是 | String | 备注信息 | | | |
| banned.hit | 是 | Array | 命中统计 | | | |
| banned.hit.content | 是 | String | 命中文本 | | | |
| banned.hit.type | 是 | String | 命中类型 | | | |
| banned.hit.key | 是 | String | 关键字 | | | |
| banned.hit.time | 是 | dateTime | 时间 | | | | | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
##### 签名规则4<a name="sigin4"></a>
1. POST 数据结构 JSON
2. Header数据需要加验证参数 Authorization
3. Authorization 将请求数据,
a. 按照key ascll 码小到大排序,
b. 拼接参数 string = "main_game_id=value&time=当天的年月日date('Y-m-d')" + secert;
c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写,
### 3.4.1接收前日全量角色数据接口<a name="sec3.4.1"></a>
> 接口需要进行签名,签名方法详见[签名规则4](#sigin4)
接收前日全量角色数据
/server/role/completeRole
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| main_game_id | 是 | Int | 提供对接唯一ID | |
| role | 是 | Array | | |
| role.cp_role_id | 是 | String | CP角色ID | |
| role.server_id | 是 | String | 区服ID | |
| role.cp_account | 是 | String | 用户ID | |
| role.server_name | 是 | String | 区服名 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
```shell
postman 示例 :
curl --location --request POST '替换域名/server/role/completeRole' \
--header 'auth-id: 4155' \
--header 'User-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ6eW91Lndvemhhbmd3YW4uY29tIiwiYXVkIjoienlvdS53b3poYW5nd2FuLmNvbSIsImlhdCI6MTY4NDc1NTYyMCwiZGF0YSI6eyJpZCI6IjcwMTg4MjY3IiwiZ2FtZV9pZCI6IjI1MSIsInBsYXllcl9pZCI6IjcwMzc4NzMwIn19.QtGmjmJXTQPHQMspzosBbvJnadoKQ3-cXM-ePFLXOe0#251' \
--header 'Version: 1.0' \
--header 'Equipment: yttt' \
--header 'Game-Id: 4' \
--header 'Authorization: 5A9F33CBC6F680C5' \
--header 'Content-Type: application/json' \
--data-raw '{
"main_game_id": 38,
"role": [
{
"cp_account": "200_115675561",
"cp_role_id": "92252757087850498",
"server_id": 1983,
"role_name": "你好",
"server_name": "扶摇983服"
}
]
}'
```
##### 签名规则5<a name="sigin5"></a>
> **签名秘钥**
>
> game_secret 为 16 位字符串,由 SDK 对接时提供,每一个游戏单独提供一个 game_secret
> **签名串**
>
> 请求参数(去除 sign)通过参数名作升序排序;如果参数值是一个数组不参与签名,如果参数值是一个对象不参与签名, game_secret 以一下格式进行字符串拼接(game_secret 放在最后)
>
> key1=value1&key2=value2&key3=value3game_secret
> **签名算法**
>
> 【md5】
>
> sign = md5(签名串)
> ##### 注意
>
> <u>如果参数值是一个对象,不参与签名;</u>
>
> <u>转换 json 注意不要对中文进行转义</u>
>
> <u>如果参数值是一个数组不参与签名</u>
##### 签名示例
```php
<php?
$gameSecret = "game_secret";
$params = ["player_id" => 1245, "game_id" => 14];
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
continue;
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
$sign = md5($signStr);
```
### 3.5.1获取小游戏token接口<a name="sec3.5.1"></a>
> 接口需要进行签名,签名方法详见[签名规则5](#sigin5)
游戏方通过服务端获取小游戏的 token SDK 服务器;
/server/game/token
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ---- |
> | Content-Type | true | application/json | |
> **Body:**
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :----------------------------------------------------------- | :---- | :----- | :----- | :--------------------------------------------------------- |
> | game_id | true | Int | - | 游戏的game_id, 角色当前游戏ID |
> | dateTime | true | String | - | 当前时间 2024-01-01 12:22:20 |
> | sign | true | String | - | 签名 |
##### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ----------- | ---- | ------ | ------ | -------- |
> | status_code | true | Int | - | 状态码 |
> | msg | true | STRING | - | 返回信息 |
> | data | true | array | | |
> | data.token | true | string | | |
##### 签名规则6<a name="sigin6"></a>
> **签名秘钥**
>
> game_secret 为 16 位字符串,由 SDK 对接时提供,每一个游戏单独提供一个 game_secret
> **签名串**
>
> 请求参数(去除 sign)通过参数名作升序排序;如果参数值是一个对象,需要将该队形通过参数名升序排序后转换为 json 字符串;将排好序的参数与 game_secret 以一下格式进行字符串拼接(game_secret 放在最后)
>
> key1=value1&key2=value2&key3=value3&game_secret=secret
> **签名算法**
>
> 【md5】
>
> sign = md5(签名串)
> ##### 注意
>
> <u>如果参数值是一个对象,需要将该对象通过参数名升序排序后转换为 json 字符串;</u>
>
> <u>转换 json 注意不要对中文进行转义</u>
##### 签名示例
```php
<php?
$gameSecret = "game_secret";
$params = ["player_id" => 1245, "game_id" => 14];
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
ksrot($val, SORT_REGULAR); //对对象参数进行排序
$val = json_encode($val, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
$sign = md5($signStr);
```
### 3.6.1服务端角色上报(此接口和sdk只保留一个)<a name="sec3.6.1"></a>
> 接口需要进行签名,签名方法详见[签名规则6](#sigin6)
游戏方通过服务端上报游戏角色信息到 SDK 服务器
/server/role/serverReportV2
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ---- |
> | Content-Type | true | application/json | |
> **Body:**
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :----------------------------------------------------------- | :---- | :----- | :----- | :--------------------------------------------------------- |
> | game_id | true | Int | - | 游戏的game_id, 角色当前游戏ID |
> | player_id | true | Int | - | 游戏登录后由 SDK 返回的player_id |
> | type | true | Int | 1 | 游戏角色操作环境,1:H5网页端,2:小游戏端,3:Android游戏 4:ios |
> | os | false | String | - | 操作系统 |
> | device_number | false | String | - | 设备型号 |
> | device_brand | false | String | - | 设备品牌 |
> | role | true | Object | - | 角色信息 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event | true | String | - | 事件类型 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_id | true | String | - | 区服ID |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name | true | String | - | 区服名称 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_role_id | true | String | - | 游戏方角色ID |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_name | true | String | - | 游戏角色名称 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_level | true | Int | - | 角色等级 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_account | false | String | - | cp账号 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_vip | false | Int | 0 | 角色VIP等级 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combat_num | false | Int | 0 | 角色战力 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reiki_num | false | Int | 0 | 角色灵符值 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;online_time | false | Int | 0 | 本次在线时长 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attack | false | Int | 0 | 攻击力 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;profession | false | String | - | 职业 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gang_name | false | String | - | 帮会(行会)名称 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trans_level | false | Int | 0 | 转生等级 |
> | sign | true | String | - | 签名 |
##### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ----------- | ---- | ------ | ------ | -------- |
> | status_code | true | Int | - | 状态码 |
> | msg | true | STRING | - | 返回信息 |
> | data | | | | |
##### EVENT枚举
> | EVENT | 说明 |
> | -------- | -------- |
> | create | 创建角色 |
> | online | 角色上线 |
> | offline | 角色下线 |
> | level_up | 角色升级 |
> | delete | 删除角色 |
> | recharge | 角色充值 |
> | other | 其他 |
##### 请求示例
```php
<php?
public function report(){
$host = 'https://zyouapi.wozhangwan.com';
$checkLoginUrl = '/mini_sdk/role/severReport';
$url = $host.$checkLoginUrl;
$gameSecret = "game_secret";
$body = ["game_id" => 121, //角色当前SDK方游戏ID
"player_id" => 1245,//游戏登录后由 SDK 返回的player_id
"type" => 1,//游戏角色操作环境,1:H5网页端,2:小游戏端,3:android游戏
"os" => "windows",//游戏操作系统:windows,android,ios
"device_number" => "number",//设备型号
"device_brand" => "brand",//设备品牌
"role" =>[
"event" => 1,//角色事件类型
"server_id" =>1,//游戏区服ID
"server_name" => "区服一",//游戏区服名称
"cp_role_id" => "roleId",//游戏中角色唯一ID
"role_name" => "角色名称",//游戏角色名称
"role_level" => "11",//角色等级
"role_vip" => "0",//角色vip等级
"combat_num" => "0",//角色战力值
"online_time" => "0"//角色在线时长,单位为秒
]
];
$body["sign"] = makeSign($body, $gameSecret);
$headers = ["Content-Type:application/json"];
$response = curl_post($url, $body, $hearders);
}
public function makeSign($params,$gameSecret){
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
ksrot($val, SORT_REGULAR); //数组对象参数进行排序
$val = json_encode($val, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
return md5($signStr);
}
public function curl_post($url, $body, $headers){
//初始化
$curl = curl_init ( ) ;
//设置抓取的url
curl_setopt ( $curl , CURLOPT_URL , $url) ;
//设置头文件的信息作为数据流输出
curl_setopt ( $curl , CURLOPT_HEADER , 1 ) ;
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt ( $curl , CURLOPT_RETURNTRANSFER , 1 ) ;
//设置post方式提交
curl_setopt ( $curl , CURLOPT_POST , 1 ) ;
//设置post参数
curl_setopt ( $curl , CURLOPT_POSTFIELDS , json_encode($body) ) ;
//设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//执行命令
$data = curl_exec ( $curl ) ;
//关闭URL请求
curl_close ( $curl ) ;
//显示获得的数据
return json_decode($data, true);
}
```
### 3.6.2是否允许创角接口<a name="sec3.6.2"></a>
> 接口需要进行签名,签名方法详见[签名规则6](#sigin6)
游戏服务端询问SDK服务器一个游戏账号是否允许继续创角;
/server/role/checkRoleCreate
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ---- |
> | Content-Type | true | application/json | |
> **Body:**
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :---------------------------------------------------------- | :---- | :----- | :----- | :----------------------------------------- |
> | player_id | true | Int | - | 游戏登录后由 SDK 返回的player_id | |
> | sign | true | String | - | 签名 |
##### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ------------------------------------------------------------ | ---- | ------ | ------ | ------------------------- |
> | status_code | true | Int | - | 状态码 |
> | msg | true | String | - | 返回信息 |
> | data | true | Object | | 返回数据对象 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data | true | Object | | 数据对象 |
> | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role_create | true | Int | 1 | 1:允许创角,0:不允许创角 |
``
### 3.6.3聊天记录上报接口<a name="sec3.6.3"></a>
> 接口需要进行签名,签名方法详见[签名规则6](#sigin6)
游戏服务端上报玩家聊天记录到 SDK 服务器
/server/chat/report
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ---- |
> | Content-Type | true | application/json | |
> **Body:**
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :----------------------------------------------------------- | :---- | :----- | :----- | :--------------------------------------------------------- |
> | game_id | true | Int | - | 游戏的game_id, 角色当前游戏ID |
> | player_id | true | Int | - | 游戏登录后由 SDK 返回的player_id |
> | type | true | Int | 1 | 游戏角色操作环境,1:H5网页端,2:小游戏端,3:Android游戏 4:ios |
> | os | false | String | - | 操作系统 |
> | chat_type | true | String | - | 聊天类型1 当前 2 队伍 3 帮派/工会 4 . 世界 5. 谣言 6 . 系统 7. 好友 8.其他 9 .私聊|
> | role_name | true | String | - | 角色名称 |
> | content | true | String | - | 聊天内容 |
> | action_time | true | dateTime | - | 发言时间 2023-05-01 12:23:44 |
> | server_name | true | String | - | 区服名称 |
> | server_id | true | string | - | 区服ID |
> | cp_role_id | true | string | - | 角色ID |
> | cp_account | rue | string | - | cp 账号信息 |
> | target_cp_account | False | String | | 对方账号 |
> | target_cp_role_id | False | String | | 对方角色IP |
> | target_player_id | False | Int | | 对方返回player_id |
> | target_role_name | False | String | | 对方角色名 |
> | last_ip | False | String | | 历史IP |
> | current_ip | False | String | | 当前IP |
> | sign | true | String | - | 签名 |
##### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ----------- | ---- | ------ | ------ | -------- |
> | status_code | true | Int | - | 状态码 |
> | msg | true | STRING | - | 返回信息 |
> | data | | | | |
### 3.6.4地图记录上报接口<a name="sec3.6.4"></a>
游戏服务端上报玩家地图切换记录到 SDK 服务器
server/map/report
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ---- |
> | Content-Type | true | application/json | |
> **Body:**
>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :-------------- | :---- | :------- | :----- | :----------------------------------------------------------- |
> | game_id | true | Int | - | 游戏的game_id, 角色当前游戏ID |
> | player_id | true | Int | - | 游戏登录后由 SDK 返回的player_id |
> | type | true | Int | 1 | 游戏角色操作环境,1:H5网页端,2:小游戏端,3:Android游戏 4:ios |
> | os | false | String | - | 操作系统 |
> | role_name | true | String | - | 角色名称 |
> | last_map_name | true | String | - | 原地图 |
> | target_map_name | True | String | - | 新地图 |
> | action_time | true | dateTime | - | 切换时间 2023-05-01 12:23:44 |
> | server_name | true | String | - | 区服名称 |
> | server_id | true | string | - | 区服ID |
> | cp_role_id | true | string | - | 角色ID |
> | cp_account | rue | string | - | cp 账号信息 |
> | main_game_id | true | Int | - | 主游戏ID |
> | sign | true | String | - | 签名 |
##### 返回参数
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | ----------- | ---- | ------ | ------ | -------- |
> | status_code | true | Int | - | 状态码 |
> | msg | true | STRING | - | 返回信息 |
> | data | | | | |
##### 请求示例
```php
<php?
public function report(){
$host = 'https://zyouapi.wozhangwan.com';
$checkLoginUrl = '/server/role/checkRoleCreate';
$url = $host.$checkLoginUrl;
$gameSecret = "game_secret";
$body = ["player_id" => 1245,//游戏登录后由 SDK 返回的player_id];
$body["sign"] = makeSign($body, $gameSecret);
$headers = ["Content-Type:application/json"];
$response = curl_post($url, $body, $hearders);
}
public function makeSign($params,$gameSecret){
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
ksrot($val, SORT_REGULAR); //数组对象参数进行排序
$val = json_encode($val, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
return md5($signStr);
}
public function curl_post($url, $body, $headers){
//初始化
$curl = curl_init ( ) ;
//设置抓取的url
curl_setopt ( $curl , CURLOPT_URL , $url) ;
//设置头文件的信息作为数据流输出
curl_setopt ( $curl , CURLOPT_HEADER , 1 ) ;
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt ( $curl , CURLOPT_RETURNTRANSFER , 1 ) ;
//设置post方式提交
curl_setopt ( $curl , CURLOPT_POST , 1 ) ;
//设置post参数
curl_setopt ( $curl , CURLOPT_POSTFIELDS , json_encode($body) ) ;
//设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//执行命令
$data = curl_exec ( $curl ) ;
//关闭URL请求
curl_close ( $curl ) ;
//显示获得的数据
return json_decode($data, true);
}
```
##### 签名规则7<a name="sigin7"></a>
1. POST 数据结构 JSON
2. Header数据需要加验证参数 Authorization
3. Authorization 将请求数据,
a. 按照key ascll 码小到大排序,
b.拼接参数 string = "cp_role_id=value1&token=value2&time=当天的年月日date('Y-m-d')" + secert;
c. 将string 转为32 位的md5数据, stringMd5 = string.md5();
d. 截取stringMd5 第二位到第17位, 一共 16位字符串, 之后转为大写, 为Authorization
### 3.7.1 AI获取角色标签接口<a name="sec3.7.1"></a>
> 接口需要进行签名,签名方法详见[签名规则7](#sigin7)
获取角色标签
/server/chat/getRoleLabel
请求数据
| 字段 | 是否必传 | 字段类型 | | |
| ---------------- | -------- | -------- | ----------------------------------------- | ---- |
| cp_role_id | 是 | String | 角色ID | |
| token | 是 | String | token 谛听 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
| data | 是 | obj | 返回信息 : |
| data.level | 是 | string | 标签 : |
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论