# 桌面会员入口与支付对接边界

## 本轮范围

- 第一栏头像下方显示免费版 / VIP / SVIP；读取中、失败不会当作免费。
- 个人卡片显示会员等级、有效期、赠送 / 永久状态，进入桌面会员窗口。
- 窗口展示 VIP / SVIP 权益和实际在售套餐，支持选择与刷新状态。
- 按产品确认，支付按钮点击后仅提示「桌面端支付开发中」，**没有订单创建、扣款或模拟成功**。永久会员不展示重复开通。
- 会员与托管 AI 余额是不同业务；不得复用余额充值订单当作会员支付。

## 已复用的合同

| 数据 | 当前后端接口 | 桌面入口 |
| --- | --- | --- |
| 当前账号会员 | POST /api/v1/premium/get/member | membership.current |
| 在售套餐 | POST /api/v1/payment/get/sale-product | membership.catalog |
| 完整权益 | 手机端同一 H5 /app/membership/rights | 窗口「查看完整权益对比」 |

会员时间为 Unix 微秒；金额 money 为人民币分。赠送会员按当前权益显示；永久会员识别沿用 Flutter 约定。在售周期、金额及是否自动续费来自接口，不捏造终身套餐或促销。

主要实现：`src/services/membership-service.ts`、`src/client/ArkmeMembershipDialog.tsx`、`src/client/arkme-membership.ts`。状态查询与背景音会员校验共用账号绑定的读取逻辑。所有查询携带预期账号并在返回时校验账号；切换账号丢弃旧数据。

## 留给后续支付开发

现有支付宝会员接口返回 TradeAppPay 参数，微信返回 App SDK 预支付参数；这些不是可直接用于桌面的支付链接或二维码。本轮不改后端、不接原生 SDK。

需要后端与支付同事确认满足以下能力的最终方案，不限定新增接口名称或内部存储实现：

1. 当前账号和实际可购 SKU 的桌面支付能力、金额、币种、周期及续费条款。桌面与渠道价格有区别时必须明确展示。
2. 用户确认后才创建订单，幂等防止重复点击；返回可在桌面使用的扫码 / 网页支付动作及有效期。
3. 可查询订单权威状态，覆盖处理中、成功、取消、过期、失败；不能仅凭关闭窗口或跳转成功判定付款成功。
4. 支付成功后重新读取会员权益；有延迟时展示「权益更新中」，可重试，不重复扣款。
5. 订单查询和支付结果按账号隔离；退出登录、切换账号、关闭窗口及断网后恢复均有明确行为。
6. 续费 / 升级 / 已有订阅 / 赠送或永久会员的可购规则由业务确认；前端不自行推算抵扣或叠加。

验收同时覆盖读数据与支付动作；可以将相同业务能力按权限提供给 DSH，但不把「DSH 可以查到」等同于支付流程验收。不得自动提交支付或泄露凭据。
