充值与礼包
充值商品统一通过配置、服务端礼包快照及购买结果展示;商品是否开放、能否购买、奖励是否可领是不同状态。首充、每日/每周礼包、情景礼包、次充、钻石充值、月卡、通行证和英雄试炼分别有自己的消费与领取规则。
商品类型与开放
当前客户端生成表 DataTable.ProductType 定义如下。旧 GiftPack 模型中的同名枚举数值不同,只用于旧 UI 页签转换,不能据其数值解释协议或配置。
| 值 | 类型 | 正文 |
|---|---|---|
| 0 | 空 | 不作为可购买商品 |
| 1 | 钻石 | 本页钻石充值 |
| 2 | 首充 | 首充与次充 |
| 3 / 4 | 每日 / 每周礼包 | 周期礼包 |
| 5 | 特权卡 | 月卡与免广告 |
| 6 | 通行证 | 主线通行证 |
| 7 | 情景礼包 | 本页场景触发 |
| 8 | 次充 | 首充与次充 |
| 9 | 英雄试炼 | 英雄试炼 |
开放条件采用 AND,空条件不参与。包括服务器区间、玩家等级区间、开服天数、自然时间、最近 N 天充值额、场景触发及关联活动。当前 OpenDay 取开服时间加 (配置天数 - 1) × 86400;Timestamp 是开始下界,Day > 0 才产生持续天数截止,负值用于永久;不能将日数加到玩家进入页面的时刻。
等级/服务器范围按两端值判断,充值条件取最近 N 天对应窗口;关联活动未开放则商品不可用。配置不存在时关闭,不凭服务器返回一个 ProductID 就补出默认商品。场景商品需要服务端触发的结束时间:-1 为永久,其余有效结束时刻控制显示。原表希望在线热更新,当前是否所有开放条件都即时刷新仍需环境观察。
售卖方式与价格
原设计允许免费、广告、钻石、现金四种方式;当前 SellType 只有 Free=1、Diamond=2、Money=3,尚无广告售卖枚举。每日/每周页购买统一走 GiftPackBuyCommand 到 RechargeBuy,不能把免费礼包按钮或免广告特权解释为已支持广告礼包。
商品展示名取本地多语言字段,服务端 ProductName 可供平台商品用途,不能直接作为 UI 中文名。价格按售卖类型展示免费文字、钻石图标与数值、或现金币种金额;现金示意图中的人民币符号不意味着当前美元商品应显示人民币。付费金额以平台/配置商品为依据,不从折扣文字反算扣费。
钻石充值
充值表列出 6、18、30、68、98、128、198、328、648 九档,每档首次充值双倍,之后正常数量且不限次数。商店来源曾写六档并“暂不开发”,与充值来源不一致;这九档是设计表列举,当前平台实际售卖档位仍以配置为准。每档首充标识应独立,不能用“账号付费过一次”关闭全部双倍。
情景礼包
只有命中触发场景才出现,购买或过期后删除;全部礼包消失后对应页签隐藏。情景礼包不含免费项。每个卡片显示名称、奖励、价值倍率/折扣、价格、有效倒计时和限购次数,多项并存时按配置排序。
| 触发设计 | 语义 |
|---|---|
| 首次获得英雄 | 首次拥有指定英雄时触发,不是每次得到碎片 |
| 英雄达到等级 | 指定英雄升级到门槛 |
| 主线通关 | 通过指定关卡即可,不要求三星 |
| 玩家升级 | 达到玩家等级门槛 |
| 材料不足 | 最近 N 天内首次低于指定材料阈值,不能每帧检查后重复触发 |
客户端不能仅凭自身材料值生成可买商品;当前以服务端情景记录、结束时刻及配置筛选。来源没有为所有触发重入/多次购买定义规则,仍需配置/服务端证据,不自行补一个冷却周期。
权威快照、周期次数与回执
登录/礼包列表得到 RechargeMain 快照,包含商品次数、首充、卡、通行证等状态;页面从模型读取,不把关闭 UI 或本地清缓存当作重置。
| 情形 | 当前客户端计数口径 |
|---|---|
| 每日礼包 | UTC 日零点窗口 |
| 每周礼包 | UTC 周日零点窗口;不是旧稿的本地周一 |
| 合法的上一窗口记录 | 当本窗口次数为 0 |
| StartTime=0 或不是合法窗口边界 | 保留服务器 Count,不擅自归零 |
| 本窗口刚买、快照尚未追上 | pending 标记至少记为买过 1 次,防止按钮立即恢复 |
| 非周期商品 | 优先 History,再 Count,再本地购买标记 |
在线推送及直接购买回执进入 TryApplyPurchaseResult;有非空订单号时去重,避免同一回执重复应用。卡回执维护待同步到期时刻/今日领取,通行证回执按 ActivityId 刷新对应活动。奖励弹窗以实际奖励/资产变更为准,不按商品预览再次加发。
当前回执已有状态时可使用 GiftPackGetListCommand(requestSnapshot:false) 只处理展示,避免立即拉到旧快照覆盖刚完成购买。本地乐观标记之后通过登录或自然打开礼包页的快照收敛;不能写成每次到账立即强拉 RechargeMain。
已确认的静态缺口
| 项目 | 当前证据与影响 |
|---|---|
| 登录补发 | 登录快照将 SucceedList 存入 SucceedRecords,但全 GameMain 中 TakeSucceedRecords 只有定义,没有消费调用;不能声称登录补发逐条应用/展示已闭环 |
| 空订单号 | 去重依赖非空订单号,空订单回执没有同等订单去重保证 |
| 退款 | SCNoticeRechargeRefundedHandler 先应用回收物品,再拉礼包快照并发刷新;未清 PrivilegeModel._localEndTime 或 _pendingCardEndTimes,特权到期退款同步仍有 TODO |
| 广告礼包 | 当前 SellType 无广告;不能用通用广告服务存在证明广告商品实现 |
| 通行证商品 | 已有真实配置和购买路径,但购买命令仍固定商品 ID,详见通行证页 |
以上为静态源码事实,不是本轮发起支付、退款或广告操作后的结果;不自动创建缺陷单,也不据此修改游戏代码。
界面信息

依据
原 recharge-giftpack 功能页;飞书《充值》XjQNble3GorFJGxUnRec9a4Knbe 七工作表;frontend develop Docs/GiftPack/GiftPackFrameworkAndGaps.md、Docs/WorkPackages/GiftPack/ApiMap-GiftPack.md 的有效产品约定及源码核实。客户端接线、协议生命周期和既有交付证据由前端技术文档继续承担,不在本站复刻第二份 API 实现手册。