Files
wxmp_backend/docs/secrets-guide.md
T
broccoliandClaude Fable 5 deaa0c9ce4 feat: 初始化微信小程序后端骨架
- NestJS + TypeScript + Prisma + PostgreSQL 工程骨架
- 微信登录安全流程:服务端 code2Session 换 openid 后签发 JWT,
  session_key 缓存于 Redis,不信任前端 openid
- 统一响应/异常处理、JWT 全局鉴权(@Public 豁免)、Swagger 文档
- Prisma 全量核心 schema(用户/分类/商品/设计清单/地址/订单/支付/上传/定制任务)+ seed
- 业务模块空壳(商品/分类/设计清单/地址/订单/支付/上传/BullMQ 队列)
- Docker 多阶段镜像 + 本地/生产 docker-compose
- docs:密钥获取指南、COS SDK 移除记录

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 17:33:50 +08:00

98 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 密钥与配置获取指南
本项目的敏感配置全部通过环境变量(`.env`)注入,绝不允许提交进仓库。
以下说明各项值的**来源**与**获取方式**。
> ⚠️ 安全提醒:任何密钥都不要写入代码、提交到 git,或发给第三方。
> 妥善保管,生产环境与本地环境分离。
---
## 1. JWT_SECRETJWT 签名密钥)
- **是什么**:用于签名/校验登录 access token 的对称密钥(≥16 位,建议 64 位十六进制)。
- **哪里来**:本地自行生成,无第三方。用系统安全随机数生成:
```bash
# 方式一:openssl
openssl rand -hex 64
# 方式二:node
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
```
- **要求**:每次输出粘贴到 `.env``JWT_SECRET=` 即可。**生产必须换成新的高熵随机串**,
与本地/测试完全区分;切勿使用示例值。
- **注意**:更换后所有已签发的 token 会立即失效(用户需重新登录),属预期行为。
---
## 2. WX_APPID / WX_SECRET(微信小程序凭证)
- **是什么**:小程序唯一标识(AppID)与对应的 AppSecret。
- **哪里来****微信公众平台**https://mp.weixin.qq.com)。
1. 登录后,进入「小程序」→ 左侧「开发」→「开发管理」→「开发设置」。
2. 页面顶部「AppID(小程序ID)」即 `WX_APPID`
3. 「AppSecret(小程序密钥)」需点击「生成/重置」获取,生成后仅显示一次,请立即保存。
- **安全要点**AppSecret 仅存于**服务端**,绝不写入小程序代码或随请求下发。
本项目 `code2Session` 使用服务端持有的 appid+secret 调微信换取 openid。
---
## 3. 微信支付相关(WX_MCH_*,预留,当前为空)
> 骨架阶段支付功能为占位,**暂无必填**。上线支付时按以下获取:
- **WX_MCH_ID**(商户号):微信支付商户平台申请开通后获得。
- **WX_MCH_API_V3_KEY**APIv3 密钥):商户平台 →「账户中心」→「API安全」→「APIv3密钥」设置。
- **WX_MCH_SERIAL_NO**(商户证书序列号):商户平台「API安全」→「申请API证书」后,在
证书详情中查看序列号。
- **WX_MCH_PRIVATE_KEY_PATH**(商户私钥):申请 API 证书时下载的私钥文件,存放于
服务端的 `key/` 目录(已被 gitignore 忽略)。
- **WX_PAY_NOTIFY_URL**(支付回调地址):需为公网可访问的 HTTPS 地址,如
`https://your-domain/api/payments/notify`
前置条件:小程序需完成微信支付商户号绑定与经营资质审核。
---
## 4. COS(腾讯云对象存储,COS_*,当前为空)
> 骨架阶段 COS 为占位(SDK 已移除,见 `docs/cos-sdk-removal.md`)。接入时获取:
- **COS_BUCKET** / **COS_REGION**
1. 腾讯云控制台 →「对象存储 COS」→「存储桶列表」。
2. 创建/选择存储桶,桶名称即 `COS_BUCKET`(形如 `wxmp-125xxxxxxx`)。
3. 桶所在地域即 `COS_REGION`(形如 `ap-guangzhou`)。
- **COS_SECRET_ID** / **COS_SECRET_KEY**
1. 腾讯云控制台 →「访问管理 CAM」→「访问密钥」→「API 密钥管理」。
2. 新建/查看密钥,SecretId 与 SecretKey 填入对应变量。
- 生产建议用**子账号 / 临时密钥(STS)**,权限最小化,主账号密钥仅本地调试用。
---
## 5. 数据库与 RedisDATABASE_URL / REDIS_URL
- **DATABASE_URL**PostgreSQL 连接串,格式
`postgresql://<user>:<password>@<host>:<port>/<db>?schema=public`
- 本地开发(docker compose)默认:
`postgresql://postgres:postgres@localhost:5432/wxmp?schema=public`
- 生产改为真实主机/账号/密码,并避免在 URL 中明文存弱口令。
- **REDIS_URL**Redis 连接串,格式 `redis://[:password]@<host>:<port>`
生产若开启认证/加密,按需补充。
---
## 快速核对清单
| 变量 | 必须 | 来源 |
|---|---|---|
| `JWT_SECRET` | ✅ 生产必须换 | 本地 `openssl rand -hex 64` |
| `WX_APPID` / `WX_SECRET` | ✅ | 微信公众平台·开发设置 |
| `DATABASE_URL` | ✅ | 自建 PostgreSQL |
| `REDIS_URL` | ✅ | 自建 Redis |
| `WX_MCH_*` | 支付时 | 微信支付商户平台 |
| `COS_*` | COS 接入时 | 腾讯云控制台(COS/CAM) |
部署前请在服务器上用工具生成独立的随机密钥,**不要把本地 `.env` 原样搬上生产**。