Files
airz-uniapp/docs/协议与照片测试部署清单-20261012.md
T
hujun c95482a0f3 feat: 实现协议全文与同意记录功能
新增协议全文后台管理、版本化发布及本人同意记录功能,支持可撤销授权;完善资料与授权相关边界提示,调整评估提交时的资料与授权校验逻辑,同步更新相关页面文案与路由。
2026-10-14 14:53:13 +08:00

91 lines
12 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.
# 协议与照片独立测试部署清单(2026-10-12)
更新:用户随后明确只有现有服务器并授权直接部署,后端已于2026-10-12发布agreement-documents-r1;当前前端默认production并填写既有正式API,test地址仍空。无需新增独立测试服务器。下表及后文保留本机测试阶段快照,当前发布/启用边界以[本轮发布说明](后端协议与照片发布-20261012.md)为准。
本清单落实“第1步”:先分开测试与生产配置,在独立测试环境接通协议与照片,仅用合成资料,短信及真实模型关闭。远程测试主机/域名尚未指定,本轮只做本机准备与联调;不代表远程部署或微信真机验收。
## 环境配置
| 环境 | 前端配置 | 后端配置与数据 |
| --- | --- | --- |
| 当前源码默认 | `APP_ENVIRONMENT='test'`,`TEST_API_URL=''`,请求明确失败 | 仓库`.env`原样保留;不能直接启动它进行测试 |
| 本机联调副本 | `development`,`http://127.0.0.1:18580/api/v1`;端口以本轮回执为准 | 新建独立ROOT、空MySQL数据目录/库、Redis实例、Web外目录和随机密钥 |
| 微信远程测试 | `test`,填写独立测试HTTPS域名的`/api/v1` | 单独站点/库/Redis命名空间/密钥,合成账号与协议,不使用生产库或产品数据 |
| 正式发行 | `production`,正式地址需要发行时明确填写 | 正式用途、正文、期限、目录/ACL、备份恢复及发行验收另行完成 |
`services/config.uts`原先的test地址指向已发布服务,已清空。未知环境字符串同样返回空地址,不自动切换到本机或其他环境。`API_DEMO_ENABLED=false`保持。
后端样例:[.env.test.sample](D:/AAdesk/202609/airz/.env.test.sample)。ThinkPHP默认仅读取ROOT下`.env`,样例文件名不会自动切换环境;它只能用于**独立测试站点**的配置,不能覆盖当前仓库或生产`.env`。本轮隔离入口使用独立ENV_PREFIX注入并核对生效值,ROOT内不放`.env`。
测试样例库名为`airz_product_test_2026101201`,MySQL3345、Redis6425/DB15;这些只是独立实例样例,使用前确认归属和端口空闲,本轮临时实例实际采用空闲端口。`airz_test`不是已有账户,需由测试库管理员配置仅限该库的账号和密码。不得在共享Redis上执行FLUSHDB;每轮另设命名空间。生成32字节随机测试密钥,不复用生产密钥;私密配置不提交或共享。
`deepseek.enabled=false`、`api_key=''`、`base_url='http://127.0.0.1:1'`;不启动分析worker。`application/extra/sms_verification.php`硬编码关闭,当前没有真实供应商配置入口;添加环境开关不会启用短信。本机合成账号走密码登录,不绕过正式短信流程或使用真实号码。
## 最小配套源码
后端以当前已发布profile-grade-r4及既有鉴权/Secret/内容CSRF代码为基线。以下是当前未部署功能的配套集合,不能只上传Documents控制器;同步时先对目标源码做差异核对,尤其`AssessmentRecords.php`存在已审阅线上变体,不得整文件覆盖丢失它。
| 功能 | 后端相对路径 |
| --- | --- |
| 路由与账户 | `application/route.php`、`application/api/controller/v1/Session.php`、`application/common/library/Auth.php` |
| 默认关闭的短信配套 | `application/common/library/AccountSms.php`、`SmsVerification.php`、`smsverification/Provider.php`、`smsverification/UnavailableProvider.php`、`application/extra/sms_verification.php` |
| 协议与同意API | `application/api/controller/v1/Agreements.php`、`application/common/library/AgreementRegistry.php`、`AgreementPublication.php`、`ConsentLedger.php` |
| 协议后台 | `application/admin/controller/Agreements.php`、`application/admin/model/Agreements.php`、`application/admin/view/agreements/{index,form,add,edit}.html`、`public/assets/js/backend/agreements.js` |
| 内容后台配套 | `application/admin/library/BusinessPermissions.php`、`application/admin/library/traits/ContentEditor.php`、`ContentModel.php` |
| 私有照片与评估边界 | `application/api/controller/v1/Documents.php`、`application/common/library/PrivateDocuments.php`、`application/extra/private_documents.php`、`application/common/library/AssessmentRecords.php`中的边界文案 |
前端以当前完整29页项目重新编译,不向小程序局部拷贝UTS。新增`pages/agreement/agreement.uvue`、`packages/account/consents/consents.uvue`;配套`pages.json`、账户login/profile、融资assessment/confirm/services/records、`services/api.uts`、`assessment.uts`、`agreements.uts`、`agreements-route.uts`、`documents.uts`、`config.uts`。具体路径及当前文件SHA-256见本轮源码清单,若继续修改需重新生成;它不是上传包摘要。
复用现有vendor/extend依赖,不安装或升级系统/生产依赖。PHP至少7.4,现有pdo_mysql/redis/GD/openssl/json/fileinfo及mbstring等项目扩展需齐全;GD必须可解码JPG/PNG。Nginx/宝塔保留原API路由与Bearer头转发,Web根为public;私有目录无公开映射。应用原图上限5MiB,设置`upload_max_filesize>=5M`、`post_max_size>5M`和Web请求体上限覆盖multipart开销;不能以提高PHP限额替代应用像素/边长检查。
## 数据库及后台权限
只在**新建合成空库**安装完整`database/schema.sql`。对已有测试库或今后授权目标库,先只读确认现状、备份、逐份执行缺少的增量;禁止用完整schema覆盖现有库,禁止重复建表:
1. `database/agreement-revision-schema.sql`:`fa_agreement_revision`。
2. `database/user-consent-schema.sql`:`fa_user_consent`。
3. `database/private-document-schema.sql`:`fa_private_document`。
使用InnoDB及现有REPEATABLE READ约定;三份SQL不修改旧表、不导入正文、账号、产品或正式同意记录。存量`fa_acticle`协议HTML不会自动成为正式快照,须通过协议后台逐份审核发布。测试正文明确标注“仅供合成联调”,不得迁到正式站点。
协议后台五节点:`agreements`、`agreements/index`、`agreements/add`、`agreements/edit`、`agreements/multi`;独立`业务模板-运营-v2`新增一个模板,旧运营v1、客服v2、技术v5保持。沿用`database/migrate_admin_permissions.php`对**明确独立测试目标**只读预检,实际增量以输出为准;应用、备份和账号绑定按明确目标授权进行。照片API沿用本人Bearer鉴权,不新增管理端照片权限。当前账号/权限未迁移或绑定。
## 执行顺序与验收
1. 明确独立站点、HTTPS域名、空库、Redis实例、Web外目录、运行账号和备份位置;先核对与生产不同。后端和前端都记录源码摘要,已有目标则备份配套文件/结构/数据/配置,私密备份不整包共享。
2. 先部署后端完整配套源码,照片保持关闭;安装缺少的三表,按需要预检/安装协议后台节点。运行账号仅对私有目录读写,Web无权限公开读取;目录预先存在且不能与public重叠、成为其祖先或链接。
3. 在独立测试库通过审核发布合成`terms`、`privacy`、`document-use`协议;如需读取数据授权再单独发布合成`data-authorization`,不能把它当第三方查询授权。
4. 核对实际生效数据库/Redis/密钥、短信false、模型false/无供应商密钥;仅测试配置显式开启照片并填写目录。运行本人同意→multipart上传→Bearer下载→恢复→删除。另验未登录/跨账号拒绝、撤销后拒绝新上传、本人仍可读删、关闭上传时明确提示。
5. 前端测试副本显式使用该API,重新编译29页;照片须在原卡片显示,通过卡片菜单管理,离页后恢复。确认评估仅提交自填信息,附件/consentIds仍为空;本轮不执行真实评估/模型任务。
6. 保存请求计数、配置审计、源码清单、截图及清理回执。本机合成环境测试后停止所属API/H5/MySQL/Redis,清理所属账号/同意/协议/照片/Token和精确合成库;不触碰其他服务或共享数据。
关闭照片功能会使上传、下载、删除不可用,资料引用返回空,但不删除已保存照片;已有测试环境退回前先让本人完成删除及核对私有目录。源码回退先恢复前端兼容版、关闭新上传/入口、保留新增表/协议快照/同意及密钥,不反向DROP有数据的表。需要恢复整个测试站点时使用同批备份,避免密文、表与密钥不匹配。
## 微信真机的下一步
本机127.0.0.1是手机自身,不能作为真机API;微信真机需要独立可信HTTPS测试域名。小程序后台把相同测试域名加入request、uploadFile、downloadFile合法域名,使用体验版测试配置重新编译上传。开发者工具“忽略域名校验”只能辅助模拟器,不能作为真机通过证据。
在微信/Android真机验证选择照片、原卡片缩略图、Bearer下载、原卡片菜单删除、重新进入恢复、换账号及临时文件清理;记录设备/系统/微信版本、体验版版本、源码/上传包摘要和北京时间。正式照片用途、正文、保留期限、撤销后处理、目录/ACL、密钥恢复和孤立文件运营处理仍需确认;本机合成联调不解除FILE-001或正式验收阻塞。
## 本轮验证与回执
本机准备与联调已完成,远程测试站点和微信真机尚未执行。
| 检查 | 本轮结果 |
| --- | --- |
| 默认/production/未知环境/显式development配置 | 未配置目标均返回空地址,只有显式development使用本机18580 |
| 配置与真实本机API预检 | 13项通过;非本机DB、模型开启、无效密钥、ROOT中隐式.env均在加载框架前拒绝 |
| 前端既有专项 | 26组照片、30项协议检查通过 |
| 实际前后端H5联调 | 32项通过;20次页面本机API请求,0页面/控制台错误、0未知外呼 |
| 界面及流程 | 390×844、1280×900;同意→真实上传→原卡片缩略图/菜单预览→离页恢复→撤销后禁止新上传但本人仍可恢复/删除→删除后引用为空;跨账户读取404 |
| 生效配置审计 | 63份bootstrap审计,真实模型加载、短信开启、生产.env加载均false;未提交评估或启动worker |
| 归属清理 | 29表零行、Redis零键、私有目录零文件;精确合成库已删除,所属API/H5及子进程/MySQL/Redis停止,端口释放 |
本轮API为`http://127.0.0.1:18580/api/v1`,H5为`http://127.0.0.1:5182`,现已停止。四份合成协议和两个合成账号仅在该全新空库生成,使用真实密码登录API;没有真实短信、正式正文或产品数据导入。PHP所需pdo_mysql/redis/GD/openssl/json/fileinfo/mbstring实测存在,未安装依赖。
证据:[配置检查](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/configuration-verification.json)、[页面/API联调](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/ui-verification.json)、[配置审计](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/audit-summary.json)、[清理回执](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/cleanup.json)、[源码清单](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/source-manifest.json)。源码清单绑定14个前端文件、30个后端运行/DDL/配置文件;正式发布前需与目标基线核对,后续改动需重新绑定,不是发行包摘要。合成私密配置不整包共享,已清理环境不能直接重新start。
Browser plugin not available,使用现有Playwright/Chromium及非持久浏览器,网络只允许本机H5/API。截图:[原卡片上传](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/uploaded-390.png)、[重新进入恢复](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/recovered-390.png)、[宽屏恢复](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/recovered-1280.png)、[删除完成](D:/AAdesk/202609/airz-backups/test-configuration/1791793388934/deleted-1280.png)。本轮前端修改仅配置,不重复微信/Android全量编译;前轮29页编译证据保持,正式测试域名配置后再编译体验版。
临时工具首次启动的H5归属校验缺少工作目录识别,停止所属服务后另建新环境;最终按PID创建时间、完整命令及工作目录核验。H5首次缺少`HX_APP_ROOT`导致现有内置组件定位失败,仅重启本轮预览并补HBuilderX环境后通过;共享layout.uts既有类型警告保留。配置拒绝测试修正PHP错误输出通道/CRLF匹配;页面恢复检查等待异步缩略图后最终通过。失败轮不计通过数,不改产品逻辑。