# 人工收款、签发、撤销与补发流程

## 收款记录

每笔订单记录：`orderId`、客户名称、联系方式、版本、席位、金额、付款时间、付款凭证位置、许可证 ID、交付时间和售后备注。不要把私钥或客户资料提交到代码仓库。

## 首次签发

```powershell
node scripts/sign-license.mjs --private-key LICENSE_PRIVATE_KEY.pem --input customer.json --out license.json
```

`customer.json` 至少包含 `customer`、`tier`、`seats`，可选 `licenseId`、`expiresAt` 和 `features`。将 `license.json` 与 `license-public-key.pem` 发送给客户。

## 撤销

```powershell
node scripts/revoke-license.mjs --license-id LICENSE_ID --reason customer-request
```

撤销记录写入 `license-revocations.json`，应用下次读取授权状态时拒绝该许可证。保留原订单和撤销原因。

## 补发

1. 核对原订单和客户身份。
2. 撤销旧 `LICENSE_ID`。
3. 使用新的 `licenseId` 重新签发。
4. 记录旧 ID、新 ID、原因和交付时间。

## Windows 签名

拥有代码签名证书后，在发布机执行：

```powershell
$env:WINDOWS_CERTIFICATE_PFX = 'C:\secure\understand.pfx'
$env:WINDOWS_CERTIFICATE_PASSWORD = 'CERT_PASSWORD'
pnpm run dist:win:signed
```

签名证书和密码只保存在发布机密钥存储，不进入仓库或安装包。
