# 从目标开始：账号、应用权益与开发者任务

## 我是普通用户：开始使用已购应用

1. 在商品页确认所属应用、权益类型、期限、绑定额度和价格。平台开发者资源不是目标应用的软件会员。
2. 下单后从本订单选择付款渠道。支付页返回不代表到账，查询可信付款结果。
3. 到账后直接发放/续期权益，本订单显示关联权益和使用方法。打开对应应用并登录，应用可用当前用户、当前应用的 `/api/v1/auth/entitlements` 恢复权益，不需要用户到处寻找或重新输入码。
4. 只有人工发码渠道才到“我的应用权益”兑换软件激活码。兑换成功进入同一权益详情。必要时按应用要求绑定设备/域名或获取在线租约。
5. 续期从原权益发起，确认延长期限/额度与报价；再次新购不保证自动合并。永久权益没有到期倒计时，但不等于无限离线运行；绑定数也不等于同时运行数。
6. 取消 OAuth 同意不退款，取消软件权益也不自动退款。退款请求、审核、渠道处理中及成功是不同状态；退款可能回收权益，续期退款可能回滚续期增量。

查不到权益时先核对登录账号、所属应用、订单和退款状态，不要把完整激活码或密钥发给支持人员。应用恢复仍受用户与应用双重隔离；其他应用/用户的权益不能读取。

## 四种业务入口，以及不应混进来的协议凭据

| 名称 | 谁生成/使用 | 归属与结果 | 在哪里用、如何失效与追踪 |
|---|---|---|---|
| 注册邀请（注册码） | 有设置权限的管理人员 → 被邀请注册者 | 平台账号准入，不授开发者、软件或管理权限 | 注册页；次数/期限/停用；注册核销与操作审计 |
| 软件激活码 | 软件权益管理人员 → 实际使用者 | 指定商品/应用的软件使用权益 | 我的应用权益/该应用接入流程；兑换截止与所得权益到期分别配置；激活批次与权益记录 |
| 应用奖励兑换码（CDK，原通用码券） | 管理人员 → 指定应用中的业务用户 | 应用和外部 subject_id；奖励由接入方按核销快照发放 | 在指定应用兑换；开始/截止/主体次数/总次数/停用；批次、单码、核销审计 |
| 优惠码/优惠券 | 交易运营 → 购买者 | 结算折扣，不是软件权益 | 结算；商品限制/期限/次数及订单预占/释放 |

邮箱验证码只验证邮箱及用途。OAuth 授权码是短期一次性协议凭据，换取令牌，不是资产。API Key 只用于应用后端；Client Secret 只用于机密 OAuth 客户端；公开客户端不保存 Secret。机器发布令牌是独立、受限的流水线凭据。SMTP 授权码是邮件服务商凭据。这些不能互换，更不能合成一个万能兑换入口。

软件 `license_key` 与 `authorization_id` 是兼容字段中的权益记录编号，编号本身不构成认证凭据。旧码前缀、字段、URL 与历史快照保留；只有哈希的旧激活码原文无法恢复，仍可按原规则兑换。

接入细节：[永久授权恢复与单设备在线租约](/help/license-leases)、[应用奖励兑换码核销与幂等交付](/help/redemption-codes)。

## 我想开发应用

普通账号默认不是开发者。个人工作台打开“开发者申请”，仅说明应用用途；不要提交密码、API Key 或敏感身份证明。待审核或拒绝期间不能靠领取体验、购买资源、旧页面、API 或切换工作空间绕过审批。拒绝后可修改重申；内部审核备注不会返回申请人。

审核通过后：平台开发者套餐/资源 → 我的应用 → 在“当前应用”选择上下文 → 关联商品与定价交接 → 版本更新/接入指南。仅发布更新可以关闭 OAuth 登录。应用拥有者不自动具有商品或财务写权限；请将应用 ID、商品名称、权益类型、期限、绑定额度及拟定价格交给有商品管理权限的管理人员。当前应用展示已关联商品，不是自营交易市场。

按需要接入：
- 软件更新：公开 Client ID、平台/架构/通道及版本序号；不强制 OAuth
- 登录：公开客户端使用 PKCE；机密客户端仅后端保存 Secret
- 软件使用权益：应用内登录恢复本用户权益，按类型检查、绑定或取得在线租约
- 奖励兑换：应用后端 API Key 及对应 capability，原子核销与幂等交付
- 发布流水线：单独申请最小范围和期限的机器发布令牌，轮换/撤销不等于软件退款

应用停用/归档、额度耗尽和准入失效是不同原因；归档可释放名额但会影响应用凭据，恢复仍需原有权限与资源检查。开发者资格撤销或账户停用后，旧会话及开发者应用的 API/OAuth/机器发布请求也受实时检查；不会删除历史权益与付款记录。公共更新内容的读取不作为开发者写权限。

## 我负责审核与运营

“开发者申请审核”要求 `developer-applications:review`，内置管理员获得该审核能力，但管理员身份本身不等于开发者获批，且禁止自行审批。审核记录保存申请版本、决定、审核人、时间和公开/内部理由。通知通过现有 outbox 幂等发送，失败可由通知管理重试。

历史兼容仅在新迁移首次执行时按已有应用、历史已付款的开发者订单、已有明确开发者角色或管理员资源授予证据保留资格。自动生成的空开发者账户不算批准，既有 suspended 不转为 active。迁移代码不等于已在生产执行。

未获批但已到账的开发者订单保留付款、商品快照和库存/积分账务，状态显示“已付款 · 待审核开通”，不直接发资源，不自动退款。获批后通过幂等任务发放；账户停用或会回收权益的退货/取消退款处理中继续保留待处理状态，需要先解决准入/售后。不得用人工补付款状态修复入口错误。

## 我负责发码、对账和支持

发码先确认目的、应用/商品、兑换所得、码截止时间及所得权益期限。停用已核销 CDK 只影响将来核销，不回写历史奖励；模板更新不修改核销快照。已有核销记录不能通过删批次抹账。

当前软件激活码与应用奖励兑换码管理均实际使用 `authorizations:write`（平台管理范围），还没有独立的码券只读/写入/原文导出隔离。不能把界面按应用筛选当权限。拆分前必须列角色影响清单，显式批准映射、过渡和回滚，不自动给旧角色加宽权限。原码复制/导出沿用后台授权与审计。

订单详情 → 支付尝试 → 核对真实银行流水、金额、币种 → 确认到账。没有合法 bank 尝试时，服务端说明“尚未发起银行转账”，不能执行到账确认。creating/失效尝试先恢复付款入口。取消订单后的晚到款进入原退款保护，不正常开通权益。重复确认和流水复用仍由服务端锁与幂等校验保护。

支持请索取订单号、应用 ID、权益记录 ID 或核销记录 ID 和可公开原因，不索取完整密钥。软件激活、CDK、银行确认和开发者审核各自保留原权限检查。

## 验证边界

代码/fixtures/CI 验证不等于真实银行、支付渠道或 S3 联调；后者分别由既有问题跟踪。当前用户视角是代理分析，没有真实用户访谈或成功率测量。后续在有参与者同意时，验证桌面/窄屏/键盘/深色、旧链接、权限撤销和失败恢复，记录任务时长、完成率、跨页次数及错误恢复率，不采集原码/密钥。候选 90% 成功率及 30% 步骤下降尚未验证，不能当作交付成果。
