尊享 VIP(C.XS443)前端对接文档
面向 App/H5 活动页与支付流程。协议约定与 Splay 2.0 前端对接文档 第 2 节相同:POST、登录态、snake_case、金额为 decimal 字符串、时间为 Unix 秒(int64 在 JSON 里可能是字符串或数字)。
管理后台改动见文末第 7 节。
1. 活动规则(展示用)
| 项 | 说明 |
|---|---|
| 活动名 | 永久尊享 VIP(VIP Abadi) |
| 目标用户 | 仅 1.0 迁移用户(is_legacy_user = true) |
| 上线时间 | 2026-09-08 16:00:00(东七区 / GMT+7) |
| 可购买窗口 | 上线起 7 天:[started_at, ended_at) → 截止 2026-09-15 16:00:00(东七区) |
| 售价 | 19.99 USD(页面文案可写「19.99 硬币」,实际为法币订单,禁止用余额硬币支付) |
| 加速方案用户 | 活动上线后直接赠送,不可购买;底部按钮「会员已激活」 |
| 免费方案 / 未选方案 | 窗口内法币支付开通 |
| 开通权益 | ① 剩余锁定的 1.0 硬币全部解锁到待兑换(不自动兑换)② 之后支持普通机器人活跃值 +5%(智投、AI SOLO 不加) |
| 有效期 | 永久,无过期时间 |
前端不要硬编码判断是否可买 / 是否结束,一律以后端 activity_started / activity_ended / purchase_open / started_at / ended_at 为准。
2. 页面状态机
主接口:POST /v1/premium_vip/get
| 条件 | 页面建议 |
|---|---|
!eligible(非 1.0) |
非活动对象:隐藏购买,或提示仅限迁移用户 |
!activity_started |
未开始:倒计时到 started_at |
activity_started && button_activated |
已开通态:SVIP 角标「尊享赠予」或「已开通」;底部「会员已激活」;展示 legacy_coin_display |
activity_started && !button_activated && purchase_open |
可购买态:角标「19.99硬币」;底部「19.99·立即开通·全部解锁 →」;用 deposit_channels 拉起支付 |
activity_started && !button_activated && !purchase_open |
购买结束且未开通:展示结束态,不再展示支付渠道 |
type PremiumVipPage =
| "not_eligible"
| "not_started"
| "activated"
| "can_buy"
| "purchase_ended";
function premiumVipPage(s: {
eligible: boolean;
activity_started: boolean;
button_activated: boolean;
purchase_open: boolean;
}): PremiumVipPage {
if (!s.eligible) return "not_eligible";
if (!s.activity_started) return "not_started";
if (s.button_activated) return "activated";
if (s.purchase_open) return "can_buy";
return "purchase_ended";
}
角标建议:
| 条件 | 角标文案 |
|---|---|
activated && premium_vip_source === 1 |
尊享赠予 |
activated && premium_vip_source === 2 |
已开通 |
button_activated && !activated(加速待落库) |
可按「尊享赠予 / 会员已激活」展示 |
| 可购买 | 19.99硬币 |
3. C 端接口
3.1 活动页主数据
POST /v1/premium_vip/get
请求:空 body {}
响应:
| 字段 | 类型 | 说明 |
|---|---|---|
activity_started |
bool | 是否已到上线时间 |
activity_ended |
bool | 可购买窗口是否已结束 |
started_at |
int64 | 上线时间 Unix 秒 |
ended_at |
int64 | 可购买截止 Unix 秒 |
purchase_open |
bool | 当前是否可法币购买(已开始且未结束) |
is_legacy_user |
bool | 是否 1.0 迁移用户 |
eligible |
bool | 是否活动对象(同 is_legacy_user) |
activated |
bool | premium_vip_at 是否已落库(真正开通) |
premium_vip_at |
int64 | 开通时间 Unix 秒;未开通为 0 |
premium_vip_source |
int32 | 0 未开通 / 1 加速赠予 / 2 法币购买 |
scheme |
enum | 金库方案:NONE(0) / REGULAR(1) / ACCELERATED(2)(流水里的 PREMIUM_VIP(3) 不会作为金库当前 scheme) |
price |
string | 售价 USD,如 "19.99" |
legacy_coin_display |
string | 活动页「你的 1.0 硬币」展示额(见下) |
unlocked_unexchanged |
string | 真实已解锁未兑换 |
button_activated |
bool | true → 底部「会员已激活」;false → 「立即开通」 |
deposit_channels |
array | 可购买时返回;按 19.99 USD 换算 IDR 过滤后的法币渠道;否则 [] |
legacy_coin_display 口径
| 状态 | 展示额 |
|---|---|
已开通 activated |
unlocked_unexchanged(真实待兑换) |
| 未开通 | original_total - exchanged_total(开通后待兑换宣传口径) |
金额均为 numeric 字符串,展示用 Decimal,勿用 JS 浮点做最终运算。
deposit_channels[]
| 字段 | 类型 | 说明 |
|---|---|---|
pay_type |
enum | 映射到对应 Create*Pay 接口 |
display_name |
string | 渠道展示名 |
params |
map<string,string> | 创建支付时原样带回(如 method / payment) |
min_amount / max_amount |
int64 | IDR 限额,0=不限 |
不要用
POST /v1/order/deposit/channel/list(按整数硬币换算)来拉尊享 VIP 渠道;活动页已内置按 19.99 USD 过滤的列表。
3.2 下单(仅可购买用户)
POST /v1/order/create
{
"product_type": "PRODUCT_TYPE_PREMIUM_VIP",
"quantity": 1,
"ref_id": 0
}
| 字段 | 要求 |
|---|---|
product_type |
必须 PRODUCT_TYPE_PREMIUM_VIP(值为 6) |
quantity |
固定 1 |
ref_id |
0(无商品 catalog id) |
pay_type |
可先不传;禁止传硬币类:INTEGRAL / INTEGRAL_CONSUME / INTEGRAL_CONSUME_MIX |
成功响应:
| 字段 | 说明 |
|---|---|
no |
订单号,用于拉起三方支付 |
常见失败(业务码以网关 code 为准):
| 场景 | 典型 code |
|---|---|
| 非购买窗口 / 无权限 | CODE_FORBIDDEN |
| 已开通或加速用户不可买 | CODE_ALREADY_VIP |
| 已有未支付尊享 VIP 单 | CODE_ORDER_STATUS_ERROR |
| 硬币支付 | CODE_PAY_METHOD_ERROR |
不要调用 POST /v1/order/pay(硬币支付);尊享 VIP 只走法币。
3.3 拉起法币支付
流程与充值/硬币包相同:
GetPremiumVipState
→ 选 deposit_channels 中一项
→ CreateOrder(PRODUCT_TYPE_PREMIUM_VIP)
→ 按 pay_type 调对应 Create*Pay(带 order_no + 渠道 params + 回跳 URL)
→ 三方收银台
→ 回跳后轮询/刷新 GetPremiumVipState 或 GetOrder
pay_type → 接口映射(与现有充值一致):
pay_type |
创建接口 | 说明 |
|---|---|---|
PAY_TYPE_JAYA |
POST /v1/order/jaya/create |
body 含 order_no、callback_url、method(来自 params) |
PAY_TYPE_FUTUREPAY |
POST /v1/order/future/create |
order_no、return_url |
PAY_TYPE_UNISPAY |
POST /v1/order/unispay/create |
按现有 Unispay 参数 |
PAY_TYPE_EASYPAY |
POST /v1/order/easypay/create |
按现有 EasyPay 参数 |
PAY_TYPE_YDP |
POST /v1/order/ydp/create |
payment 等来自 params |
PAY_TYPE_HAIPAY |
POST /v1/order/haipay/create |
按现有 Haipay 参数 |
| … | … | 以后台启用的 deposit_channels 为准 |
支付成功回跳后:
- 可调对应
Check*Pay(如/v1/order/jaya/check)或POST /v1/order/get - 再调
POST /v1/premium_vip/get:期望activated=true、button_activated=true、premium_vip_source=2 - 展示「VIP 已开通」弹窗;点「查看我的 VIP 卡」进入已开通页(角标「已开通」)
支付失败:提示失败并回到支付页 / 活动可购买态。
4. UI 字段对照(相对原型)
| 原型位置 | 数据来源 |
|---|---|
| SVIP 卡右上角角标 | 见第 2 节角标表 |
| 「你的 1.0 硬币」余额 | legacy_coin_display |
| 底部主按钮 | button_activated |
| 支付方式列表 | deposit_channels |
| 价格文案 | price(USD 字符串) |
解锁说明文案(产品向):开通后锁定的 1.0 硬币全部进入待兑换;每周兑换仍走原 1.0→2.0 周额度规则(POST /v1/legacy_point/exchange),本活动不自动兑换。
5. 枚举速查
| 枚举 | 值 | 含义 |
|---|---|---|
PRODUCT_TYPE_PREMIUM_VIP |
6 | 尊享 VIP 商品(新建,勿用旧 PRODUCT_TYPE_VIP=3) |
LegacyUnlockScheme_NONE |
0 | 未选方案 |
LegacyUnlockScheme_REGULAR |
1 | 免费解锁 |
LegacyUnlockScheme_ACCELERATED |
2 | 加速方案 |
LegacyUnlockScheme_PREMIUM_VIP |
3 | 仅解锁流水展示用,金库 scheme 不会变成该值 |
premium_vip_source |
1 / 2 | 赠予 / 法币购买 |
6. 建议联调检查清单
- [ ] 非 1.0 用户:
eligible=false,无购买入口 - [ ] 加速用户:活动开始后
button_activated=true,不能CreateOrder - [ ] 免费/未选:窗口内可下单 + 渠道支付;成功后
activated=true、source=2 - [ ] 硬币支付被拒(
CODE_PAY_METHOD_ERROR) - [ ] 窗口结束后
purchase_open=false,deposit_channels为空,下单失败 - [ ] 开通后
legacy_coin_display变为待兑换余额;周兑换流程仍可用 - [ ] 支付回跳后刷新活动态,弹开通成功窗
7. 管理后台(简要)
| 能力 | 说明 |
|---|---|
| 用户详情 | POST /v1/man/users/get 新增 premium_vip_at(Unix 秒,0=未开通);展示格式 yyyy-mm-dd hh:mm:ss |
| 1.0 解锁流水 | 现有 POST /v1/man/users/legacy_point/unlock_ledger/list;若 scheme = PREMIUM_VIP(3),期数/方案文案均展示「尊享VIP」,比例 1 |
| 法币订单 | 现有 POST /v1/man/order/list;商品类型筛选项增加 PRODUCT_TYPE_PREMIUM_VIP(6)。列表:商品名「尊享VIP」、数量 1、单价/合计/实付 19.99 |
成交订单以 status=FINISHED 为准;若用户已获赠送后仍完成渠道扣款,服务端可能将订单置为 CANCELED 并打运维对账日志,前端管理列表勿把此类单当成交。