投票奖励
投票奖励使用 server.vote 和 project.vote Webhook 事件:处理器接收事件,通过 API 获取投票数据,并且只发放一次奖励。
请先配置 项目 Webhook 和 signature 验证。投票数据通过 GET /votes/:vote_id 请求。
流程如何工作
- 接收 Webhook 事件并验证 signature。如果 is_test 为
true,返回204,不要请求投票数据,也不要发放奖励。 - 确认
event_type等于server.vote或project.vote。 - 将
event_id作为投票 ID 使用。 - 通过 GET /votes/:vote_id 获取投票数据,并在你的系统中找到玩家。
- 在同一个事务中按
event_type+event_id应用防重复处理,并且只为新事件发放奖励。 - 如果无法安全发放奖励,请返回错误响应。修复原因后,从界面重新发送投递。
奖励示例
假设玩家 PlayerName 为 ID 为 1 的服务器投票,而你的系统需要给他增加 100 枚金币。
- GAMEMONITORING 发送 Webhook,包含
event_type: server.vote和event_id: 9824cabb-2203-437e-9b6c-aba43dde3e4b。 - 处理器验证 signature。如果签名无效,返回
401并停止。 - 处理器请求
GET /votes/9824cabb-2203-437e-9b6c-aba43dde3e4b,获得昵称、服务器和用户数据,然后找到本地账号。 - 在事务中,处理器保存
event_type+event_id用于防重复处理。 - 对于新事件,处理器在同一个事务中增加
100枚金币。 - 重复投递时,处理器找到已经保存的事件,不再次发放奖励,并返回
204。
同一流程也适用于物品、角色、VIP 时长、促销码或内部队列中的任务。
投票事件
服务器投票会发送 server.vote,项目投票会发送 project.vote。事件请求体只包含投递数据:event_type、event_id、is_test 和 signature。完整投票数据必须单独请求。
在此事件中,event_id 是投票 ID。不要把 Webhook 请求体作为昵称、服务器或用户数据来源:这些值来自 API。
获取投票数据
把 event_id 当作 vote_id 使用,并通过 GET /votes/:vote_id 请求投票数据:
发放奖励通常需要 response.nickname、response.server 和公开的 response.user 数据。如果奖励依赖具体服务器,请始终检查 response.server.id。
字段使用方式:response.nickname 帮助在你的数据库中查找玩家账号,response.server.id 选择服务器的奖励规则,response.user.id 可以作为投票的 GAMEMONITORING 用户 ID 保存到奖励日志。
如果 API 暂时不可用或返回意外响应,请不要在未验证的情况下发放奖励。返回错误码,修复原因后从界面重新发送投递。
第 3 步:投票奖励处理器
示例延续基础处理器:它会验证签名,获取投票数据,防止事件重复处理,并在同一个事务中发放奖励。请把用户表名、余额字段和玩家查找规则替换为你系统中的结构。
运行示例前,请先配置 项目 Webhook,检查 GET /votes/:vote_id,并把 SQL 用户更新语句替换为你的账号模型。