开发阶段可以使用临时公网地址验证链路,但真机小程序和长期运营必须使用固定 HTTPS 域名。规划的生产 API 域名为 print-api.munvor.com。
一、为什么真机会提示域名不合法
微信开发者工具可以临时关闭合法域名校验,但手机真机仍受小程序后台配置限制。当请求地址不在合法域名列表时,会出现:
request:fail url not in domain list
生产环境需要在微信公众平台分别配置:
request合法域名uploadFile合法域名downloadFile合法域名
如果 API、对象存储上传和下载使用不同主机名,每个主机名都要进入对应列表。所有地址使用有效 HTTPS 证书。
二、固定域名方案
推荐:
小程序 API: https://print-api.munvor.com
对象上传: 私有对象存储短期签名地址
对象下载: 私有对象存储短期签名地址
支付回调: https://print-api.munvor.com/v1/payments/wechat/notify
管理后台: 使用独立子域名并限制管理员访问
路径只是工程建议,正式接口以实现版本为准。
三、当前 DNS 变更原则
munvor.com 已经承载网站和企业邮箱,根域 DNS 使用阿里云/万网。print-api 子域可以独立新增解析,因此不需要为了部署 API 迁移整个根域名的 NS。
最稳妥流程:
- 在云平台部署中心 API,获得稳定负载均衡地址或固定入口。
- 完成预发环境健康检查和 HTTPS。
- 在现有阿里云 DNS 只新增
print-api的 A 或 CNAME 记录。 - 等待解析生效,验证证书、API、上传和支付回调。
- 在微信公众平台加入合法域名。
- 通过手机 4G/5G 和不同 Wi-Fi 完成真机测试。
四、不要盲目迁移整个 DNS
如果未来确实需要把权威 DNS 迁移到 Cloudflare,必须先:
- 从阿里云导出完整区域记录。
- 核对根域、
www、所有业务子域。 - 核对企业邮箱 MX、SPF、DKIM、DMARC、mail、smtp、imap 和验证 TXT。
- 在 Cloudflare 中逐条复制并先保持邮件相关记录为 DNS-only。
- 直接向新权威 NS 查询并逐条比对。
- 再去注册商修改 NS。
- 观察至少一个完整 DNS TTL 周期,并测试网站、收信、发信和 SPF/DKIM。
不要在同一次变更中同时迁移 DNS、修改邮箱策略和上线支付接口。每个高风险变更应独立回滚。
五、推荐云端组件
| 层 | 推荐形态 | 关键要求 |
|---|---|---|
| 入口 | HTTPS 负载均衡或边缘代理 | 健康检查、WAF、限速、证书自动续期 |
| API | 无状态容器或云服务 | 至少两个实例、滚动发布、自动扩缩 |
| 数据库 | 托管 PostgreSQL | 主备、连接池、自动备份、时间点恢复 |
| 文件 | 私有对象存储 | 服务端加密、短期签名、生命周期删除 |
| 队列 | 可靠托管队列 | 至少一次、重试上限、死信队列、幂等消费 |
| 缓存 | Redis 或等价服务 | 限流、短租约和缓存,不保存最终业务真相 |
| 监控 | 指标、日志、追踪和告警 | trace ID 贯穿小程序、API、支付和代理 |
六、数据库和文件迁移
SQLite 到 PostgreSQL
- 为当前表建立 PostgreSQL 迁移脚本。
- 增加租户、门店、打印机和版本字段。
- 建立订单、支付和任务唯一约束。
- 导入受控测试数据或仅从空生产库开始。
- 同时运行集成测试和状态机测试。
- 完成备份恢复演练。
本地上传目录到对象存储
- 建立私有 Bucket。
- API 只生成短期上传凭证。
- 上传完成后服务端验证对象。
- 代理只获得单任务短期下载凭证。
- 配置完成后 24 小时内删除的生命周期策略。
- 监控删除失败和异常存储增长。
七、发布环境
至少保留:
- 开发环境:本地或个人云资源,不接真实资金。
- 预发环境:与生产同结构,使用独立数据库、Bucket、支付配置和设备。
- 生产环境:真实用户和资金,最小权限、审计和备份完整。
环境之间不得共享 AppSecret、支付私钥、数据库或对象存储。配置通过环境变量或密钥管理注入,不写进代码仓库。
八、上线与回滚
- 数据库向后兼容迁移。
- 部署新 API 实例但不接流量。
- 健康检查、合成上传和模拟代理检查。
- 灰度少量请求。
- 观察错误率、延迟、队列年龄和支付回调。
- 扩到全量。
- 保留上一版本和数据库回滚方案。
支付状态和已创建订单不能通过简单回滚代码“倒回去”。回滚时仍需保证旧版本能够理解新状态,或使用前向修复。
微信小程序网络规则和 Cloudflare 产品行为可能更新,实施时以微信小程序网络能力官方文档与Cloudflare 官方文档为准。