56 lines
3.8 KiB
Plaintext
56 lines
3.8 KiB
Plaintext
战令结束结算接入说明(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视觉预览不替代上述真实支付及云端验收。
|