server/laf-cloud/docs/pass-check-settlement.txt

56 lines
3.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

战令结束结算接入说明(2026-10-08)
时间契约
沿用现有 passCheck/read 返回的 time:毫秒级周期起点,结束点为 time + 30 天。
不把该值改成秒,也不改变已存档 stage.time(毫秒结束点)。周期保留运营配置的
北京时间起点,不再按云函数宿主本地时区 setHours,也不再由不同接口分别推进30/60天。
发布清单(本次只本地实现和测试,尚未部署)
1. 先发布 passCheckSettlement、passCheckJobs、passCheckUpgrade、passCheck、
passCheckTime、wx/checkIos。passCheckUpgrade 补齐了 POST YAML。
2. 按 functions/pass-check.trigger.json 创建/更新每分钟触发器,目标 passCheckJobs。
passCheckJobs 不开放 HTTP 方法;需要现有 PASSCHECKTIME_ID 环境配置。
3. 再发布配套客户端。旧客户端的过期进度写入将被拒绝,不能继续按旧方式领上期奖励。
4. 不清空用户历史。快照存入 users/usersAd 的 passSettlements,
passSettlementRevision 用于 CAS。后台每分钟每个用户集合扫描100条,游标保存在
passCheckJobCursors。请按用户规模评估扫描延迟;玩家请求时同样惰性补建快照。
协议
POST passCheckSettlement,使用现有 uid/token/gameName 鉴权。
read:返回 rows(按结束时间升序)、resources、serverTime。
empty_seen + end:图2实际展示后标记该期已提示。
offer_shown + end + offerToken:图1实际展示后消耗唯一展示机会;仅原令牌/登录会话
可重试确认。令牌不在 read 中返回;进程关闭后不可恢复该购买窗口。
decline + end:永久放弃该期机会,不影响已支付订单的补发。
claim + end + rewards + claimFlags:领取客户端按最新配置计算的已解锁未领奖励。
purchase_claim 另加 outTradeNo:上期18元订单补发已解锁付费奖励。
rewards 为合并后的 coin/freeze/hammer/magic/infinite_health,体力数量单位为秒。
claimFlags 仅更新实际领取的 free/passCheck 索引为0,不修改冻结经验或等级。
服务端不保存奖励配置或版本、不计算应发奖励数量。按已确认的客户端可信方案,
只检查类型/正整数、归属、支付状态和收据。此方案防重复领取,但不能防篡改客户端
伪造奖励数量;这不是服务端权威发奖方案。
一致性
到期只冻结进度、购买档位、领取标志,不给离线玩家入账。
普通进度更新用数据库 $$NOW 截止条件;冻结同时 CAS 所有进度输入。
领取资源增量与收据在同一用户文档原子写入,订单状态更新可幂等补齐。
已支付的期内订单延迟恢复时,仅接受冻结进度及订单对应权益,不接受客户端替换
过期进度。领取掩码保留,30元的20点经验/3000金币仍沿用已有权益逻辑。
同一期第二笔补购支付不二次发奖,订单标记 passReview=duplicate_post_season_payment,
需人工退款处理,不自动退款。
验证
Node 24:node --test laf-cloud/tests/pass-check-settlement.test.mjs(6项通过)。
配套客户端 tools/test-battle-pass-settlement.cjs 覆盖奖励表、UI关闭=领取、
失败重试、确认弹窗、优先队列、多期顺序和支付幂等。
现有 rookie-gift.test.mjs 在导入阶段失败:goldMiner/config 缺少 paymentProductId
导出,与本次战令改动无关,未修改该模块。
上线前真机验收
Android、原生iOS支付、客服iOS支付分别验证成功/取消/延迟回调/杀进程恢复。
跨截止时刻验证已解锁未领范围、点击X领取、奖励动画后补购、永久放弃。
断网/重复点击/跨设备重试验证资源只入账一次。停留在图1时可重试失败支付,
重新登录不恢复该期图1;已支付订单仍可从原有登录订单补发入口恢复。
本地模拟数据库和Cocos视觉预览不替代上述真实支付及云端验收。