# 三、账号、成本与资料准备 ```{note} 🧰 这一章是动手前的「物料清单」。你不用马上把所有东西都备齐,但你必须**知道每一项是什么、为什么需要、在哪里申请、大致花多少钱、容易在哪里踩坑**。 很多新手被这一章吓退,是因为同时看到了"域名、备案、服务器、数据库、商户、证书、CDN……"。其实这些东西**有先后顺序、有依赖关系**——按顺序一项一项地准备,你会发现每一步都很具体,并不需要先成为运维。跟着教程一步步做就可以啦 ``` ```{warning} ⚠️ **不要等做到一半才发现缺东西。** 域名备案需要等待 7-20 个工作日,微信支付 / 支付宝商户审核也通常要数个工作日,这些是"必须提前启动"的项,本章会标出来。你可以在等待期间完成很多其他的事,对于OPC个人公司,时间就是💰! ``` ## 01 备案前第一步:获取 web-pay 收银台/运营平台和 saas-starter 源码包 读完第 2 章以后,你已经知道这套系统的分工: - `web-pay` 负责 **统一收款、统一收银台、统一订单和运营平台**。 - `saas-starter` 扮演 **真实业务 SaaS** 的角色,用来验证用户下单、跳转收银台、支付回调、会员订阅更新这一整条闭环。 所以第 3 章一开始要做的第一件事,不是先买域名,也不是先填云服务器表单,而是先把这两套工程拿到本地。后面的域名、服务器、备案、RDS、微信支付、支付宝配置,都是围绕这两套源码展开的。 ```{warning} ⚠️ **本仓库不是公开开源项目**,代码不会托管在 GitHub / Gitee 公开仓库里。后面所有章节(本地运行、生产构建、上线部署、真实支付验收、CodeArts 流水线)都依赖你**先拿到这套源码**。如果你已经决定按本教程搭一套 OPC 收款底座,这一步不要拖到最后。 ``` ```{important} **本节的动作很明确:先付款获取源码包,再继续准备账号和云资源。** 源码几分钟就能拿到;备案、微信支付、支付宝审核才是真正要等的环节。先把源码买好,后面的等待期才可以用来跑本地环境、配脚本、看项目结构,不浪费 OPC 最贵的时间。 ``` ![付费获取 web-pay 源码后先本地解压](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-56-030-web-pay.png) ### 1.1 你现在要拿到的是两套可复用工程 标题里同时写 `web-pay` 和 `saas-starter`,是因为你拿到的不是一个孤立的收银台页面,而是一套可以从“收款平台”走到“真实 SaaS 业务”的完整起点。 | 源码包内容 | 它在系统里扮演什么角色 | 买完后你可以怎么用 | | ---------- | ------------------------ | -------------------- | | `web-pay` 收银台 / 运营平台 | OPC 的统一收款中台 | 接微信 / 支付宝、展示收银台、处理回调、集中查订单和收入 | | `saas-starter` 基础业务工程 | 你的 SaaS 产品起跑线 | 在它上面改页面、改业务表、改套餐,验证真实付费闭环 | | 配套脚本和文档 | 从本地到生产的操作路径 | 跑配置脚本、构建脚本、上传脚本和后续 CodeArts 流水线 | | 真实项目验证经验 | 已经跑通过的参考路线 | 参考“喵呜档案”的路径,少走从零摸索支付和部署的弯路 | ```{tip} 如果你只买到一个“支付按钮”或“收银台页面”,后面仍然会卡在订单、回调、后台、部署和 SaaS 业务接入上。这里拿到的是 **收款中台 + 业务示例 + 脚本路线** 的组合,所以后面每一章才可以连续推进。 ``` ![你拿到的源码包含什么](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-05-source-package-overview.png) #### `web-pay`:一套收银台和运营平台 `web-pay` 解决的是 **“钱怎么收、怎么管、怎么统计”**。它不是单个业务项目里的临时支付代码,而是可以给多个 SaaS 复用的公共支付底座。 | 模块 | 作用 | 买完后你得到什么 | | ---- | ---- | ---------------- | | 统一收银台前端(`ui-cashier`) | 给付款用户选择微信 / 支付宝 | 所有 SaaS 共用同一个付款入口 | | 运营平台前端(`ui-manager`) | 给你看订单、应用、支付配置和统计 | 一个人也能集中管理多个产品收入 | | 支付网关后端(`payment`,默认端口 9216) | 统一下单、签名、回调、订单状态 | 业务侧不用每个项目重复接支付 | | 运营平台后端(`manager`,默认端口 9217) | 管理商户、应用、订单、通道配置 | 收款配置集中在一个后台里 | | `env-scripts/rename-saas-service.sh` | 交互式写入生产配置 | 少手改配置,降低漏填和填错概率 | | `env-scripts/*.sh` | 本地测试、生产构建、上传、CI/CD | 从本地到线上有脚本路径可走 | | `.env.example` / `application*.yml` | 配置模板 | 后续替换真实域名、数据库、支付参数 | 任意 SaaS 产品接入后,都可以共用这一套收银台和运营平台。你不用每做一个产品就重新研究一遍微信 / 支付宝对接、订单回调、支付状态和后台统计。 ![统一支付平台 web-pay 工程](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-06-web-pay-project.png) #### `saas-starter`:一个已经接好支付的业务起点 除 `web-pay` 外,你还会拿到一份 **SaaS 基础服务源码包**。它是一套已经跑通 **数据库 + 支付 + 前端 + 后端** 的完整业务框架,可以直接作为你下一个 SaaS 产品的开发起点。 | 模块 | 已内置能力 | 你可以怎么用 | | ------------ | ------------------------------------------------------ | ---------------------------------------------- | | **数据库** | PostgreSQL 表结构、迁移脚本、RBAC 权限模型 | 在其上扩展你的业务表,不必从零设计用户/权限体系 | | **后端** | Java 17 + Spring Boot 3 REST API、统一异常与鉴权 | 专注写业务接口,支付调用已封装好 `ZhcpayClient` | | **前端** | uni-app(Vue 3 + TypeScript),小程序 / H5 / App 三端共用 | 改页面和路由即可,不用重新搭小程序工程 | | **支付** | 统一下单、微信内支付、跳转收银台等链路已打通 | 在运营平台注册一个 `app_id`,改配置就能收款 | | **工程脚本** | 本地联调、隧道测试、构建部署脚本 | 和 `web-pay` 同一套 env-scripts 思路,上手即用 | 这套源码包的关键价值是:你之后要做的不是“先搭项目再写业务”,而是直接在一个能登录、能连库、能调用支付、能部署的底座上改业务。 ![SaaS 基础服务源码包](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-07-saas-base-package.png) ### 1.2 为什么 OPC 值得先买源码包 OPC 最大的瓶颈不是“能不能写代码”,而是一个人要同时做产品、开发、上线、收款、对账、排查。源码包的价值,是把最容易反复消耗时间的支付和工程底座提前铺好。 | 你如果从零开始 | 买完源码包后的路径 | 对一人公司的意义 | | -------------- | ------------------ | ---------------- | | 每个产品单独研究微信 / 支付宝 | 先部署一套 `web-pay`,每个 SaaS 新增应用接入 | 收款底座只维护一份 | | 自己拼订单、回调、统计、后台 | 运营平台已有订单、应用、通道和统计入口 | 收入和排查集中在一个后台 | | 从空项目搭登录、权限、前后端 | 从 `saas-starter` 开始改业务 | 更快进入产品差异化 | | 代码有了但不知道怎么上线 | 文档和脚本从本地、构建、上传到 CI/CD 串起来 | 少掉“最后一公里”卡点 | ```{important} 对一人公司最舒服的状态是:产品可以一个个加,但收款能力、订单数据、支付配置和统计后台始终只有一套。`web-pay` 就是这套公共底座;SaaS 基础服务源码包就是你复制新产品时的起跑线。 ``` ```{note} 你仍然需要自己申请账号、填写真实配置、设计业务、负责线上运维和安全。源码包不替你经营公司,但它能把最容易反复踩坑的支付和工程底座提前铺好。 ``` 真实案例 **“喵呜档案”** 就是在这套基础服务上定制出来的。流浪猫档案、打卡、账本、订阅付费等业务是后来加的;**底座里的登录、数据库、支付、部署链路没有重写**。这意味着你买的不是一份“教程配套代码”,而是 **已经被真实 OPC 项目验证过的 SaaS 起跑线**。 ### 1.3 买完后你能立刻继续做什么 付款拿到源码包以后,你不是只能“先放着以后再看”。从当天开始,你就可以把第 3 章后面的等待时间利用起来: | 拿到源码后 | 你能立刻做什么 | 为什么越早越好 | | ---------- | -------------- | -------------- | | 下载并解压源码 | 确认 `web-pay` 和 `saas-starter` 目录完整 | 后面所有脚本和配置都依赖项目根目录 | | 建立部署信息记录表 | 把域名、RDS、ActiveMQ、SSH、支付资料逐步填进去 | 等备案/支付审核期间不会空等 | | 阅读脚本和配置模板 | 先熟悉 `env-scripts/`、`.env.example`、`application*.yml` | 正式配置时不容易填错 | | 跟着后续章节本地运行 | 等资料齐后跑通 web-pay 和 saas-starter | 先在本地证明链路能跑,再上线更稳 | ```{tip} 源码包、域名和服务器最好同一天处理。源码几分钟拿到,域名和服务器也能当天完成;备案、微信支付、支付宝审核才是真正需要等待的环节。先把源码拿到手,等待期就可以变成准备期。 ``` ### 1.4 ROI:省下的不是代码行,是试错时间 如果只按“有多少代码文件”来算,很容易低估这套源码包。真正值钱的是它把多个高风险环节提前串起来了:支付签名、证书、回调、订单状态、前后端联调、生产配置、上传部署和 CI/CD。 | 从零开始常见消耗 | 使用这套源码包后 | 实际省下的成本 | | ---------------- | ---------------- | -------------- | | 研究微信 / 支付宝文档,反复调签名、证书、回调 | 支付网关和收银台已封装,按教程填真实参数 | 少掉大量不可预期排查时间 | | 自己搭前后端分离、权限、数据库、订单模型 | SaaS 基础服务已经有可改造框架 | 从“搭架子”提前进入“做业务” | | 每个 SaaS 都重新接支付 | 多 SaaS 共用 `web-pay`,新应用在运营平台创建 | 产品矩阵越多,复用价值越高 | | 有代码但没有上线链路 | 文档、脚本、截图和检查清单一起给出 | 本地、生产、验收不再断层 | ```{tip} 如果你一个人摸索,支付和部署链路很容易按“周”甚至按“月”消耗时间。买源码包不是为了少写几行代码,而是为了少走那些只有踩过才知道的弯路。 ``` ```{important} **一句话**:`web-pay` 帮你 **收和管理所有 SaaS 的钱**;SaaS 基础服务源码包帮你 **更快做出下一个能收钱的产品**。你把精力放在产品和客户上,而不是反复重建收款底座。 ``` ```{tip} 这两套源码已经在真实项目“喵呜档案”上跑通过支付、部署、CI/CD 全链路,**不是 demo,而是可直接定制的最小可运行版本**。你可以把任意数量的小程序 / APP / 网站接入同一套收银台和运营平台,也可以把基础服务源码包 fork 成自己的第二个、第三个 SaaS。 ``` ![两套源码一起拿性价比最高](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-08-source-combo-value.png) ### 1.5 立即购买:进入源码包下载页付款 ```{important} **现在就去购买源码包:** [点击进入源码包下载页并付款购买 web-pay 源码包(自动发货)](https://pay.zhcmqtt.top/#/source-download) 进入页面后选择 **`web-pay`**,完成付款。系统会自动发货,通常约 1 分钟内可以拿到源码包。 ``` | 步骤 | 你要做什么 | 完成后看到什么 | | ---- | ---------- | -------------- | | 1 | 点击上面的购买链接 | 打开源码包下载页面 | | 2 | 选择 `web-pay` 源码包 | 进入付款流程 | | 3 | 完成付款 | 系统自动发货,拿到源码包 | 这一步完成后,你就可以继续往下建立记录表、准备域名和服务器。不要等备案或支付审核结束后才回来买源码,那样会把最适合本地准备的等待期浪费掉。 ![购买方式任选其一](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-09-purchase-methods.png) ### 1.6 购买后 3 分钟验收 收到源码后,先不要急着改配置。第一步是确认压缩包能正常解压,项目目录完整: ```bash unzip web-pay.zip -d web-pay cd web-pay ls ``` 进入项目根目录后,能看到下面四个目录就算源码包验收成功: | 目录 | 说明 | | ---- | ---- | | `env-scripts/` | 本地联调、生产配置、构建、上传和流水线脚本 | | `zhcpay-ui/` | 收银台前端和运营平台前端 | | `zhcpay/` | 支付网关后端和运营平台后端 | | `saas-starter/` | 包含数据库/支付/前端/后端功能的saas组件,可作为saas服务底座使用 | 后面的本地工具检查、生产配置脚本、构建脚本都基于这个目录。如果这四个目录缺失,先回到下载和解压步骤排查,不要继续往后做。 ![拿到源码后做什么](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-10-unzip-project.png) ### 1.7 安全和边界 ```{danger} 源码包是你的私有工程资产。拿到后请守住下面几条底线: - **不要把源码上传到任何公开仓库**(GitHub Public、Gitee 公开仓库、网盘公开链接)。授权仅限你自己使用,公开传播属于侵权。 - **不要把仓库访问凭据发给别人**。即使对方说可以帮你部署,也不要把代码、商户密钥、证书和服务器密码一起交出去。 - **真实密钥、密码、证书只能放在你控制的私有环境里**。可以是自己的电脑、密码管理器或私有仓库,但不能公开传播。 - **源码包不是代部署、代运营或收益保证**。它提供可运行底座、脚本和路径,真实业务设计、账号申请、线上运维和安全责任仍由你掌握。 ``` ![源码和凭据安全底线](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-11-source-security-rules.png) ## 02 准备清单、成本与记录表 先用一张表把全部要准备的东西过一遍,后面每一节再展开: | 类型 | 本教程主流程使用 | 你需要做什么 | 需要提前启动? | | -------- | ----------------------------------------------- | --------------------------------------------- | -------------------------- | | 电脑 | Mac / Windows | 能打开终端、复制命令、查看文件 | 否 | | 代码仓库 | 当前 `web-pay` 仓库(**付费获取**) | 通过付费购买源码,下载到本地并能进入项目根目录 | **是(无源码无法继续)** | | 域名 | 4 个子域名共用 1 个主域名 | 注册、实名、备案、DNS 解析 | **是(备案需 7-20 工作日)** | | 云服务器 | Linux 服务器 + 宝塔 / Nginx | 运行后端 Jar、Redis、ActiveMQ、反向代理 | 是(备案前必须先买) | | 数据库 | PostgreSQL(**华为云 RDS 或 Flexus RDS**,二选一) | 申请实例、创建库/用户、配置白名单 | 否(可与服务器一起买) | | 对象存储 | OBS / OSS / COS | 存放两套前端 `dist` | 否 | | CDN | 加速前端访问 | 绑定自定义域名、上传 SSL 证书 | 否 | | SSL 证书 | 4 个域名都要 HTTPS | 申请并上传到 Nginx / CDN | 否 | | 微信支付 | 商户号 + AppID + 密钥 + 证书 | 提交资质、设置 API 密钥、下载证书 | **是(审核数个工作日)** | | 支付宝 | AppID + 应用私钥 + 支付宝公钥 | 创建应用、上传公钥、申请上线 | **是(审核数个工作日)** | | CodeArts | 自动化流水线 | 接入仓库、配置构建机和凭据 | 否(第一轮可跳过) | | SSH | 服务器登录账号 | 上传 Jar、登录排查 | 否 | ```{danger} 🔐 **真实密码、密钥、证书只能放在你控制的私有环境里。** 可以是自己的电脑、密码管理器或私有仓库,但不能公开传播。任何让你"把商户号、API 密钥发给我帮你配"的人都不要相信——这相当于把你店的收款权和资金安全交出去。 ``` ![准备清单汇总到本地记录表](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-54-010-section.png) ### 2.1 先建立两张本地部署信息记录表 从这一章开始,你会陆续拿到域名、数据库、ActiveMQ、SSH、SaaS 应用身份等信息。**不要等到最后再凭记忆翻控制台**,也不要一边看文档一边手动去改很多配置文件。更稳的做法是:先在本地准备两张记录表,后面跑两个配置脚本时照着复制。 这两张表分别服务于两套代码: | 本地记录表 | 对应工程 | 对应脚本 | 用途 | | ----------------------------- | ----------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | `web-pay-deploy-info.md` | 统一支付平台 `web-pay` | `env-scripts/rename-saas-service.sh` | 配置收银台、运营平台、支付网关后端、运营平台后端、ActiveMQ 和上传 web-pay 后端 Jar 的 SSH 信息 | | `saas-starter-deploy-info.md` | 业务 SaaS 示例 `saas-starter` | `saas-starter/env-scripts/rename-saas-service.sh` | 配置你的 SaaS 前端/后端域名、SaaS 业务库、调用 web-pay 的商户身份,以及上传 SaaS 后端 Jar 的 SSH 信息 | ```{important} 两张表里有一些字段看起来重复,这是正常的。它们不是“两份不同世界的数据”,而是两套工程各自运行脚本时都会询问。你可以让它们共用同一台服务器、同一个 RDS 实例、同一个 SSH 账号;但数据库名称、应用身份、域名用途要分清楚。 ``` 整体流程是: ```text 准备云资源时,每拿到一项信息就更新本地记录表 │ ▼ 先运行 web-pay 的 env-scripts/rename-saas-service.sh │ ▼ 脚本把统一支付平台的配置写入 web-pay 前后端配置 │ ▼ 再运行 saas-starter/env-scripts/rename-saas-service.sh │ ▼ 脚本把业务 SaaS 的配置写入 saas-starter 前后端配置 ``` 请在自己电脑上新建两个本地文件,例如: ```text web-pay-deploy-info.md saas-starter-deploy-info.md ``` ```{warning} 然后把下面两张表复制进去。文件可以保存在你自己的电脑、密码管理器或**私有 GitHub / Gitee 仓库**里,**不是让你在线填写,也绝对不要放进 Public 仓库、发到群里、贴到公开文档或截图外发**。 ``` **第一张:统一支付平台 web-pay 部署信息** | 脚本提示项 | 我的实际值 | 从哪里获得/什么时候填写 | 示例 | 完成 | | ----------------------------------- | ---------- | -------------------------------------------------------------- | ----------------------------------- | ---- | | 支付网关后端 API 地址 | | DNS / Nginx 后端域名规划完成后填写 | `https://pay-api.aihello.cn` | | | 运营平台后端 API 地址 | | DNS / Nginx 后端域名规划完成后填写 | `https://paymanager-api.aihello.cn` | | | 统一收银台前端页面地址 | | 收银台前端 CDN / Nginx 域名规划完成后填写 | `https://pay.aihello.cn` | | | PostgreSQL 内网连接地址(不含端口) | | RDS 创建完成后填写;正式上线写入 `application.yml` | `192.168.1.100` | | | PostgreSQL 公网连接地址(不含端口) | | `## 08.4` 绑定 EIP 后填写;本地测试写入 `application-local.yml` | `123.45.67.89` | | | PostgreSQL 数据库名称 | | 在 RDS / DAS 创建 web-pay 业务库后填写 | `pay` | | | 数据库用户名 | | 在 RDS / DAS 创建业务用户后填写 | `pay_user` | | | 数据库密码 | | 创建数据库用户时设置;只保存在本地记录表或密码管理器 | `自行填写强密码` | | | ActiveMQ 密码 | | 在云服务器 ActiveMQ 中改掉默认密码后填写 | `自行填写强密码` | | | SSH 账户地址 | | 云服务器购买完成后填写公网 IP | `12.34.56.78` | | | SSH 账户 | | 云服务器登录账号 | `root` | | | SSH 密码 | | 云服务器登录密码;改成强密码后填写 | `自行填写强密码` | | **第二张:业务 SaaS saas-starter 部署信息** | 脚本提示项 | 我的实际值 | 从哪里获得/什么时候填写 | 示例 | 完成 | | ----------------------------------- | ---------- | --------------------------------------------------------------- | ------------------------------------- | ---- | | 服务名 | | 你的 SaaS 域名前缀和展示名来源;不代表修改 Java 包名或数据库表名 | `saas-starter` | | | 根域名 | | 和 SaaS 前端/API 域名共用的主域名 | `aihello.cn` | | | SaaS 前端 URL(脚本自动生成) | | 由 `服务名 + 根域名` 自动生成,用于核对 | `https://saas-starter.aihello.cn` | | | SaaS 后端 URL(脚本自动生成) | | 由 `服务名-api + 根域名` 自动生成,用于核对 | `https://saas-starter-api.aihello.cn` | | | 收银台前端域名 | | 填 web-pay 表里的“统一收银台前端页面地址”的域名部分 | `pay.aihello.cn` | | | 收银台后端域名 | | 填 web-pay 表里的“支付网关后端 API 地址”的域名部分 | `pay-api.aihello.cn` | | | PostgreSQL 内网连接地址(不含端口) | | RDS 创建完成后填写;正式上线写入 SaaS `application.yml` | `192.168.1.100` | | | PostgreSQL 公网连接地址(不含端口) | | 绑定 EIP 后填写;本地测试写入 SaaS `application-local.yml` | `123.45.67.89` | | | PostgreSQL 数据库名称 | | 在 RDS / DAS 创建 SaaS 业务库后填写 | `saas_starter` | | | 数据库用户名 | | SaaS 业务库使用的数据库用户 | `pay_user` 或 `saas_user` | | | 数据库密码 | | 创建数据库用户时设置;只保存在本地记录表或密码管理器 | `自行填写强密码` | | | SSH 账户地址 | | 上传 SaaS 后端 Jar 的云服务器公网 IP | `12.34.56.78` | | | SSH 账户 | | 云服务器登录账号 | `root` | | | SSH 密码 | | 云服务器登录密码;改成强密码后填写 | `自行填写强密码` | | | Zhcpay 商户号 | | web-pay 运营平台 / 应用配置中给 SaaS 使用的商户号 | `Mxxxxxxxx` | | | Zhcpay AppID | | web-pay 运营平台里为 SaaS 创建的应用 AppID | `APP_xxxxxxxx` | | | Zhcpay AppSecret | | web-pay 运营平台里为 SaaS 创建的应用密钥 | `自行填写密钥` | | 两张表中最容易混淆的是下面这些重复项: | 重复项 | 是否通常相同 | 怎么理解 | | ---------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | PostgreSQL 内网/公网连接地址 | 通常相同 | 如果 web-pay 和 saas-starter 共用同一个 RDS 实例,主机地址相同;但两个工程可以使用不同数据库名 | | PostgreSQL 数据库名称 | 通常不同 | web-pay 常用 `pay`,SaaS 示例常用 `saas_starter`;不要把两个系统的表混在一个库里 | | 数据库用户名/密码 | 可以相同也可以不同 | 新手可先共用一个业务用户降低复杂度;上线后更推荐拆分权限 | | SSH 账户地址/账户/密码 | 通常相同 | 如果两套后端 Jar 部署到同一台云服务器,这里直接复制同一组 SSH 信息 | | 收银台前端/后端域名 | 是复用 web-pay 的域名 | saas-starter 调用统一收银台,所以这里填 web-pay 表里的收银台前端域名和支付网关后端域名 | | 商户/应用身份 | 来源不同 | web-pay 表记录的是微信/支付宝/平台部署信息;saas-starter 表里的 Zhcpay 商户号、AppID、AppSecret 是 SaaS 调用 web-pay 时使用的应用身份 | | ActiveMQ 密码 | 只在 web-pay 表里需要 | saas-starter 不直接配置 ActiveMQ,不要重复填写 | ![先建立两张本地部署信息记录表](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-01-local-record.png) ### 2.2 大致成本估算 不同云厂商、不同时间、不同优惠活动差异很大,这里只给**第一年验证阶段的大致范围**。所有数字都是参考,**请以下单当天的官方报价为准**:💰 | 项目 | 起步成本(参考) | 备注 | | ------------------------ | ------------------------------------------------------------------------- | -------------------------------------------------- | | 域名(`.com`) | 15-50 元/年 | `.cn` 通常更便宜 | | 云服务器(2核2G) | 200-300 元/年 | 新用户首年活动经常半价 | | 云数据库 RDS(PostgreSQL) | 标准版:按使用时长约几十元/月起;Flexus 包月:约 100-200 元/月(经济版 2核4G) | 必买其一;短测选标准版按量,整月用选 Flexus 包月更省 | | 对象存储 | 几元/月 | 按存储量+流量计费 | | CDN | 几元到几十元/月 | 流量小时几乎免费 | | SSL 证书 | 0(免费 DV) | 通配符证书几百元/年 | | 微信支付商户 | 0 | 入网费早已取消 | | 支付宝商户 | 0 | 个人开发者也免费 | | CodeArts | 0(免费额度内) | 超出按构建分钟付费 | | **小计** | **约 300-1000 元/年** | 个人开发者验证阶段 | ```{tip} 💡 几条省钱建议: - **新用户活动**:几乎所有云厂商首年都有大幅优惠,**好好利用**。 - **同厂商套餐**:域名+服务器+OBS+CDN 在同一家,有时有联合套餐折扣。 - **按量计费 vs 包年包月**:流量小用按量、流量稳定用包年。 ``` ```{note} ⚠️ **支付平台不收"基础费用",但每笔交易抽佣**:微信支付 / 支付宝按行业不同费率从 0.38% 到 1% 不等。这是**真实有交易后**才发生的成本。 ``` ![大致成本估算](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-02-cost-estimate.png) ## 03 三阶段配置路线图 很多人卡在准备阶段,是因为不知道**哪一步阻塞着哪一步**。下面这条依赖链按"备案前 → 备案等待期 → 备案通过后"拆开,就是本章的实际操作顺序: ```text 阶段 A:备案前必须完成 0. 付费获取 web-pay 源码(几分钟到 1 小时) │ 1. 注册域名(立刻可下单,几分钟) │ 2. 购买云服务器(立刻可下单,几分钟) │ 3. 提交 ICP 备案(国内服务器+国内域名必须,7-20 工作日,期间域名不能解析) 阶段 B:备案等待期并行完成 │ 4. 同时启动:微信支付商户申请、支付宝应用创建(数个工作日审核) │ 5. 安装服务器基础环境:Nginx / OpenJDK 17 / Redis / ActiveMQ │ 6. 申请 PostgreSQL 云数据库(RDS 标准版或 Flexus,二选一),创建库和用户 │ 7. 本地工具检查,确认 git / node / npm / java / mvn / ssh 可用 阶段 C:备案通过后才能完成 │ 8. 完成 ICP / 公安备案合规收尾 │ 9. 创建对象存储 + CDN(拿到 CDN 接入域名) │ 10. 用「服务器 IP + CDN 接入域名」加 4 条 DNS 记录 │ 11. 申请 SSL 证书(走 DNS TXT 验证,所以 10 必须先做完) │ 12. 核对支付回调地址 │ 13. CodeArts 等 CI/CD(主链路跑通后再配置) ``` ```{important} 🚀 **关键路径是 0 → 3**:**第 0 步和第 1-2 步可以同一天搞定**;域名注册当天就可以做,但备案需要先有服务器(很多云厂商要求服务器购买满 3 个月才允许备案)。所以**源码、域名、服务器最好同一天买齐**,之后立刻提交备案,把等待时间用来做其他准备。 ``` ```{tip} 💡 阶段 B 的服务器、数据库、支付商户和本地工具都可以**和备案并行**。等备案通过那天,这些资料一般也接近就绪。 ``` ```{warning} 🔗 阶段 C 里 **CDN → DNS → SSL → 回调核对** 有严格依赖顺序:CDN 给你 CNAME 目标 → DNS 解析才能加 → SSL 证书走 DNS 验证才能申请。别跳着做,容易卡住。 ``` ![三阶段配置依赖总览](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-55-020-config.png) ### 3.1 按阶段看这一章怎么读 | 阶段 | 你要完成什么 | 什么时候做 | 完成标志 | | ---------------------- | ---------------------------------------------------------- | ------------------------ | ------------------------------------------ | | **备案前必须完成** | 获取源码、注册并实名域名、购买云服务器、提交 ICP 备案 | 第一天就尽量完成 | 备案订单已提交,进入云厂商初审 / 工信部审核 | | **备案等待期并行完成** | 装服务器环境、准备 RDS、申请微信支付和支付宝、检查本地工具 | 等待备案的 7-20 个工作日 | 本地和云资源信息基本填满记录表 | | **备案通过后才能完成** | 公安备案、OBS/CDN、DNS、SSL、支付回调核对 | 拿到 ICP 备案号后 | 4 个域名能 HTTPS 访问,支付回调域名可达 | ![按阶段看这一章怎么读](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-03-stage-reading.png) ### 3.2 三阶段操作路线图 ```text 阶段 A:备案前必须完成 01 获取源码 04 注册域名并实名 05 购买云服务器并记录 IP / SSH 06 提交 ICP 备案 │ ▼ 阶段 B:备案等待期并行完成 07 安装服务器基础环境 08 准备 PostgreSQL 云数据库 09 同步申请微信支付和支付宝 10 检查本地工具和项目目录 │ ▼ 阶段 C:备案通过后才能完成 11 完成 ICP / 公安备案合规收尾 12 创建 OBS 桶并配置 CDN,拿到 CDN 接入域名 13 添加 4 条 DNS 解析 14 申请并部署 SSL 证书 15 核对支付回调地址 16 主链路跑通后再配置 CodeArts ``` ```{tip} 🎯 **读法建议**:先读 01 完成源码购买,再用 02-03 建立全局清单和路线图。真正开始备案前动作时,按路线从 04 走到 16;遇到正在审核的步骤就进入备案等待期并行章节,等备案通过后再回来做 11-15。 ``` ![三阶段操作路线图](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-04-stage-roadmap.png) ## 04 备案前第二步:注册域名并完成实名认证 域名是整套系统的"门牌号"。本教程会用到 **1 个主域名 + 4 个子域名**,所以你只需要买一个域名就够。 ![主域名拆分四个系统入口](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-57-040-filing.png) ### 4.1 主域名和子域名:为什么买一个就够 如果你完全没接触过域名,先建立一个最直观的理解,再去看后面的具体配置。 **主域名是什么** 你在阿里云 / 腾讯云 / 华为云上花 60-100 元/年买的那个名字,就是**主域名**。比如: - `example.com`(本教程文档里到处出现的"示例") - `aihello.cn`(假设你打算注册这个) - `taobao.com`、`huawei.com`(常见品牌的主域名) 主域名相当于一栋楼的"街道地址",**一旦你拥有了它,这栋楼里所有的"房间号"(子域名)都归你免费使用**。 **子域名是什么** 子域名就是在主域名前面加一个"前缀",用 `.` 分隔。**它本身不需要再花钱买**,你直接在域名管理后台添加一条 DNS 记录就生效。 以你假设买的 `aihello.cn` 为例: | 子域名 | 用途比喻 | | --------------------------- | -------------------- | | `aihello.cn`(主域名本身) | 公司大楼正门 | | `pay.aihello.cn` | 收银前台 | | `pay-api.aihello.cn` | 收银前台对接的服务器 | | `paymanager.aihello.cn` | 老板用的运营后台 | | `paymanager-api.aihello.cn` | 运营后台对接的服务器 | | `mail.aihello.cn` | 公司邮箱(本教程不用) | | `blog.aihello.cn` | 公司博客(本教程不用) | 每个子域名都能**指向一个不同的服务**(不同的服务器、不同的 CDN、不同的产品),互不影响。 ```{important} 🎯 **核心结论**:你**只需要买一个主域名**(几十到几百元/年),本教程要用到的 4 个入口都通过子域名免费扩展。备案通过后要做的"加 4 条 DNS 记录"就是把这 4 个子域名分别指向真实服务,这一步不花钱。 ``` **关于 `example.com`:它只是占位符,不是要让你买这个** ```{warning} ⚠️ **本文档里所有出现的 `example.com` 都是举例占位符**,不是要让你去注册 `example.com`(`example.com` 是国际保留示例域名,你也注册不到)。 **真实操作时,把所有 `example.com` 替换成你自己买的主域名。** ``` 举个具体例子:假设你**实际注册的是 `aihello.cn`**,那么: | 文档里写的(示例) | 你应该实际使用 | | ----------------------------------------------------- | --------------------------- | | `pay.example.com`(支付网关后端 API 地址) | `pay.aihello.cn` | | `pay-api.example.com`(统一收银台前端页面地址) | `pay-api.aihello.cn` | | `paymanager-api.example.com`(运营平台后端 API 地址) | `paymanager-api.aihello.cn` | 如果你买的是 `mybrand.com`,就把 `example.com` 全部换成 `mybrand.com`,以此类推。 ```{tip} 💡 **不用手工改配置文件**。下一章「二、本地环境与项目配置」会让你跑一个**交互式脚本** `env-scripts/rename-saas-service.sh`,它会问你"你的支付网关后端 API 地址是什么?",你**直接输入 `https://pay-api.aihello.cn`**,脚本会把所有相关配置文件里的占位地址自动替换成你的真实地址。 ``` ```{note} 📌 **回到本地部署信息记录表更新 3 行**:确定真实域名后,先把「支付网关后端 API 地址」「运营平台后端 API 地址」「统一收银台前端页面地址」按规划填进去。正式 DNS 解析要等备案通过后在 `## 13` 处理,但域名地址本身现在就可以先记录。 ``` ```{note} 🔑 你现在只需要记住一件事:**文档里看到 `example.com` = 等于看到"这里以后要替换成你自己的主域名"**。 ``` ![主域名和子域名为什么买一个就够](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-12-domain-main-subdomains.png) ### 4.2 本教程要用到的 4 个子域名 读完上一节,你应该已经接受"所有 `example.com` 都是占位符"的设定。下面这张表用 `example.com` 写,你心里把它替换成你**自己的主域名**就好(比如 `aihello.cn`): | 子域名(占位) | 指向 | 谁来访问 | 必须 HTTPS? | | ---------------------------- | ----------------------- | ---------------------------- | ----------- | | `pay.example.com` | OBS / CDN | 用户付款时浏览器访问 | 是 | | `pay-api.example.com` | 云服务器 / Nginx → 9216 | 收银台请求、**支付平台回调** | 是 | | `paymanager.example.com` | OBS / CDN | 你自己访问运营平台 | 是 | | `paymanager-api.example.com` | 云服务器 / Nginx → 9217 | 运营平台前端请求 | 是 | **这 4 个域名分成功能完全不同的两组**——理解了这个分组,后面所有"前端在哪里部署、后端在哪里部署、SSL 证书装到哪里、回调地址填什么"都会迎刃而解: | 分组 | 子域名前缀 | 部署位置 | 用途 | | -------------------------- | --------------------------------- | ------------------------- | ---------------------- | | **前端**(给浏览器看的页面) | `pay.*` 和 `paymanager.*` | OBS + CDN | 用户和你直接打开的网页 | | **后端**(给程序访问的 API) | `pay-api.*` 和 `paymanager-api.*` | 云服务器 + Nginx 反向代理 | 程序与程序之间的通信 | ```{warning} ⚠️ **支付平台回调地址只能填后端 API 域名**(`pay-api.example.com`),不能填任何前端域名。这是后面最容易混的一条,而且填错也不会立刻报错——直到真有用户付款时才发现订单状态不更新。 ``` ![本教程要用到的四个子域名](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-13-domain-four-entrypoints.png) ### 4.3 在哪里注册域名 主流国内注册商: - **阿里云万网**:`https://wanwang.aliyun.com`,品牌全、备案在阿里云生态内一站式。 - **腾讯云域名**:`https://dnspod.cloud.tencent.com`,与腾讯云服务器、CDN 集成方便。 - **华为云域名**:`https://www.huaweicloud.com/product/domain.html`,如果你用 CodeArts、OBS、华为云服务器,在同一家完成最省事。 国外注册商(适合不需要中国大陆备案的项目): - Cloudflare、Namecheap、GoDaddy。 - **国外注册商的域名也可以备案**,但流程比国内注册商麻烦很多。如果你计划国内运营,**直接在国内厂商注册更省事**。 ```{tip} 如果你的项目计划在中国大陆运营并接入支付,域名、服务器和备案尽量放在同一家国内云厂商,后面会省掉很多接入备案和资料核对成本。 ``` ![选择自己喜欢的域名](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/ym-01.png) 通常一个 `.com` 域名 60-100 元/年,`.cn` 30-100 元/年,其他域名价格更低15-30元/年。后缀只影响品牌和价格,不影响技术配置。因为本教程全程使用华为云,所以以华为云作为示例讲解,其他注册商流程大同小异。 ![在哪里注册域名](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-14-domain-registration.png) ### 4.4 域名实名认证 国内注册的域名必须做**实名认证**(域名所有者实名),否则会被注册商暂停解析。 - 个人:身份证正反面 + 联系方式。 - 企业:营业执照 + 法人身份证。 实名通常 1-3 个工作日完成,不影响后续流程的启动。 ![域名实名认证](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-15-domain-realname-auth.png) ### 4.5 域名规划建议 - 主域名建议买**简短易记**的(后面要打印在收银台二维码、联系信息里)。 - **不要买含中文、特殊符号、太长的域名**。 - 如果计划做多个产品,可以**一个主域名**通过子域名分别承载(`pay.brand.com` / `app.brand.com` / `admin.brand.com`),不用每个产品买一个域名。 ```{tip} 💡 这一阶段只做注册、实名和规划。ICP 备案要等服务器买好后提交,DNS 解析要等备案通过并拿到 CDN 接入域名后再做。 ``` ![域名规划建议](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-16-domain-planning.png) ## 05 备案前第三步:购买云服务器并记录 IP / SSH 信息 云服务器是整套系统**长期开机的"网上电脑"**。备案前先把服务器买好并记录公网 IP / SSH 信息;详细环境安装会放到备案等待期的 `## 07`。 ![购买云服务器后记录公网 IP 与 SSH 信息](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-58-050-ip-ssh.png) ### 5.1 为什么需要云服务器 可能你会问:能不能完全用 Serverless 或者 PaaS 解决?可以,但本教程选择**最直观、最可控**的云服务器方案,原因: - 前端在 OBS+CDN 上,**只有后端需要长期运行的进程**。 - 后端是两个 Spring Boot Jar(端口 9216 / 9217)+ Redis + ActiveMQ,放在一台服务器上**简单、便宜、好排查**。 - 微信支付 / 支付宝**回调需要一个公网 HTTPS 地址**,服务器+域名+反代是最经典的方案。 ![为什么需要云服务器](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-17-server-why-needed.png) ### 5.2 最低配置建议 本教程的主链路在一台服务器上同时跑两个 Java 进程、Redis、ActiveMQ、Nginx,推荐配置: | 资源 | 起步推荐 | 说明 | | -------- | ------------------------------------------- | ------------------------------------- | | CPU | **2 核** | 1 核可以勉强跑通,但启动期间会卡 | | 内存 | **2 GB** | 2 个 Java 进程 + ActiveMQ + Redis | | 磁盘 | 40 GB SSD | 装系统、放日志、放 Jar 都够用 | | 公网带宽 | 1-3 Mbps | 起步够,有真实流量后再扩 | | 操作系统 | CentOS 7 / Rocky Linux 9 / Ubuntu 22.04 LTS | 三家都能跑宝塔,本教程截图按 CentOS 系 | ```{warning} ⚠️ **不要选 1 核 1 GB 的最低档**:启动两个 Spring Boot 进程时容易内存吃紧导致进程被 kill。 ``` ![云服务器最低配置建议](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-18-server-minimum-spec.png) ### 5.3 在哪里购买 国内主流云服务器: - **阿里云 ECS**:`https://www.aliyun.com/product/ecs` - **腾讯云 CVM**:`https://cloud.tencent.com/product/cvm` - **华为云 ECS**:`https://www.huaweicloud.com/product/flexus-l.html` - **京东云、UCloud、青云**:中小厂商,价格有时更便宜。 新用户通常有**首年优惠**(2核4G可低至每年几百元)。**为了能备案,建议**: - 服务器**和域名在同一家云厂商**。 - 服务器**买满 3 个月或 1 年**(满足备案时长要求,且续费比按月便宜)。 ![服务器配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/fwq-01.png) ![在哪里购买云服务器](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-19-server-purchase.png) ### 5.4 SSH 登录:确保账号密码能登上去就够了 SSH 登录本身是云服务器的通用操作,可以直接按华为云官方教程完成: - 华为云官方教程:[远程登录 Flexus 云服务器](https://support.huaweicloud.com/usermanual-flexusl/server_login_0001.html) 跟官方教程做到**能从你的电脑登录服务器命令行**即可。回到本文档时,重点核对下面这些本项目特有要求。 **本项目的 CI/CD 和上传脚本默认用「账号 + 密码」登录** —— `env-scripts/upload-zhcpay-backend-jars.sh` 通过 `sshpass` / `SSH_ASKPASS` 自动用密码完成登录,`rename-saas-service.sh` 也只问你 SSH 账户地址 / 账户 / 密码三项。所以你**不需要折腾密钥**,只要保证下面三件事就行: | 要做到 | 为什么对支付项目重要 | | --------------------------------------------------------------------- | ------------------------------------------------------------------- | | ✅ **能用「账号 + 密码」从你电脑 SSH 登录服务器** | 本项目的上传脚本和 CI/CD 都靠它 | | ✅ **把云厂商初始 root 密码改成强密码**(16 位 + 大小写 + 数字 + 符号) | 初始密码会出现在云厂商控制台和邮件里,弱密码会在 24 小时内被全网扫到 | | ✅ **安全组里 22 端口只允许你自己的 IP** | 即使密码再强,只对你开放也比对全网开放安全得多 | ![服务器网络配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/fwq-04.png) ```{note} 📌 **回到本地部署信息记录表更新 3 行**:SSH 能登录后,把「SSH 账户地址」「SSH 账户」「SSH 密码」填进去。这里的 SSH 账户地址通常就是云服务器公网 IP,例如 `12.34.56.78`。 ``` **本项目特有的密码安全纪律** `rename-saas-service.sh` 跑完后,你在交互里输入的 **SSH 密码会被写到 `env-scripts/upload-zhcpay-backend-jars.sh` 这个脚本副本里**(脚本第 76 行的 `SSH_PASSWORD` 默认值)。这意味着: ```{danger} 🔐 **改完后的 `upload-zhcpay-backend-jars.sh` 是敏感文件,可以保存在私有仓库,但绝对不能公开**: - 如果你把仓库设为 Public,别人能直接看到 SSH 地址、账号和密码,进而尝试登录服务器。 - 不要把这个脚本的副本截图发到群里、贴到论坛求助。 - 在 CodeArts / GitHub Actions 等 CI 平台跑这个脚本时,可以继续使用私有仓库里的明文默认值;如果是多人协作或公司流程,也可以改用 CI 平台的 Secret 做权限隔离。 ``` ![SSH 登录和密码安全](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-20-server-ssh-login.png) ### 5.5 提交备案前的服务器检查 - 云服务器已购买成功,且购买时长满足备案要求(通常至少 3 个月)。 - 已拿到服务器实例 ID、公网 IP、内网 IP。 - 已确认可以用 SSH 账号 + 密码登录服务器。 - 已把 SSH 账户地址、账户、密码写入本地部署信息记录表。 ```{important} 下一步就用这台服务器实例提交 ICP 备案。 ``` ![提交备案前的服务器检查](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-21-server-prefiling-check.png) ## 06 备案前第四步:提交 ICP 备案 ```{important} ✋ 域名和服务器都准备好后,现在立刻提交 ICP 备案。**备案是备案前阶段的收口动作**,提交后就进入 7-20 个工作日的等待期。 ``` ```{seealso} 📚 **备案的完整操作步骤直接跟官方教程做**——它有最新的截图、表单字段说明,且会随政策更新。本节聚焦**支付项目特有的判断、材料选择和并行策略**,把"具体怎么点、怎么扫脸"交给官方: - **华为云备案中心**(填表入口): - **华为云备案操作手册**(官方文档): - **华为云备案 FAQ**(常见失败原因): - 阿里云对应入口:;腾讯云: 阿里云、腾讯云的流程和华为云高度相似,只是控制台 UI 不同。**域名 + 服务器在哪家,就在哪家备案**。 ``` ![提交 ICP 备案后的审核与等待期安排](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-59-060-icp.png) ### 6.1 是否必须备案的判断 | 你的情况 | 是否需要备案 | 备注 | | -------------------------------------------------- | ------------ | ------------------------------------------------- | | 服务器在**中国大陆境内**(北京、上海、广州、深圳等) | **必须** | 不备案无法做 DNS 解析,域名打不开 | | 服务器在**香港**、海外(新加坡、美国等) | **不需要** | ⚠ 但部分支付平台对回调域名有备案要求,实操容易碰壁 | | 域名只用于**内网**或**测试**(localhost / 内网 IP) | 不需要 | 本教程做的是公网支付项目,这条不适用 | ```{important} 🎯 **本教程默认你的服务器买在中国大陆且要做支付,所以默认你必须备案。** ``` ![是否必须备案的判断](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-22-icp-required-decision.png) ### 6.2 备案前要准备的材料速查 具体每张表怎么填以官方教程为准。这里只列**本项目对应场景下你需要哪些材料**(主体不同材料不同),让你对照官方表单时知道要找什么: **主体材料**: | 主体类型 | 适合谁 | 必备材料 | | --------------------- | ------------------------ | --------------------------------------------------------- | | **个人** | 个人开发者、独立做小工具 | 身份证正反面 + 本人手机号 + 本人邮箱 | | **个体工商户 / 企业** | 想正经收款做生意的 | 营业执照 + 法人身份证正反面 + 对公手机号 + 公章(部分省份) | ```{warning} 🎯 **支付项目强烈建议用"个体工商户 / 企业"主体**——个人主体很多省份**不允许"电子商务 / 网上交易"类网站**,会直接被打回。注册个体工商户成本几十到几百元、周期 1-2 周,**比反复改备案省时间**。 ``` **域名 + 服务器 + 网站材料**(对应官方表单的几个区块): - 域名:**所有者实名已通过**(在 `4.4` 节做过)+ 域名证书(注册商「我的域名 → 下载证书」)。 - 服务器:**实例 ID**(云控制台能看到)+ 购买时长 **≥ 3 个月**(部分厂商要求 1 年)。 - 网站名称:用项目品牌或公司名,**避开"国家 / 官方 / 中央"等敏感词**(详见 6.4)。 - 服务内容/类型:本项目对应**「电子商务」或「网上交易」**(具体名称各省略有差异)。 ```{tip} ⚠️ **服务器和备案最好在同一家云厂商**——否则要走"接入备案",流程更复杂。 ``` ![备案前要准备的材料速查](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-23-icp-materials.png) ### 6.3 备案的完整流程(直接跟官方教程做) 不同主体、不同省份、不同时间点表单细节都会变,所以**直接打开你云厂商的备案系统照着填即可**。整体上分 3 个阶段,你心里有这条主线就不会迷路: ```text 阶段 ① 填表 + 上传(在云厂商备案后台,大约 1-2 小时) └─ 主体信息 / 域名信息 / 服务器信息 / 网站信息 + 上传扫描件 + 活体扫脸 │ 阶段 ② 云厂商初审(等 1-3 工作日) └─ 客服会电话联系核对,收到电话不要错过 │ 阶段 ③ 工信部审核(等 7-20 工作日) └─ 通过后下发备案号:沪ICP备12345678号(以你所在省份为准) ``` 📚 各阶段对应的官方教程: - 华为云备案流程文档:(从「备案前准备」到「备案信息变更」全覆盖) - 跟着官方教程走,**所有"在哪个按钮点、上传到哪一栏、扫脸用什么 App"**都会有最新截图。 ```{warning} ⚠️ **第 ① 阶段填完表提交后,在阶段 ② 之前**,系统会让你下载一份《信息真实性核验单》并寄到管局——**部分省份这一步是必须的**,以官方教程当时给出的指引为准,别漏掉。 ``` ![ICP备案配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/ICP-01.png) ![备案完整流程](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-24-icp-process.png) ### 6.4 备案常见失败原因(本项目最容易踩的几条) 更全的常见失败原因看华为云的官方 FAQ:。这里列**支付项目和个人开发者最容易踩的 3 条**: - **服务内容选错**:**个人主体**选了"商城 / 电商 / 网上交易"会被打回(很多省份不允许个人主体做电商)。所以推荐用个体工商户 / 企业主体备案;真的只能用个人主体,先选「博客 / 个人展示」过审,等业务上来再升级为企业重新备案。 - **网站名称含敏感词**:"国家"、"中央"、"官方"、各种政治 / 宗教 / 医疗词。起一个**普通的品牌名最稳**。 - **域名所有者和备案主体不一致**:身份证号 / 企业名称必须完全一致——很常见的坑是**用别人的域名做自己的备案**,会被秒拒。 ```{note} 其他通用失败原因(照片不清晰、手机号收不到验证码、域名证书过期等)在官方 FAQ 都有专项说明。 ``` ![备案常见失败原因](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-25-icp-failure-risks.png) ### 6.5 已经备过案的特殊场景 如果你**之前已经备过案**,会有几种简化路径,可以省掉大部分等待时间。具体走哪一种由官方备案系统自动判断,你**在备案系统首页选对应入口**即可: | 你的情况 | 走哪个入口 | 大致工时 | | ------------------------------- | ---------------- | ---------------- | | 之前用同一域名备过 | 「**变更备案**」 | 比新备案快很多 | | 已有备案号,要新加域名(同主体) | 「**新增网站**」 | 1-7 工作日 | | 备案在别家云厂商,想换到当前厂商 | 「**接入备案**」 | 不需要重审工信部 | 具体操作以华为云官方文档 中对应的"备案接入"、"新增网站"、"变更备案"小节为准。 ```{important} ✅ **完成标准**:备案订单已经提交,进入云厂商初审或工信部审核。接下来不要等着发呆,直接进入 `## 07-10`,把服务器、数据库、支付商户和本地工具并行准备好。 ``` ![已经备过案的特殊场景](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-26-icp-existing-filing.png) ## 07 备案等待期:安装服务器基础环境 备案已经提交后,等待期间先把服务器环境装齐。这个阶段不依赖域名解析,直接用服务器公网 IP 和宝塔后台即可完成。 ### 7.1 本阶段要装什么 这一节只处理**云服务器上的运行环境**。本项目第一轮上线的固定分工是: | 组件 | 放哪里 | 在本项目里负责什么 | | -------------- | ---------------------------- | --------------------------------------------------------------- | | **Nginx** | 云服务器 + 宝塔 | 接住外部 HTTPS 请求,再转给服务器内部的 `9216` / `9217` 后端服务 | | **OpenJDK 17** | 云服务器 + 宝塔 | 跑 `zhcpay-payment.jar` 和 `zhcpay-manager.jar` 两个后端服务 | | **Redis** | 云服务器 + 宝塔 | 缓存、会话、token、短期状态 | | **ActiveMQ** | 云服务器 + 宝塔 | 支付回调消息队列,让回调先排队再处理 | | **PostgreSQL** | **华为云 RDS 或 Flexus RDS** | 订单、商户、配置等核心数据,不在宝塔里装 | ```{important} 🎯 **一句话:** Nginx / OpenJDK 17 / Redis / ActiveMQ 都装在这台云服务器上;PostgreSQL 单独买 RDS。不要因为宝塔里能搜到 PostgreSQL 管理器,就在服务器上自建一份数据库。 ``` 用更通俗的话记这 4 个服务器组件: | 组件 | 可以理解成 | 为什么需要 | | -------------- | ------------------ | ------------------------------------------------------------- | | **Nginx** | 门卫 / 前台 | 外部只访问域名和 HTTPS,Nginx 再把请求转给内部 Java 服务 | | **OpenJDK 17** | Java 发动机 | 没有它,两个后端 Jar 文件就跑不起来 | | **Redis** | 收银台旁边的便签纸 | 放登录 token、临时缓存和短期状态;即使清空,核心订单仍在 RDS 里 | | **ActiveMQ** | 后厨排队窗口 | 微信 / 支付宝回调先排队,后端再慢慢处理,避免高峰时把服务打乱 | ![备案等待期要安装的服务器基础环境](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-30-071-server-stack.png) ### 7.2 宝塔面板安装与登录 服务器买好后,**强烈推荐安装宝塔面板**——它是国内常用的服务器管理面板,本教程的服务器截图也基于宝塔。如果你是在华为云购买,可以直接选择官方预装的宝塔面板,省心省力💗 ![宝塔面板安装与登录总览](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-31-072-baota-panel.png) 宝塔的核心价值: - 可视化管理 Nginx、SSL 证书、反向代理、文件、定时任务。 - 一键安装 Redis、ActiveMQ、Java 等组件(PostgreSQL 走云数据库 RDS,不在宝塔里装)。 - 即使你完全不熟 Linux 命令,也能完成本教程的部署。 宝塔本身的标准操作(下载安装、初次登录、绑定宝塔账号、初始化基础组件)各家云厂商都有现成教程,且更新比本文档及时。你不需要从本文档抄命令,**直接跟着官方教程做到能登录宝塔后台为止**: - **华为云**:[使用宝塔面板管理服务器](https://support.huaweicloud.com/bestpractice-flexusl/practice_application_0002.html)(包含 Flexus L 实例选购、安全组配置、密码重置、宝塔初始化) - **阿里云**:在「应用市场 → 镜像市场」搜「宝塔」,或参考阿里云帮助中心的宝塔部署文档 - **腾讯云**:在「轻量应用服务器 → 应用模板」选「宝塔 Linux 面板」一键部署 完成官方教程后,你应该达到这个状态: - 浏览器能打开宝塔后台(类似 `http://<你的服务器公网 IP>:8888`)。 - 用初始用户名 + 密码能登录,初始化向导已走完。 - 宝塔后台首页能看到 CPU、内存、磁盘等监控数据。 ```{note} 💡 宝塔面板安装后,云服务器的**内网 IP 地址 / 公网 IP / 宝塔页面入口地址**会经常用到,先对它们有个印象即可。 ``` ![服务器网络配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/fwq-02.png) ```{warning} 宝塔初始化向导里的"基础组合(LNMP / LAMP)"**不要勾**——本项目不需要 PHP / MySQL。你需要在宝塔「软件商店」里**单独安装**这些组件: ``` | 组件 | 推荐版本 | 截图里怎么看 | 是否必装 | | ------------ | ---------- | ------------------------------------------- | ---------------------------- | | **Nginx** | 1.20+ | 截图里显示 `Nginx 1.22.1` | **必装** | | **OpenJDK** | **17 LTS** | 截图里未显示,但服务器必须能执行 `java -jar` | **必装,版本必须 17** | | **Redis** | 6.x / 7.x | 截图里显示 `Redis 8.0.5` | **必装,不设密码,仅本机访问** | | **ActiveMQ** | 5.16+ | 截图里显示 `activemq(Docker应用)` | **必装,装完改密码并记录** | ```{note} 截图里还会看到一些已经安装的软件,它们**不是本项目第一轮上线的必装项**。不要因为截图里有就全部照抄安装: ``` | 截图里的软件 | 本项目怎么理解 | | --------------------- | ----------------------------------------------------------------------------------- | | **Node.js版本管理器** | 可选。前端推荐在本地电脑或 CI/CD 里构建,服务器第一轮不需要靠它构建前端。 | | **PM2 管理器** | 可选。本项目后端是 Java Jar,主流程用 `java -jar` 启动,不是用 PM2 跑 Node 服务。 | | **PostgreSQL 管理器** | 不作为主路径。PostgreSQL 走 **RDS / Flexus RDS**,不要在宝塔服务器里自建一份数据库。 | | **FTP 服务** | 可选且第一轮不推荐依赖。本项目上传后端 Jar 默认走 SSH / SCP 脚本。 | | **宝塔 SSH 终端** | 辅助工具。可以在浏览器里连服务器命令行,但它不是业务运行组件。 | | **堡塔入侵检测** | 安全辅助工具。可以保留,但支付系统能不能跑不依赖它。 | ![服务器软件配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/fwq-03.png) ![宝塔面板安装与登录](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-28-baota-panel-login.png) ### 7.3 安全组和 Nginx 备案等待期,你只需要在**云服务器安全组**里按下面做。安全组入口各家云厂商路径不同,跟着官方教程点即可。 ![安全组和 Nginx 边界](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-32-073-security-nginx.png) #### 一句话记住 ```{important} **对外只开 80 和 443。** 用户和微信 / 支付宝只认你的**域名**(例如 `https://pay-api.aihello.cn`),不认 `9216`、`9217` 这种端口号。 ``` #### 用「门店」来理解 把云服务器想成一家**只开正门的店**: | 角色 | 在本项目里是谁 | 干什么 | | --------------------- | ------------------ | --------------------------------------------------------- | | **正门(80 / 443)** | 安全组对全世界开放 | 顾客、微信、支付宝都从这儿进——必须是 HTTPS(443) | | **前台(Nginx)** | 宝塔里装的 Nginx | 站在门口:验 HTTPS 证书、看域名对不对,再把请求转给店里的人 | | **后厨(9216 / 9217)** | 两个 Java 后端 Jar | 真正干活的程序,只在服务器内部监听,外面的人不直接找它们 | 外面的人永远说:「我要去 `pay-api.xxx.com`」,不会说「我要去你服务器的 9216 号门」。**Nginx 就是前台**:外面只认域名 + HTTPS,Nginx 在服务器里把请求转给本机的 `9216` 或 `9217`。 ```text 互联网上的请求 你的云服务器内部 ──────────────────────────────────────────────────────────── https://pay-api.xxx.com → Nginx(443) → 本机 9216 支付网关 https://paymanager-api.xxx.com → Nginx(443) → 本机 9217 运营平台 ``` `9216`、`9217` 是 Java 程序**在机器里**用的「房间号」,不是给公网用的地址。后面「线上部署」章节会在宝塔里配好 Nginx 转发,这里只要先把安全组配对。 在云服务器**安全组**里添加或确认这些规则: | 端口 | 用途 | 怎么开 | | ---------------------------- | ------------------------------ | ------------------- | | **80** | HTTP(证书申请、跳转 HTTPS) | 对公网开放 | | **443** | HTTPS(所有后端 API 都从这里进) | 对公网开放 | | **22** | SSH 登录服务器 | 只填**你自己的 IP** | | **8888**(或你改过的宝塔端口) | 宝塔后台 | 只填**你自己的 IP** | ```{danger} 就这些。**不用**在安全组里为 `9216`、`9217`、`6379`、`61616`、`8161` 添加「对 0.0.0.0 开放」的规则——Redis、ActiveMQ、Java 后端都在同一台机器上,它们自己用 `127.0.0.1` 就能互相找到。 ``` #### 和「本地调试」的区别 | 场景 | 你怎么访问后端 | | ------------------------ | --------------------------------------------------------- | | **自己电脑本地跑 Java** | 浏览器可以写 `http://localhost:9216`,因为程序就在你电脑上 | | **线上(备案后的服务器)** | 必须用 `https://pay-api.xxx.com`,由 Nginx 转给本机 9216 | ```{warning} 线上不是「多开了一个 9216 端口就能用」,而是**域名 → 443 → Nginx → 本机 9216** 这一条链。本地能直连 9216,不代表线上也要在安全组里开 9216。 ``` ### 7.4 Redis 宝塔配置 Redis 是一个**内存缓存服务**。它读写很快,适合放登录 token、会话、短期状态、热点查询结果,但它不是本项目的账本,也不应该拿来保存订单这种长期数据。 在本项目里可以这样理解: | 问题 | 答案 | | ------------------------ | -------------------------------------------------------------------------------- | | Redis 负责什么 | 缓存、会话、token、短期状态 | | Redis 里的东西丢了会怎样 | 用户可能需要重新登录,缓存会重新生成;核心订单仍在 PostgreSQL RDS 里 | | 为什么不买独立云 Redis | 第一轮上线流量小,Redis 只给同机 Java 使用,放在云服务器上延迟低、成本低、排查简单 | | 安全边界是什么 | 只监听 `127.0.0.1:6379`,安全组不开放 6379,本项目不设 Redis 密码 | ```{important} 🎯 **关键区别:** PostgreSQL 保存的是钱和订单,所以必须上 RDS;Redis 保存的是可重建的临时数据,第一轮上线直接装在云服务器上就够。 ``` ![Redis 只作为本机缓存使用](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-33-074-redis-cache.png) 在宝塔「软件商店」搜索 **Redis**,安装 6.x 或 7.x。安装后打开 Redis 设置页,按下面核对: | 配置项 | 截图里的值 | 本项目建议 | 说明 | | ------------- | ----------- | --------------------------------------- | --------------------------------------------------------- | | `bind` | `127.0.0.1` | 保持 `127.0.0.1` | 只允许本机 Java 进程连接,**不要**改成 `0.0.0.0` | | `port` | `6379` | 保持 `6379` | Redis 默认端口,安全组不要对公网开放 | | `requirepass` | 留空 | **留空(不设密码)** | 本项目 Redis 只给本机访问,后端配置里的 Redis 密码保持为空 | | `maxmemory` | `0` | 起步可保持 `0` 或按需限制到 256MB~512MB | 第一轮上线不需要复杂调优 | ![Redis配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-03.png) ```{warning} 如果你改过配置,点击 **保存** 后再点击 **重启服务** 让配置生效。截图底部红字已经提醒了重点:不要开启 Redis 外网访问权限,未限制访问 IP 的情况下风险非常高。 ``` ```{note} 📌 **本项目 Redis 不需要配置密码。** 后端 `application.yml` 里 `spring.data.redis.password` 保持为空即可。和 ActiveMQ 不同,Redis 不需要记录到本地部署信息记录表,`rename-saas-service.sh` 也不会询问 Redis 密码。 ``` ### 7.5 ActiveMQ 宝塔配置 ActiveMQ 是一个**消息队列服务**。它的作用不是保存订单,而是让后端把一些任务先放进队列,再由另一个处理程序慢慢消费。 支付系统里最典型的场景是**支付回调**: ```text 微信 / 支付宝回调 │ ▼ 支付网关先接住请求 │ ▼ 把消息放进 ActiveMQ 队列 │ ▼ 后端消费者再处理订单状态、通知商户等后续动作 ``` ![ActiveMQ 负责支付回调排队处理](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-34-075-activemq-queue.png) 这样做有两个好处: - **解耦**:接回调和处理后续业务不用挤在同一段逻辑里。 - **削峰**:如果短时间内回调很多,先排队,后端按能力消费。 为什么第一轮不单独买云消息队列?因为本项目起步阶段只需要一个轻量队列,ActiveMQ 和 Java 后端同机通信即可。单独购买 Kafka / RocketMQ / DMS 这类云服务会增加账号、网络、权限、计费和排查成本,对新手第一轮上线过重。 ```{warning} ⚠️ ActiveMQ 虽然也装在云服务器上,但它和 Redis 有一个很大的区别:**ActiveMQ 必须改默认密码,并把新密码写入后端配置**。 ``` 在宝塔「软件商店」搜索 **ActiveMQ** 或 **activemq(Docker应用)**,进入安装配置页。按照截图里的字段理解即可: | 配置项 | 截图里的值 | 本项目建议 | 说明 | | ---------------- | ------------------------------------ | ------------------------------- | --------------------------------------------------- | | **web访问端口** | `8161` | 保持 `8161`,安全组不对公网开放 | ActiveMQ 管理后台端口,只在服务器内或宝塔内使用 | | **OpenWire端口** | `61616` | 保持 `61616`,安全组不对公网开放 | Java 后端连接 ActiveMQ 用的端口 | | **AMQP端口** | `5672` | 保持默认即可 | 本项目主流程不用它,若端口冲突再改 | | **MQTT端口** | `1883` | 保持默认即可 | 本项目主流程不用它,若端口冲突再改 | | **数据库目录** | `/www/dk_project/dk_app/dk_activemq` | 保持默认或使用宝塔给出的目录 | ActiveMQ 容器数据目录 | | **管理员用户** | `admin` | 保持 `admin` | 脚本和后端配置默认使用 `spring.activemq.user=admin` | | **管理员密码** | 安装页生成或默认值 | **改成你自己的强密码** | 16 位以上,含大小写、数字、符号 | ![ActiveMQ配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-04.png) 修改管理员密码后,点击页面右下角 **重建应用**。ActiveMQ 是 Docker 应用,改安装配置后需要重建应用,新密码才会真正生效。 ```{important} 📌 **ActiveMQ 密码一定要记录。** 把你刚设置的新密码保存到自己的密码管理文档,也就是前面建立的 `web-pay-deploy-info.md`。它对应本地部署信息记录表**第 9 项**,脚本提示词就是 `ActiveMQ 密码`。 ``` 后面运行 `env-scripts/rename-saas-service.sh` 时,脚本会询问: ```text ActiveMQ 密码 ``` 你把这里记录的密码粘贴进去即可。脚本会把它同时写入两个后端模块配置。 ```{important} 🎯 **Redis 和 ActiveMQ 在本项目里最大的区别:** Redis 不设密码,不用写进配置;ActiveMQ 必须改密码,并通过脚本写进两个后端模块,两个模块保持一致。 ``` ### 7.6 完成检查清单 做到这里,服务器基础环境至少要满足这些条件: ![服务器基础环境完成检查清单](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-35-076-server-checklist.png) - [ ] 宝塔后台能登录,并且 8888 端口只允许你自己的 IP 访问。 - [ ] Nginx 已安装,后面可以用它配置 HTTPS 和反向代理。 - [ ] OpenJDK 17 已安装,服务器能运行 Java 17 的 Jar。 - [ ] Redis 已安装,`bind=127.0.0.1`,`port=6379`,`requirepass` 留空。 - [ ] 云服务器安全组没有对公网开放 `6379`、`61616`、`8161`、`9216`、`9217`。 - [ ] ActiveMQ 已安装,管理员用户保持 `admin`,管理员密码已改成强密码。 - [ ] ActiveMQ 改密码后已点击 **重建应用**。 - [ ] ActiveMQ 新密码已写入 `web-pay-deploy-info.md` 的第 9 项「ActiveMQ 密码」。 ## 08 备案等待期:准备 PostgreSQL 云数据库 上一节装了 Redis / ActiveMQ,这一节开始准备 PostgreSQL。先别急着点控制台,新手最容易卡在这里:文档里同时出现了「数据库」「缓存」「消息队列」「RDS」,看起来都在"存东西",但它们在支付系统里的责任完全不同。 ### 8.1 数据库是什么,和 Redis / ActiveMQ 有什么区别 数据库可以先理解成系统的**长期账本和档案柜**。用户下单、支付成功、商户资料、运营后台账号、系统配置,都要长期保存、可查询、可对账,这类数据不能因为服务器重启、缓存清空、队列重建就消失。 本项目真正承担这个角色的是 **PostgreSQL**。它是关系型数据库,适合保存结构化、长期、必须准确的数据: | 数据类型 | 举例 | 为什么必须进 PostgreSQL | | -------- | -------------------------------- | -------------------------- | | 订单数据 | 订单号、金额、支付状态、创建时间 | 后面对账、退款、查单都靠它 | | 商户资料 | 商户号、应用配置、支付通道配置 | 运营平台和支付网关都要读取 | | 后台数据 | 管理员账号、权限、系统参数 | 平台能不能正常管理靠它 | | 回调记录 | 微信 / 支付宝通知结果、处理状态 | 支付异常时要追溯 | Redis 和 ActiveMQ 虽然也会保存一些运行时数据,但它们不是本项目的核心数据库: | 组件 | 准确角色 | 放哪里 | 存什么 | 丢了会怎样 | | -------------- | ------------------------- | ---------------------------- | ---------------------------------------- | --------------------------------------- | | **PostgreSQL** | 关系型数据库 / 长期账本 | **华为云 RDS 或 Flexus RDS** | 订单、商户、支付状态、后台用户、系统配置 | **灾难**:钱对不上、订单消失、无法对账 | | **Redis** | 内存缓存 | 云服务器 + 宝塔 | 登录 token、会话、短期缓存、热点查询结果 | 可恢复:用户可能要重新登录,缓存会重建 | | **ActiveMQ** | 消息队列,严格说不是数据库 | 云服务器 + 宝塔 | 支付回调等临时排队消息 | 短暂影响:未消费消息可能要补偿或人工处理 | 🎯 **一句话记住:** PostgreSQL 管长期、准确、不能丢的数据;Redis 管临时缓存;ActiveMQ 管任务排队。Redis / ActiveMQ 装在云服务器上是为了辅助 Java 后端运行,不是替代 PostgreSQL。 ![PostgreSQL Redis ActiveMQ 的职责区别](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-36-081-data-roles.png) ### 8.2 为什么 PostgreSQL 必须单独用云数据库 RDS 本教程的数据库选择很明确:**PostgreSQL 一律用华为云 RDS 或 Flexus RDS,二选一**。不要在宝塔里再装一份 PostgreSQL,也不要把订单、商户、支付状态这类核心数据放进 Redis / ActiveMQ。 为什么要单独配置一个云数据库?因为支付项目的 PostgreSQL 里存的是**真正的钱和订单**: - 用户付了多少钱、订单号多少、回调有没有成功——**全部在这里**。 - 服务器磁盘坏了、误删了数据、被入侵改了表——**没有备份就等于店被烧了**。 - 只要 PostgreSQL 数据还在,Redis 缓存可以重建,ActiveMQ 队列可以补偿;但 PostgreSQL 丢了,就很难恢复真实账目。 把 PostgreSQL 和 Java / Redis / ActiveMQ **挤在同一台 2 核 4G 云服务器上**,还有这些现实问题: | 风险 | 自建在服务器上 | 云数据库 RDS(任一款) | | -------- | --------------------------------------------------- | ----------------------------------- | | 备份 | 要自己写 cron、测恢复,新手几乎不会 | 控制台配置自动备份,支持按时间点恢复 | | 资源争抢 | Java + MQ + Redis + PG 抢 CPU / 内存,高峰时 PG 变慢 | 数据库独立算力 | | 误操作 | 宝塔里点错、重装系统,PG 数据一起没 | 实例和服务器生命周期分离 | | 安全 | 5432 端口配错就暴露全网 | 白名单 + 内网连接,默认更安全 | ```{important} 🎯 **本教程的明确选择:** PostgreSQL 一律用云数据库 RDS(华为云 RDS 或 Flexus RDS,二选一),不要在云服务器 / 宝塔里再装一份 PostgreSQL。 ``` ![PostgreSQL RDS 承载钱和订单](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-37-082-rds-safety.png) 接下来一定要先分清楚两套环境。它们使用的是**同一个 RDS PostgreSQL 数据库**,但前端在哪里、后端在哪里、后端怎么连数据库都不一样。 **本地测试环境**是为了开发调试:前端和后端都运行在你的电脑上。你用浏览器打开本地前端,本地前端请求本地后端,本地后端再通过 RDS 公网地址 / EIP 连接云数据库。这是为了能够快速调试,发现并解决问题。 **云生产环境**是为了正式上线:前端构建后放到 OBS/CDN,用户访问的是前端域名;前端请求后端 API 域名,Nginx 把请求转发到云服务器上的 Java 后端;云服务器后端再通过 RDS 内网地址连接云数据库。 ```{warning} ⚠️ 这里有一个容易误解的点:**生产环境不用 RDS 公网地址**,不等于"生产环境完全没有公网 IP"。云服务器公网 IP、后端 API 域名、前端 CDN 域名仍然存在;只是**后端连接数据库这一步不再走 RDS 公网 EIP**,而是走同区域、同 VPC 的内网地址。 ``` | 对比项 | 本地测试环境 | 云生产环境 | | --------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------- | | 前端运行在哪里 | 你电脑上的本地前端开发服务 | OBS 静态网站 + CDN 加速(后面 `## 12` 会讲) | | 后端运行在哪里 | 你电脑上的本地 Java 进程 | 云服务器上的 Java Jar | | 浏览器访问入口 | `http://localhost:8080` / `http://localhost:8002` | `https://pay.example.com` / `https://paymanager.example.com` | | 前端请求后端 | 请求 `http://localhost:9216` / `http://localhost:9217` | 请求 `https://pay-api.example.com` / `https://paymanager-api.example.com` | | 后端连接数据库 | **RDS 公网地址 / EIP:5432** | **RDS 内网地址:5432** | | 后端配置文件 | `application-local.yml` | `application.yml` | | 是否需要 RDS 公网 EIP | 需要,用于本地电脑直连 RDS | 不需要作为生产链路;可删除、收紧或临时排查时开启 | | 安全组重点 | RDS 5432 只放行你的本机公网 IP/32 | RDS 5432 只放行云服务器内网 IP 或云服务器安全组 | ```{note} 💡 严格说没有「公网 VPC」这个配置项。VPC 是云上的内网环境;本地电脑不在华为云 VPC 里,所以本地测试走 RDS 绑定的公网地址/EIP;云生产环境里的后端和 RDS 在同一个云内网里,所以走 RDS 内网地址。不要把 RDS 公网地址写进生产 `application.yml`。 ``` ![本地测试和云生产连接 RDS 的两条路径](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-38-082-local-prod-rds-paths.png) **场景 A:本地测试环境,前后端都在本地,RDS 走公网地址** ```text ┌──────────────────── 你的电脑(本地测试) ────────────────────┐ │ │ │ 浏览器 │ │ │ │ │ ▼ │ │ 本地前端 │ │ http://localhost:8080 / http://localhost:8002 │ │ │ │ │ ▼ │ │ 本地后端 Java │ │ http://localhost:9216 / http://localhost:9217 │ │ 读取 application-local.yml │ └────┼───────────────────────────────────────────────────────┘ │ 公网连接: RDS 公网地址 / EIP:5432 │ RDS 安全组只放行你的本机公网 IP/32 ▼ ┌───────────────────────────── 华为云 ─────────────────────────────┐ │ │ │ ┌────────── RDS for PostgreSQL(标准版 或 Flexus,二选一) ───┐ │ │ │ 端口 5432 · 库 pay · 用户 pay_user · 自动备份 │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘ ``` **场景 B:云生产环境,前端在 OBS/CDN,后端在云服务器,RDS 走内网地址** ```text 用户浏览器 │ │ 访问前端域名: │ https://pay.example.com / https://paymanager.example.com ▼ ┌───────────────────────────── 华为云 ─────────────────────────────┐ │ │ │ ┌──────────── OBS 静态网站 + CDN ────────────┐ │ │ │ 收银台前端 / 运营平台前端 │ │ │ └──────────────────┬────────────────────────┘ │ │ │ 请求后端 API 域名 │ │ │ https://pay-api.example.com │ │ │ https://paymanager-api.example.com │ │ ▼ │ │ ┌────────────────── 云服务器(你买的 ECS) ──────────────────┐ │ │ │ Nginx :443 │ │ │ │ Java 9216 / 9217 ──→ Redis :6379 (本机) │ │ │ │ ──→ ActiveMQ :61616 (本机) │ │ │ │ 读取 application.yml │ │ │ └──────────────────────────────┬────────────────────────────┘ │ │ │ RDS 内网地址:5432 │ │ │ 内网(VPC,同区域同 VPC) │ │ ▼ │ │ ┌────────── RDS for PostgreSQL(标准版 或 Flexus,二选一) ───┐ │ │ │ 端口 5432 · 库 pay · 用户 pay_user · 自动备份 │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘ ``` 概念清楚后,下面才进入具体配置:先选 RDS 产品,再创建库和用户,再配置本地调试需要的公网访问入口。 ### 8.3 两款 RDS 怎么选(连接方式一样,计费不同) **华为云 RDS for PostgreSQL** 和 **Flexus 云数据库 RDS for PostgreSQL** 都是托管 PostgreSQL——你买的是「已经装好的数据库实例」,不是自己在一台 Linux 上 `yum install postgresql`,也不是在宝塔里再装一份。 两款产品的**建库、建用户、白名单、DAS 登录、Java 连接方式完全一样**——区别主要在**功能档位**和**怎么付钱**: | 产品 | 控制台入口 | 官方教程 | 计费特点 | 更适合谁 | | ---------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------- | | **华为云 RDS**(标准版) | [RDS 控制台](https://console.huaweicloud.com/rds/?locale=zh-cn®ion=cn-east-3#/rds/management/overview) | [RDS for PostgreSQL 快速入门](https://support.huaweicloud.com/qs-rds-pgsql/index.html) | 功能更高阶;支持**按使用时长扣费**;**包月相对更贵** | 验证阶段只开几天调试、想「用多久付多久」 | | **Flexus RDS** | [Flexus RDS 控制台](https://console.huaweicloud.com/flexus/?locale=zh-cn#/hrds/yunyao/management/list) | [购买并连接 FlexusRDS for PostgreSQL](https://support.huaweicloud.com/qs-flexusrds/pg_01_0006.html) | **不支持按使用时长扣费**,只能包月;**包月相对更便宜** | 已确定连续用一整月、想省包月价 | ![标准版 RDS 和 Flexus RDS 二选一](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-39-083-rds-choice.png) ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-01.png) ```{tip} 💡 **怎么快速决定**: - 还不确定能不能跑通、可能只开 **3~7 天**调试 → 选 **标准版 RDS + 按使用时长计费**。 - 已经决定至少用 **1 个月**,且预算敏感 → 选 **Flexus RDS 包月套餐**(例如经济版 2核4G)。 ``` ```{warning} ⚠️ **无论选哪一款**,都必须和 `## 05` 购买的云服务器**同区域、同 VPC**——否则内网连不上。两款产品**不要各买一份**,选一个就够。 ``` ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-05.png) ### 8.4 为RDS数据库配置公网访问入口 ```{important} 这一节配置的是**本地测试通道**,不是生产通道。前面已经讲过原因:本地测试时,前端和后端都跑在你的电脑上,本地后端需要通过 **RDS 公网地址 / EIP** 连接云数据库。 后端真正部署到云服务器后,生产链路应该改用 **RDS 内网地址**。RDS 公网 EIP 可以删除、收紧,或者只在临时排查问题时打开。 ``` 配置流程就两件事: ```text 1. 购买一个弹性公网 IP(EIP) │ ▼ 2. 把这个 EIP 绑定到 RDS PostgreSQL 实例 ``` ![为 RDS 绑定公网 EIP 供本地测试使用](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-40-084-rds-eip.png) #### 第一步:购买弹性公网 IP 在华为云控制台搜索 **弹性公网 IP EIP**,点击购买: | 项目 | 建议 | | -------- | ---------------------------------------------- | | 区域 | 和 RDS 实例相同区域 | | 计费模式 | 开发阶段选按需计费 | | 带宽 | 1 Mbit/s 起步即可 | | 绑定对象 | 先不要绑定到云服务器,本节要绑定到 **RDS 实例** | 为什么 1 Mbit/s 就够?因为本地调试数据库主要传的是 SQL 文本和少量查询结果,不是视频、图片这种大流量内容。 ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-06.png) #### 第二步:为 RDS 绑定公网 IP 在华为云 RDS 控制台操作: 1. 进入 **云数据库 RDS**。 2. 找到你的 PostgreSQL 实例,点击实例名称。 3. 左侧进入 **连接管理**。 4. 找到 **公网地址**。 5. 点击 **绑定**。 6. 选择刚才购买的、状态为"未绑定"的弹性公网 IP。 7. 确认绑定,等待任务完成。 ```{seealso} 华为云官方文档入口: [绑定和解绑弹性公网IP](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_public_accessibility.html)。 ``` ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-07.png) ### 8.5 新建支付数据库 RDS 实例创建好以后,它里面还只是一个“数据库服务器”。本项目还需要在这个实例里新建一个专门给支付系统使用的业务数据库,建议统一命名为 `pay`。 ![在 RDS 中新建支付数据库和业务用户](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-41-085-pay-database.png) #### 第一步:登录 RDS 实例 回到 RDS 实例列表,找到刚创建的 PostgreSQL 实例,点击右侧的「登录」。这一步会打开华为云的数据库管理页面,后面创建数据库、创建用户、授权都在这里完成。 ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-08.png) 登录窗口里填写的是 **RDS 实例管理员信息**,不是后端项目最终要使用的业务账号: | 登录项 | 怎么填 | 说明 | | ---------- | ------------------ | ---------------------------------------- | | 登录用户名 | 通常是 `root` | 购买 RDS 时创建的实例管理员账号 | | 数据库名称 | `postgres` | PostgreSQL 默认维护库,先用它登录管理实例 | | 密码 | RDS 实例管理员密码 | 购买 RDS 时设置的密码 | 填写完成后可以先点「测试连接」。测试成功后再登录;「记住密码」只建议在自己的电脑上勾选。 ```{note} 注意:这里的 `root` / `postgres` / 管理员密码只是用来进入 RDS 管理后台。 ``` ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-09.png) #### 第二步:新建业务数据库 `pay` 登录成功后进入数据库管理页,找到「数据库」列表,点击「新建数据库」。 新建时按下面填写: | 配置项 | 本项目建议值 | | ------------ | ----------------------------------- | | 数据库名称 | `pay` | | 字符集 | `UTF8` | | 数据库所有者 | 先保持默认,后面再给 `pay_user` 授权 | 如果列表里已经出现 `pay`,说明数据库已经建好了,不要重复创建。后面所有初始化 SQL、后端配置、脚本提示都会默认使用这个库名。 ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-10.png) ### 8.6 PostgreSQL 配置信息汇总 完成 `pay` 数据库创建后,还要为后端准备固定的业务用户并汇总连接信息。具体按钮位置按你选的 RDS 官方教程 + DAS 控制台操作即可,但名字建议保持一致,避免后面脚本和配置对不上。 | 项目 | 本项目建议值 | 说明 | | ---------- | ------------ | ----------------------------------------------- | | 数据库名称 | `pay` | 后端配置和 Flyway 空库初始化都按这个库名写 | | 数据库用户 | `pay_user` | 业务专用账号,也可以用默认的root | | 数据库密码 | 强密码 | 16 位以上,含大小写、数字、符号,保存到密码管理器 | ![PostgreSQL 配置信息汇总](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-42-086-postgres-config.png) ![RDS配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/RDS-02.png) ```{important} 📌 到这里,PostgreSQL 相关的 5 个配置项都应该拿到了。把它们统一填进你自己的 `web-pay-deploy-info.md`密码管理文档中: ``` | 本地部署信息记录表项目 | 从哪里获得 | 写到哪里 | | --------------------------------------- | ---------------------------------------- | ---------------------------- | | **PostgreSQL 内网连接地址(不含端口)** | RDS 控制台「概述」里的内网地址 | 生产 `application.yml` | | **PostgreSQL 公网连接地址(不含端口)** | `## 08.4` 绑定到 RDS 的 EIP / 公网地址 | 本地 `application-local.yml` | | **PostgreSQL 数据库名称** | 本节创建的业务库名,建议 `pay` | 生产和本地后端配置 | | **数据库用户名** | 本节创建的业务用户,可以使用默认的 `root` | 生产和本地后端配置 | | **数据库密码** | 创建 `root` 时设置的强密码 | 生产和本地后端配置 | ```{important} 🎉 到此为止,后面 `rename-saas-service.sh` 需要的 PostgreSQL 五项配置已经完全收集完成啦。后续脚本会把公网地址写入 `application-local.yml`,把内网地址写入 `application.yml`,两者不要混填。 ``` ## 09 备案等待期:同步申请微信支付和支付宝 备案等待期里,支付侧审核也要同步启动。微信支付和支付宝都可能需要数个工作日,所以不要等备案通过后才申请。 这一节只做一件事:把**微信侧**和**支付宝侧**分别准备清楚。平台后台负责"你有没有资格收款",运营平台负责"把这些资料填进 web-pay,让系统能发起支付"。 ### 9.1 微信侧:申请正式商户 微信支付是本教程的两个支付渠道之一。**个人微信收款码不算商户号**,无法做技术对接,你必须申请**正式商户**。 商户类型先看清楚: - **个人**:**不能直接申请微信支付商户**(微信不向自然人开放商户号)。 - **个体工商户**:可以申请,需要营业执照 + 法人身份证。 - **企业**:正常申请。 如果你目前是个人但想接入微信支付,**最低成本是注册一个个体工商户**(网上办理,几十到几百元,周期 1-2 周)。 - 申请地址:[微信商户平台](https://pay.weixin.qq.com) 申请流程(高层): 1. 登录微信支付商户平台,提交主体资料(营业执照、法人身份证)。 2. 上传**对公账户**信息(企业/个体户的银行账户)。 3. 微信打款验证(几分钱到对公账户,你回填金额)。 4. 设置**结算账户**和**超级管理员**。 5. 通过审核后,得到**商户号(MCH ID)**。 ![微信正式商户申请流程](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-43-091-wechat-merchant.png) 整个流程通常 1-3 个工作日。 ### 9.2 微信侧:开通支付产品 商户号通过后,还要在**微信支付商户平台**开通具体收款方式。可以在「产品中心」里申请: ![微信支付产品按场景开通](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-44-092-wechat-products.png) ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-01.png) | 微信收款方式 | 常见使用场景 | | --------------------- | ------------------------------------------ | | **JSAPI 支付** | 公众号网页、小程序内唤起微信支付 | | **Native / 扫码支付** | PC 网站或统一收银台展示二维码,用户扫码付款 | | **APP 支付** | 自有 App 内调用微信支付 | | **H5 支付** | 手机浏览器内唤起微信支付 | | **刷脸支付** | 线下设备或刷脸收款场景 | ```{warning} ⚠️ **只有对应收款方式审核通过后,才可以使用该方式收款。** 例如只开通了 Native 支付,就不能直接在 App 里调用 APP 支付。 ``` ### 9.3 微信侧:配置 API 安全 微信的 API 安全配置在商户平台里做一次即可: ```text 微信支付商户平台 → 账户中心 → API 安全 ``` ![微信 API 安全资料](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-45-093-wechat-api-security.png) ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-04.png) 按照官方教程配置API密钥,下载密钥证书: | API 安全项 | 说明 | | ----------------- | -------------------------------------------------------------------------------------------- | | **APIv2 密钥** | V2 接口签名使用,在商户平台自行设置并保存 | | **APIv3 密钥** | V3 接口、回调解密使用,必须是 32 位字符串 | | **商户 API 证书** | 用证书工具申请,会生成 `apiclient_cert.p12`、`apiclient_cert.pem`、`apiclient_key.pem` 等文件 | | **微信支付公钥** | 下载后得到 `pub_key.pem`,同时记录**微信侧公钥 ID** | ```{important} 🎯 **这套 API 安全资料只需要配置一次。** 微信扫码付款、小程序调用付款、APP 调用微信付款、H5 唤起付款等支付方式,共用同一套商户 API 密钥、证书和微信支付公钥。不同的是:每种收款方式仍然要在「产品中心」单独开通并审核通过。 ``` ```{danger} ⚠️ **APIv2 密钥和 APIv3 密钥都是你自己设置的敏感字符串**,微信不会给你发。设置时立刻保存到密码管理器;丢了只能重置,重置后相关签名配置都要同步更新。 ``` ### 9.4 微信侧:最终要拿到的资料 后面在运营平台配置微信支付时,会把微信商户平台里的资料分成三类填写:**开发配置、API 安全资料、证书 / 公钥文件**。这一小节的目标不是立刻完成配置,而是先把后面要填的内容全部收集好。 ![微信最终资料汇总](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-46-094-wechat-materials.png) **开发配置:** | 资料 | 从哪里获得 | 备注 | | ------------------ | -------------------------------------- | --------------------------------- | | **商户号(MCH ID)** | 微信支付商户平台首页 | 收款主体身份 | | **微信应用 AppID** | 公众号 / 小程序 / 微信开放平台 | 按支付场景选择来源 | | **JSAPI支付授权** | 微信商户平台「产品中心 → JSAPI 支付」 | 通过后才能做公众号 / 小程序内付款 | | **Native支付授权** | 微信商户平台「产品中心 → Native 支付」 | 通过后才能做扫码付款 | ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-02.png) 商户号本身不能发起支付,**必须绑定一个 AppID**。AppID 来源取决于你的支付场景: | 支付场景 | AppID 来源 | 申请入口 | | -------------------- | ---------------------- | ------------------------------------- | | 小程序内支付 | **小程序 AppID** | `https://mp.weixin.qq.com` 注册小程序 | | 公众号网页内支付 | **公众号 AppID** | `https://mp.weixin.qq.com` 注册服务号 | | 网页扫码支付(Native) | 公众号或开放平台 AppID | 同上 | | APP 内支付 | **开放平台 AppID** | `https://open.weixin.qq.com` | ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-03.png) **API 安全资料:** 微信商户平台「API 安全」页面里会看到商户 API 证书、APIv2 密钥、微信支付公钥、APIv3 密钥等卡片。这里最终要抄到运营平台的是下面四项,它们用于后续在**运营平台配置微信支付参数**:后端发起微信支付请求、处理回调、解密通知和校验签名时都会用到。 | 资料 | 从哪里获得 | 运营平台字段 / 用途 | | ----------------- | ----------------------------------------------- | ------------------------------------------------------- | | **APIv2 密钥** | 商户平台「API 安全 → 商户 APIv2 密钥」自行设置 | 填入运营平台 `APIv2密钥`,用于 V2 接口签名 | | **APIv3 密钥** | 商户平台「API 安全 → APIv3 密钥」自行设置 | 填入运营平台 `APIv3密钥`,用于 V3 回调解密和接口安全校验 | | **微信侧公钥 ID** | 商户平台「API 安全 → 微信支付公钥」 | 填入运营平台 `微信侧公钥ID`,用于匹配微信支付公钥 | | **证书序列号** | 商户平台「API 安全 → 商户 API 证书 → 管理证书」 | 填入运营平台 `序列号`,用于标识本次签名使用的商户证书 | **需要上传 / 保管的 4 个文件:** 下面 4 个文件不是普通文档,而是后端支付时用于微信官方身份校验、签名和验签的密钥 / 证书文件。正式部署时,这些文件会保存到云服务器的私有目录中;在运营平台配置微信支付时,也需要把对应文件上传到相应字段,让后端能读取它们。 | 文件 | 来源 | 运营平台字段 / 用途 | | -------------------- | ---------------------------- | --------------------------------------------------------------------------- | | `apiclient_cert.p12` | 商户 API 证书工具生成 | 上传到运营平台 `API证书(apiclient_cert.p12)`,V2 退款等安全接口可能用到 | | `apiclient_cert.pem` | 商户 API 证书工具生成 | 上传到运营平台 `证书文件(apiclient_cert.pem)`,用于商户证书身份校验 | | `apiclient_key.pem` | 商户 API 证书工具生成 | 上传到运营平台 `私钥文件(apiclient_key.pem)`,后端发起 V3 请求签名时使用 | | `pub_key.pem` | 商户平台「微信支付公钥」下载 | 上传到运营平台 `微信侧公钥证书(pub_key.pem)`,后端校验微信支付回调签名时使用 | ```{danger} 🔐 上面这些密钥、证书、公钥 ID、证书序列号和证书文件都建议按敏感资料处理。不要放进公开仓库、公开截图、前端代码或聊天记录;只保存在你控制的私有仓库、密码管理器、云服务器私有目录或运营平台后台中。 ``` ### 9.5 支付宝侧:先开通商家收款能力 支付宝的接入相比微信支付**对个人开发者更友好**——支付宝开放平台允许个人(自然人)创建应用并完成实名认证,但能用的支付能力受限。为了和微信支付、ICP备案、真实经营收款保持同一个主体,本教程同样建议你优先用**个体工商户**身份注册和开通支付宝侧能力。 主体类型: - **个人**:可以注册支付宝开放平台账号,创建应用,**仅能使用部分能力**(当面付、网页支付等基础能力可用),适合早期了解流程。 - **个体工商户**:本教程推荐方式,用营业执照和经营者身份完成商家入驻,后续收款、对账、平台审核更统一。 - **企业**:权限最完整,可以接入所有产品。 完成个体工商户注册后,用这个经营主体对应的支付宝账号登录下面两个后台。支付宝侧通常要同时使用它们: | 平台 | 地址 | 作用 | | ------------------ | -------------------------------------------------- | -------------------------------- | | **支付宝商家平台** | [https://b.alipay.com](https://b.alipay.com) | 开通你能使用哪些收款产品 | | **支付宝开放平台** | [https://open.alipay.com](https://open.alipay.com) | 创建应用、配置密钥、提交应用上线 | ![支付宝商家平台和开放平台分工](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-47-095-alipay-merchant.png) 先登录支付宝商家平台,在产品中心开通需要的收款方式。 ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-05.png) 建议按业务需要申请: | 支付宝收款方式 | 常见使用场景 | | ---------------- | ------------------------------- | | **当面付** | 扫码收款、统一收银台二维码 | | **经营码** | 商家经营收款码 | | **订单码支付** | 按订单生成二维码收款 | | **APP 支付** | 自有 App 内唤起支付宝付款 | | **电脑网站支付** | PC 网页跳转支付宝付款 | | **手机网站支付** | 手机浏览器跳转 / 唤起支付宝付款 | ```{warning} ⚠️ **只有对应收款方式审核通过后,才可以使用该方式收款。** 例如网站应用创建好了,但没有开通电脑网站支付 / 手机网站支付,线上调用时仍然可能提示未签约或无权限。 ``` ### 9.6 支付宝侧:开放平台创建两个收款应用 完成商家平台的收款能力申请后,进入支付宝开放平台创建应用。本教程按**普通商户直连模式**准备两个独立应用,不引入服务商 / ISV 授权模式。 操作入口: | 入口 | 用途 | | --------------------------------------------------------------------------------------- | -------------------------------------------- | | [支付宝开放平台](https://open.alipay.com) | 登录控制台、查看和管理应用 | | [网页/移动应用](https://open.alipay.com/module/webApp) | 官方的网页和移动 App 应用入口,可直接前往创建 | | [网站创建和配置官方教程](https://opendocs.alipay.com/open/270/01didh?pathHash=a6ccbe9a) | 按支付宝官方教程完成网站应用创建和配置 | | 应用 | 用途 | 支持的收款方式 | | ---------------------------- | --------------------------------------------------------- | ------------------------------------------ | | **支付宝网站应用:SaaS收款** | 支持网页、统一收银台、PC / H5 场景,例如「喵呜档案网页端」 | 支付宝扫码付款、电脑网站支付、手机网站支付 | | **支付宝 APP 应用:SaaS收款** | 支持自有 App 唤起支付宝付款,例如「喵呜档案 APP 端」 | APP 支付 | ![支付宝网站应用和 APP 应用分开创建](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-48-096-alipay-two-apps.png) ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-06.png) 如上图,进入开放平台控制台后,切到「网页/移动应用」页签。网站收款应用点「创建网页/移动应用」,APP 收款应用也在同一类应用下创建,但后续选择和申请的能力不同。 网站应用按官方教程完成下面几件事: 1. 创建「网页/移动应用」,填写应用名称、应用图标、应用描述等基础信息。 2. 按官方教程补齐网站相关信息,不要把测试域名、localhost 或内网地址当成正式网站地址。 3. 在「可调用产品」或能力配置中,为网站应用申请电脑网站支付、手机网站支付、当面付等网页收款能力。 4. 进入「开发设置」,配置接口加签方式、接口内容加密方式等安全项。 5. 提交审核并上线;审核通过后,记录该网站应用的 AppID。 ![支付配置](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/JF-07.png) 如上图,「开发设置」里重点看这些项: | 配置项 | 本教程怎么处理 | | ----------------------------------------- | ----------------------------------------------------------------------------- | | **接口加签方式(密钥/证书)** | 必须配置,本教程按普通公钥模式准备应用公钥、应用私钥和支付宝公钥 | | **接口内容加密方式** | 按需开启;开启后要保存 AES 加密密钥,并同步填到运营平台 | | **支付宝网关地址** | 保持官方生产网关 `https://openapi.alipay.com/gateway.do` | | **应用网关 / 授权回调地址 / openid 配置** | 涉及异步消息、授权或用户标识时再按官方教程补齐;第一轮只做收款主链路时不要乱填 | APP 应用也按同一入口创建,但能力侧重点是 **APP 支付**。如果你的 SaaS 暂时没有 App 端,可以先只创建网站应用;等 App 端需要唤起支付宝付款时,再补 APP 应用。 ### 9.7 支付宝侧:生成和上传密钥 密钥生成和上传不要靠猜,直接按支付宝官方教程做: - 官方教程:[密钥配置 / 生成说明](https://opendocs.alipay.com/common/02kf5p?pathHash=2df64be8) 本教程不在这里重复每一步按钮路径,因为支付宝开放平台页面经常微调。你只需要按官方教程完成三件事: 1. 为**网站应用**生成一套应用公钥 / 应用私钥,并把应用公钥上传到该应用的「接口加签方式」。 2. 为**APP 应用**生成另一套应用公钥 / 应用私钥,不要和网站应用混用。 3. 上传应用公钥后,分别保存开放平台生成的**支付宝公钥**;如果开启接口内容加密,也保存对应的 **AES 加密密钥**。 ![支付宝应用密钥生成与上传](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-49-097-alipay-key-flow.png) ```{important} 🎯 **网站收款和 APP 收款是两条分开的收款路径。** 网站应用负责网页、统一收银台、扫码等场景;APP 应用负责 App 内唤起支付宝付款。对应地,你需要创建两个收款应用、生成两套密钥,后续也要在运营平台里分别保存。暂时没有 App 端时,可以先只为网站应用申请和配置密钥。 ``` ```{warning} ⚠️ **公钥与私钥不要搞混**: - **应用公钥**:你**上传给**支付宝。 - **应用私钥**:你**自己保留**,签名时使用。 - **支付宝公钥**:支付宝**给你**,用于验证支付宝回调签名。 - **AES 加密密钥**:开启接口内容加密时使用;不开启时运营平台保持关闭即可。 ``` ```{danger} 🔐 **应用私钥就是你的支付身份**,泄露后别人可以冒充你的应用发起支付请求。和数据库密码一个等级,**只能放在服务器或本地保密配置中**。 ``` ### 9.8 支付宝侧:最终要拿到的资料 ![支付宝最终资料不要混用](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-50-098-alipay-materials.png) **支付宝网站应用:SaaS收款(支持网页,需要独立的应用,例如「喵呜档案网页端」)** | 最终资料 | 从哪里获得 | 运营平台位置 / 用途 | | --------------------------- | ------------------------------------------------- | ---------------------------------------------------------- | | **支付宝商家号** | 支付宝商家平台 / 商家资料 | 运营平台商户资料、对账和人工核对 | | **APPID** | 支付宝开放平台 / 网页/移动应用 | 运营平台收款应用支付宝配置 | | **应用公钥** | 按官方密钥教程生成,上传到网站应用「接口加签方式」 | 只用于上传给支付宝开放平台,本地记录备用,通常不填入运营平台 | | **应用私钥** | 支付宝开放平台开发助手本地生成 | 运营平台「支付宝 → 应用私钥」 | | **支付宝公钥** | 上传应用公钥后,开放平台生成 | 运营平台「支付宝 → 支付宝公钥」 | | **AES 加密密钥 / 加密状态** | 开放平台接口内容加密配置 | 运营平台「是否开启加密」和「密钥」 | **支付宝 APP 应用:SaaS收款(支持 APP,需要独立的应用,例如「喵呜档案 APP 端」)** | 最终资料 | 从哪里获得 | 运营平台位置 / 用途 | | --------------------------- | -------------------------------------------------- | ---------------------------------------------------------- | | **支付宝商家号** | 支付宝商家平台 / 商家资料 | 运营平台商户资料、对账和人工核对 | | **APPID** | 支付宝开放平台 / 第三方应用 | 运营平台收款应用支付宝配置 | | **应用公钥** | 按官方密钥教程生成,上传到 APP 应用「接口加签方式」 | 只用于上传给支付宝开放平台,本地记录备用,通常不填入运营平台 | | **应用私钥** | 支付宝开放平台开发助手本地生成 | 运营平台「支付宝 → 应用私钥」 | | **支付宝公钥** | 上传应用公钥后,开放平台生成 | 运营平台「支付宝 → 支付宝公钥」 | | **AES 加密密钥 / 加密状态** | 开放平台接口内容加密配置 | 运营平台「是否开启加密」和「密钥」 | ```{warning} 📌 到这里要特别注意:支付宝网站应用和支付宝 APP 应用不要共用同一组密钥。后面在运营平台配置支付宝支付时,也要分别选择对应应用、填写对应应用的私钥 / 支付宝公钥 / 加密配置。 ``` ```{danger} 🔐 支付宝 AppID、应用私钥、应用公钥、支付宝公钥、AES 加密密钥都建议按敏感资料处理。不要放进公开仓库、公开截图、前端代码或聊天记录;只保存在你控制的私有仓库、密码管理器、云服务器私有目录或运营平台后台中。 ``` ```{tip} 💡 本教程主流程使用**普通公钥模式 + RSA2**。支付宝也支持公钥证书模式,但新手第一轮上线不建议把两套模式混在一起;等主链路跑通后,再按官方文档升级证书模式也不迟。 ``` ## 10 备案等待期:检查本地工具和项目目录 备案等待期里,本地电脑也要准备好。这里不要求你先把所有代码都看懂,目标只有两个:确认本地工具能跑、确认项目目录完整。后面再借助 AI 分析项目结构,快速定位需要配置的代码环境。🧪 ![本地工具和项目目录检查](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-51-100-local-tools.png) ```bash git --version # Git node -v # Node.js,推荐 v18 LTS 或 v20 LTS npm -v # npm,通常随 Node 一起装 java -version # Java,推荐 JDK 17 mvn -v # Maven,推荐 3.8+ ssh -V # OpenSSH ``` 预期结果: | 工具 | 推荐版本 | 用途 | | ------- | ------------------- | ------------------ | | Git | 任意现代版本 | 拉取代码、提交修改 | | Node.js | **18 LTS / 20 LTS** | 构建两个前端 | | npm | 随 Node 一起装 | 装前端依赖 | | Java | **JDK 17** | 构建后端 | | Maven | 3.8+ | 后端依赖管理 | | OpenSSH | 系统自带即可 | 上传 Jar 到服务器 | ```{warning} ⚠️ 如果某个命令提示 `command not found`,先安装对应工具: - **Mac**:`brew install git node openjdk@17 maven` - **Windows**:推荐用 [scoop](https://scoop.sh) 或官网下载安装包。 ``` ````{warning} ⚠️ Java 17 的验证 ```bash java -version # 应该输出类似: # openjdk version "17.0.10" ``` 如果系统里同时存在 Java 8 和 Java 17,**确保 `JAVA_HOME` 指向 17**,否则 Maven 构建会报 class 版本错误。 ```` ```{important} ⚠️ 下一章脚本会用到哪些信息 下一章「本地环境与项目配置」会运行 `env-scripts/rename-saas-service.sh`。它不会替你申请云资源,只会把你已经记录好的值写入配置文件。换句话说,脚本不是“生成资源”,而是把前面已经准备好的资源信息一次性写到正确的位置。 ``` 如果你是按 `## 03-09` 一步步做下来,现在应该已经把下一章需要的资源信息配置并记录好了。请回到自己的 `web-pay-deploy-info.md` 或密码管理文档,重点检查下面 12 项: | 类别 | 要检查的信息 | 前面从哪里拿到 | | ------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ | | 3 个公网访问地址 | 支付网关后端 API、运营平台后端 API、统一收银台前端页面地址 | `## 04` 规划的域名;备案通过后会在 `## 13-14` 配 DNS 和 HTTPS | | 5 个数据库信息 | RDS 内网地址、RDS 公网地址、数据库名、用户名、密码 | `## 08` PostgreSQL 云数据库配置 | | 1 个 ActiveMQ 密码 | ActiveMQ 管理员 `admin` 的新密码 | `## 07.5` ActiveMQ 宝塔配置 | | 3 个 SSH 信息 | 服务器公网 IP、SSH 账户、SSH 密码 | `## 05` 云服务器和 SSH 登录检查 | ```{note} 📌 **特别提醒:** 如果备案还没通过,这 3 个公网访问地址可以先填写你已经规划好的 `https://pay-api.example.com`、`https://paymanager-api.example.com`、`https://pay.example.com` 这一类域名字符串;真正让域名解析和 HTTPS 生效,会在备案通过后的 `## 13-14` 完成。脚本先需要知道“以后线上要用哪个地址”。 ``` 执行下一章脚本前,请至少确认: - [ ] 3 个公网访问地址已经规划好,拼写和记录表一致。 - [ ] RDS 内网地址和公网地址没有混填。 - [ ] 数据库名、用户名、密码可以正常登录 RDS。 - [ ] ActiveMQ 默认密码已经改掉,新密码已记录。 - [ ] 服务器公网 IP、SSH 账户、SSH 密码能从本地电脑登录。 - [ ] 这些敏感信息只保存在私有仓库、本地文档或密码管理器里,没有出现在公开仓库、公开截图或聊天记录中。 ## 11 备案通过后第一步:完成合规收尾 ```{warning} 备案号到手后,先做合规收尾。别急着配 DNS 和 SSL,这两项虽然不复杂,但漏掉后面会影响真实上线。 ``` ### 11.1 备案号到手后还要做的事 拿到备案号(`沪ICP备12345678号`)**只是一半**,还有两件事必须做完才算合规: ![备案通过后的合规收尾](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-52-111-icp-compliance.png) ![ICP备案配置2](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/ICP-02.png) ```{warning} 🚧 **第一件:公安备案(很多人会遗漏)** 工信部 ICP 备案通过后,**还要在所在省的公安局做"网站联网备案"**: - 入口:全国互联网安全管理服务平台 - 时限:工信部备案通过后**30 天内**完成。 - 拿到的备案号形如 `公网安备 12345678901234号`。 ``` ```{important} 📌 **第二件:把两个备案号展示在网站底部页脚**(这是法律要求) ``` 本项目 `zhcpay-ui-cashier` 收银台前端的 footer 区域,加一行展示: ```text © 2026 你的品牌名 沪ICP备12345678号-1 | 公网安备 12345678901234号 ``` ```{note} 具体在哪个 Vue 组件里改,会在后续「线上部署」章节展开。**你现在只需要把两个备案号记在密码管理器里**,后面要填进 footer 模板。 ``` ## 12 下一步:进入本地环境与支付闭环 到这里,本章的准备工作已经讲完:源码、域名、服务器、备案、RDS、微信支付、支付宝资料和合规收尾都已经有了明确位置。后面的内容不再继续塞在准备章节里,否则这一章会变成“准备 + 本地调试 + 线上部署 + 自动化”的大杂烩。 ![下一步进入本地环境与支付闭环](https://image-osb.obs.cn-east-3.myhuaweicloud.com/OPC%E5%9B%BE%E5%BA%93/prepare-accounts-53-120-next-roadmap.png) 接下来按新的主线走: | 下一步 | 去哪里做 | 做什么 | | ---------------- | -------- | ----------------------------------------------------------------------- | | 本机环境和配置 | 第 4 章 | 检查工具、本机 Redis / ActiveMQ、cloudflared、配置脚本和本地连接 | | 本地跑通 web-pay | 第 5 章 | 启动收银台、运营平台、支付网关、运营后端 | | 本地支付配置 | 第 6 章 | 配好商户、应用、AppId / AppSecret,资料齐全时补支付通道参数 | | 本地跑通 SaaS | 第 7 章 | 启动 `saas-starter` 前端、后端和业务数据库 | | web-pay 上线 | 第 8 章 | 完成 web-pay 域名、OBS/CDN、DNS、SSL、宝塔后端和 CI/CD | | SaaS 支付验收 | 第 9 章 | 本地 `saas-starter` 调用线上 web-pay,跑通下单、收银台付款和业务状态更新 | | 排查与附录 | 第 10 章 | 保留排查、脚本边界和免责声明 | ```{note} 原先放在本章后面的 OBS/CDN、DNS、SSL、支付回调核对和 CodeArts 内容,已经拆到第 8 章「web-pay 线上部署与 CI/CD」和第 9 章「saas-starter 本地支付验收」。这样你完成备案和资料准备后,会先回到代码库和本机环境,确认基础服务能启动,再用本地 `saas-starter` 调用线上 web-pay 完成基础支付闭环;后续如果要上线 `saas-starter` 或自己的 SaaS,回看第 8 章同一套部署步骤即可。 ``` 进入下一章前,请确认这些准备项已经记录在自己的 `web-pay-deploy-info.md` 或密码管理器里: - [ ] 源码已经下载到本机,并能进入 `web-pay` 项目根目录。 - [ ] 域名、服务器、RDS、ActiveMQ、SSH 信息已经记录。 - [ ] 微信 / 支付宝商户资料已经申请或进入审核。 - [ ] RDS 的 `pay` 库已准备好;新用户保持空库即可,首次本地启动会自动初始化。 - [ ] 本机具备继续执行后续脚本的权限和网络访问条件。 下一章开始,教程会从“准备资料”切换到“操作代码库”。