用户行为轨迹
基于会员 UID 查询该用户的行为轨迹(浏览、进入小程序、提交/支付/取消订单、分享、核销等),与后台「会员详情-行为轨迹」页同源。每条记录返回行为时间、行为描述文本、停留时长及关联对象,支持时间起点过滤、分页。
GET/api/getUserTrace
核心语义
- 按会员维度查询:以
uid(会员 UID)为主键返回该用户的全部行为记录,按行为时间倒序(最新在前)。 - 行为描述开箱即用:
content为纯文本(无 HTML 标签),已包含营种名称、订单号、所属员工、邀请人、场景值等注记,可直接展示或入库。 - 停留时长过滤:
max_time传入且大于 0 时,过滤掉停留时长不足指定秒数的浏览类记录(与后台页面「仅显示停留时间大于 1 分钟」一致,通常传60)。 - 不返回总条数:本接口
data中没有total字段——行为日志有效记录数不定,请循环翻页直至list为空或条数不足pageSize即视为结束。 - 展示口径与后台一致:部分内部埋点类、消息类行为日志不在返回范围内,因此相邻两条记录时间可能不连续。
- 契约:
code恒为0;成功时msg为空;失败时msg非空、data为空数组。业务成功与否以msg判定。
请求参数
| 名称 | 类型 | 描述 | 是否必填 | 默认值 | 备注 |
|---|---|---|---|---|---|
| token | String | 身份校验令牌 | 必填 | - | 由 获取访问令牌 获得 |
| uid | Number | 会员 UID | 必填 | - | 见 获取会员列表 |
| start_time | String | 行为时间起点 | 选填 | 不限 | 只返回该时间之后的行为记录;日期字符串(如 2026-05-01)或时间戳 |
| max_time | Number | 停留时长过滤阈值(秒) | 选填 | 不筛选 | 传入且大于 0 时,过滤掉停留时长不足该秒数的浏览类记录(通常传 60) |
| pageNum | Number | 页码 | 选填 | 1 | 从 1 开始 |
| pageSize | Number | 每页条数 | 选填 | 10 | 最大 20(超出按 20 返回) |
CURL
V1(GET)
curl --location --request GET 'https://open.xinduobang.cn/api/getUserTrace?token=YOUR_TOKEN&uid=8034&pageSize=2'
V1(POST)
curl --location --request POST 'https://open.xinduobang.cn/api/getUserTrace' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'token=YOUR_TOKEN' \
--data-urlencode 'uid=8034' \
--data-urlencode 'start_time=2026-05-01' \
--data-urlencode 'max_time=60' \
--data-urlencode 'pageNum=1' \
--data-urlencode 'pageSize=20'
V2(appid 为 V2 版本)
curl --location --request POST 'https://open.xinduobang.cn/api/getUserTrace' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'X-Timestamp: 1770000000' \
--header 'X-Nonce: 3f9c1a7b2e6d4058' \
--header 'X-Signature: <computed_hmac_sha256>' \
--data-urlencode 'token=YOUR_TOKEN' \
--data-urlencode 'uid=8034' \
--data-urlencode 'pageSize=20'
信息
V2 签名算法及 X-Signature 计算方式见 V2 接入示例。
成功响应
{
"code": 0,
"msg": "",
"data": {
"pageNum": 1,
"pageSize": 2,
"list": [
{
"action_time": "2026-10-30 18:15:15",
"type": 55,
"content": "支付营种:示例营种A,订单号:NO20261030181512364910",
"stay_seconds": 0,
"access_id": 142611
},
{
"action_time": "2026-10-30 18:15:12",
"type": 57,
"content": "提交营种订单:示例营种A,订单号:NO20261030181512364910【订单所属员工:王*磊】",
"stay_seconds": 0,
"access_id": 142611
}
]
}
}
data 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| pageNum | Number | 当前页码 |
| pageSize | Number | 每页条数 |
| list | Array | 行为记录列表,按时间倒序(最新在前);无 total 字段,翻页直至 list 为空或不足 pageSize 即结束 |
list[] 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| action_time | String | 行为发生时间,格式 YYYY-MM-DD HH:mm:ss |
| type | Number | 行为类型编码(见下方对照表),如 2=浏览营种详情、55=支付营种订单、57=提交营种订单、58=取消营种订单等 |
| content | String | 行为描述纯文本,已包含营种名称、订单号、所属员工、邀请人、场景值等注记,如 支付营种:xxx营种,订单号:NO2026… |
| stay_seconds | Number | 该次行为停留时长(秒);订单、分享等非浏览类行为为 0 |
| access_id | Number | 关联对象 ID,含义随 type 变化:浏览类为营种 ID,订单类为订单 ID;无关联对象时为 0 |
注意事项
- 本接口不返回总条数
total:请循环翻页直至list为空或条数不足pageSize即视为结束。 - 部分内部埋点类、消息类行为日志不在展示范围内(与后台页面展示口径一致),因此相邻两条记录时间可能不连续。
content为纯文本(无 HTML 标签),可直接展示或入库。
失败响应
契约下
code恒为0,失败通过非空msg与空data标识。
{ "code": 0, "msg": "uid不能为空", "data": [] }
{ "code": 0, "msg": "会员不存在", "data": [] }
{ "code": 0, "msg": "start_time格式错误", "data": [] }
| 错误文案 | 说明 |
|---|---|
uid不能为空 | uid 缺失 |
会员不存在 | uid 对应的会员不存在 |
start_time格式错误 | start_time 无法解析为日期字符串或时间戳 |
附录:行为类型编码(type)对照表
以下为本接口实际可能返回的全量类型(部分内部埋点类型已被平台展示口径过滤,不会下发)。content 为行为描述模板,{xxx} 表示动态内容(营种/商品/文章名称、订单号等)。
访问与浏览
| type | 含义 | content 模板 |
|---|---|---|
| 1 | 访问首页 | 访问:首页 |
| 2 | 浏览营种详情 | 访问:{营种名称} |
| 3 | 访问营种列表 | 访问:营种列表 |
| 4 | 访问商城列表 | 访问:商城列表 |
| 5 | 浏览商城商品详情 | 访问:{商品名称} |
| 7 | 查看营种往期回顾 | 在营种 {营种名称} 详情页-查看往期回顾 |
| 8 | 访问自定义装修页 | 访问自定义装修页:{页面名称} |
分享
| type | 含义 | content 模板 |
|---|---|---|
| 50 | 分享首页 | 分享:首页 |
| 51 | 分享拼团 | 分享:拼团 |
| 52 | 分享商城商品 | 分享:{商品名称} |
| 53 | 分享营种 | 分享:{营种名称} |
| 54 | 分享营种列表 | 分享:营种列表 |
| 67 | 分享商城列表 | 分享:商城列表 |
| 69 | 分享砍价 | 分享:砍价 |
订单与交易
| type | 含义 | content 模板 |
|---|---|---|
| 55 | 支付营种订单 | 支付营种:{营种名称},订单号:{订单号} |
| 56 | 实名认证 | 认证 |
| 57 | 提交营种订单 | 提交营种订单:{营种名称},订单号:{订单号}【订单所属员工:{姓名}】 |
| 58 | 取消营种订单 | 取消营种订单:{营种名称},订单号:{订单号} |
| 59 | 商城下单 | 商城下单:{商品名称} |
| 60 | 取消商城订单 | 取消商城订单:{商品名称} |
| 61 | 支付商城订单 | 支付商城订单:{商品名称} |
| 62 | 购买年卡 | 购买年卡:{年卡名称} |
| 63 | 支付差价 | 支付差价 |
| 64 | 购买 VIP | 购买vip |
| 65 | 领取临时订单 | 领取临时订单 |
| 66 | 确认临时订单 | 确认临时订单:订单号:{订单号} |
| 183 | 提交满营排队报名 | 提交满营排队报名:{营种名称} |
| 184 | 提交满营排队报名(生成订单) | 提交满营排队报名:{营种名称},订单号:{订单号} |
| 185 | 抖音订单退款 | 抖音退款:{营种名称},订单号:{订单号} |
| 186 | 抖音下单 | 抖音下单:{营种名称},订单号:{订单号} |
| 187 | 绑定抖音订单 | 绑定抖音订单:{订单信息} |
| 206 | 绑定会员 | 绑定会员:会员编号.{UID}【{姓名}-{手机号}】绑定 |
页面行为与互动埋点
| type | 含义 | content 模板 |
|---|---|---|
| 68 | 初次进入系统 | 初次进入系统 |
| 70 | 阅读文章 | 阅读文章:{文章标题} |
| 71 | 确认隐私协议 | 确认隐私 |
| 72 | 分享报名表 | 分享报名表:订单号:{订单号} |
| 73 | 点击分享报名表 | 点击分享报名表:订单号:{订单号} |
| 74 | 保存分享报名表数据 | 保存分享报名表数据:订单号:{订单号} |
| 80 | 浏览营种评价 | 浏览营种评价,营种名称:{营种名称} |
| 83 | 营种详情页拉到页底 | 营种名称:{营种名称} ,拉到了页面底部 |
| 84 | 文章阅读进度 | 仅在有有效埋点数据时返回 |
| 85 | 详情页点击去往个人中心 | 营种名称:{营种名称} ,由详情页点击去往个人中心 |
| 86 | 点击查看已报名人数 | 营种名称:{营种名称} ,由详情页点击查看已经报名人数,现有报名人数 {N} |
| 87 | 详情页点击选择营期 | 营种名称:{营种名称} ,由详情页点击选择营期 |
| 88 | 详情页点击回到首页 | 营种名称:{营种名称} ,由详情页点击回到首页 |
| 89 | 详情页点击咨询按钮 | 营种名称:{营种名称} ,由详情页点击咨询按钮 |
| 90 | 详情页点击查看全部评价 | 营种名称:{营种名称} ,由详情页点击查看全部评价 |
| 91 | 营种列表搜索 | 仅在有有效埋点数据时返回 |
| 92 | 年卡详情页点击预约营种 | 在年卡 {年卡名称} 的详情页,点击去预约的营种为:{营种名称} |
| 93 | 详情页点击年卡优惠项 | 营种名称:{营种名称},由详情页点击年卡优惠项{规格信息} |
| 94 | 下单页点击查看订单明细 | 营种名称:{营种名称},营种下单页点击查看订单明细 |
| 95 | 营种下单页行为 | 仅在有有效埋点数据时返回 |
| 96 | 详情页邀请好友参团 | 营种名称:{营种名称}, 详情页邀请好友一起参团 |
| 97 | 个人中心查看储值卡 | 用户个人中心:点击查看储值卡列表, 当前用户的储值卡张数{N} |
| 98 | 订单详情页查看协议 | 在营种订单{订单号}的详情页, 当前用户查看了订单协议 |
| 99 | 订单详情页查看缴费证明 | 在营种订单 {订单号} 的详情页, 当前用户点击查看缴费证明 |
| 100 | 个人中心查看年卡 | 用户个人中心:点击查看年卡, 当前用户的年卡张数 {N} |
| 101 | 个人中心查看 VIP | 用户个人中心:点击查看VIP, 当前用户{VIP信息} |
| 102 | 个人中心查看全部订单 | 用户个人中心:点击查看全部订单 |
| 103 | 查看年卡详情页 | 在用户个人中心,查看了年卡 {年卡名称} 的详情页 |
备注
- 行为描述末尾可能追加
【场景值:xxx】、【邀请会员:xxx】、【销售链接:xxx】等注记; - 未列入本表的行为类型编码均不会经由本接口下发;平台后续新增行为类型时,以接口实际返回为准。
相关接口
变更记录
| 日期 | 变更 |
|---|---|
| 2026-11-03 | 首次发布:/api/getUserTrace(GET/POST:uid 必填,start_time/max_time/分页选填),透传上游 /Tools/getUserTrace。按会员 UID 查询行为轨迹(与后台「会员详情-行为轨迹」同源):浏览/下单/支付/取消/分享/核销等,时间倒序;content 为含注记的纯文本;不返回 total,翻页至空即结束;附录含行为类型编码全量对照表 |