diff --git a/.ai-memory/MEMORY.md b/.ai-memory/MEMORY.md index 721403d..f9a26e5 100644 --- a/.ai-memory/MEMORY.md +++ b/.ai-memory/MEMORY.md @@ -1,4 +1,5 @@ -- [项目当前进度与待办](project_progress.md) — 三阶段状态、ICP 备案阻塞、出包前必须去掉 IP 覆盖等;**新对话先读这个** +- [项目当前进度与待办](project_progress.md) — 三阶段状态、域名 HTTPS 已上线、正式号受限、出包前必须去掉 IP 覆盖等;**新对话先读这个** +- [公众号主体与接口权限现状](project_wechat_account.md) — 正式号是个人订阅号/未认证/AppSecret 冻结;带参数二维码只有认证服务号可用,待选路线 A/B - [生产服务器部署环境](project_server_deploy.md) — ethereal-realm.top 的路径/服务/MySQL/nginx 实况,自建 Git 代码服务器拓扑,及 ICP 拦截、pypi 不可达、MySQL 非 Docker、nginx 双 server 块等坑 - [CAD 插件微信授权集成](project_cad_wxauth_integration.md) — d:/Ethereal-Realm 的 CadOcr+cadAgent 接入进度、两端分工、先编 CadOcr 的顺序约束、本机只能编 R230+ - [用户的命令行习惯与协作方式](user_shell_workflow.md) — 用 PuTTY,长命令会被折行截断,sudo 操作要写成脚本;已打通微信远程控制(回复走 WechatReply) diff --git a/.ai-memory/README.md b/.ai-memory/README.md index 1ad3dd2..6784a51 100644 --- a/.ai-memory/README.md +++ b/.ai-memory/README.md @@ -36,6 +36,7 @@ CodeBuddy 每次修改记忆时都会顺手同步,不需要你提醒。 |---|---| | `MEMORY.md` | 索引,助手每次对话自动加载 | | `project_progress.md` | 三阶段进度、阻塞项、待办(新对话先读这个) | +| `project_wechat_account.md` | 公众号主体类型/接口权限现状(订阅号受限、待选路线) | | `project_server_deploy.md` | 生产服务器实况与反直觉的坑 | | `project_cad_wxauth_integration.md` | CAD 插件集成进度与构建约束 | | `user_shell_workflow.md` | 协作习惯(PuTTY 长命令折行、sudo 走脚本等) | diff --git a/.ai-memory/project_progress.md b/.ai-memory/project_progress.md index ffa91c4..f87c00b 100644 --- a/.ai-memory/project_progress.md +++ b/.ai-memory/project_progress.md @@ -4,7 +4,7 @@ description: wx-scan-authorize 三阶段状态快照、当前阻塞项与下一 type: project --- -`d:/wx-scan-authorize`(微信公众号扫码授权服务)截至 **2026-09-27 晚** 的状态。 +`d:/wx-scan-authorize`(微信公众号扫码授权服务)截至 **2026-10-10** 的状态。 **三阶段进度** @@ -15,31 +15,44 @@ type: project | 3 | 充值(微信公众号支付) | **未开始** | | 附加 | 只读管理后台 `/admin`(计划外新增) | 2026-09-27 已上线 | -代码状态:本地与服务器均在 `f167550`,工作区干净,远端是自建 Git 服务器 -(见 [生产服务器部署环境](project_server_deploy.md))。 +代码状态:本地与服务器均在 `f167550`,工作区干净。远端已从 GitHub 迁到自建代码服务器, +现又在应用服务器上跑起 **Gitea**(`git.ethereal-realm.top`,nginx 反代 127.0.0.1:3000), +详见 [生产服务器部署环境](project_server_deploy.md)。 客户端在 `d:/Ethereal-Realm`:CadOcr + cadAgent 已完成编码与客户端侧端到端验证, -`test_wxauth.exe` 已从控制台程序改造成 Win32 对话框,**相关改动已提交 SVN r40**, -模型文件按用户决定未入库并已加 `svn:ignore`(r41)。详见 +`test_wxauth.exe` 已从控制台程序改造成 Win32 对话框,相关改动已提交 SVN r40/r41。详见 [CAD 插件微信授权集成](project_cad_wxauth_integration.md)。 +**域名与 HTTPS 已上线(2026-10-10)** + +ICP 备案已通过,域名直连可用,不再依赖 Cloudflare 隧道: +- nginx `wechat-api.conf` 已改为 **80→443 跳转 + 443 业务**(Certbot 管理), + 旧的 `app.conf`(IP 直连全量代理)已停用为 `app.conf.bak`。 +- 证书 Let's Encrypt,有效至 2027-01-07,`certbot-renew.timer` 自动续期。 +- 已验证:`https://ethereal-realm.top/wechat` 可达(422=缺参数,正常)、`/admin` 401、 + `/docs` 200。 +- **待收尾**:`cloudflared-quick` 隧道仍在运行,应停用; + `https://ethereal-realm.top/docs` 仍暴露(用户此前选「暂不处理」)。 +- 注意:IP 直连(`http://39.107.55.179`)已失效(`app.conf` 停用),MFC 插件里写死的 + IP 联调地址会受影响。 + **阻塞项与待办** -1. **ICP 备案进行中**(用户 2026-09-27 已提交,等待通过)——当前最大的外部变量: - - 通过前:公众号后台「服务器配置」URL 指向 Cloudflare 快速隧道 - (URL 每次重启会变,捞取命令见 server_deploy 记忆) - - 通过后:切回 `http://ethereal-realm.top/wechat`,并撤掉隧道 -2. **阶段 3 充值暂缓**。用户原话:「阶段3现放着吧,因为微信公众号想要收费的话, - 需要营业执照,现在域名的备案也没有做好。」→ 等营业执照 + 备案。 +1. **正式公众号受限,无法切换**(2026-10-10,当前最大阻塞):正式号是**个人订阅号、 + 未认证、AppSecret 冻结**,而「带参数二维码」只有认证服务号能用 → 当前流程跑不通。 + 详见 [公众号主体与接口权限现状](project_wechat_account.md)。**待用户选路线 A(办个体户 + 注册服务号 + 认证)或路线 B(改流程用验证码绑定)**。 +2. **阶段 3 充值暂缓**。微信支付要求认证服务号 + 营业执照,与上面同一主体问题。 3. **正式出包前必须去掉编译覆盖** `-DCADOCR_WX_BASE_URL=http://39.107.55.179` - ——当前本地 DLL 是 IP 联调版,把服务端地址写死成了 IP。 + ——当前本地 DLL 是 IP 联调版,把服务端地址写死成了 IP;且该 IP 入口现已失效, + 需改为域名 `https://ethereal-realm.top`。 4. **AutoCAD 里人工验证 `cadAgent.arx`** ——我这边没有 AutoCAD,只能用户做。 用户 2026-09-27 明确表示暂不做。 -5. **IP 直连暴露 `/docs` 与 `/openapi.json`** ——用户选择暂不处理(详见 - server_deploy 记忆的 nginx 双 server 块章节)。 +5. **IP 直连暴露 `/docs` 与 `/openapi.json`** ——现域名也暴露(`location /` 全量代理)。 + 用户此前选暂不处理,可随手关掉。 **Why:** 会话内的任务列表不跨对话持久化,关闭对话后这些状态不会自动带过去; -只有写进记忆才能在新对话里续上。用户 2026-09-27 明确问过「关掉对话后怎么重新开始」。 +只有写进记忆才能在新对话里续上。 -**How to apply:** 新对话开始时先读本文件确认进度。**动手前先问用户 ICP 备案是否 -已通过**——它决定公众号 URL 该配隧道还是配域名,是当前唯一会改变操作方式的变量。 +**How to apply:** 新对话开始时先读本文件确认进度。动手前先确认公众号主体问题的路线选择, +它决定下一步是「办主体」还是「改代码」。 diff --git a/.ai-memory/project_wechat_account.md b/.ai-memory/project_wechat_account.md new file mode 100644 index 0000000..eecd3b8 --- /dev/null +++ b/.ai-memory/project_wechat_account.md @@ -0,0 +1,35 @@ +--- +name: 公众号主体与接口权限现状 +description: 正式公众号是个人订阅号、未认证、AppSecret 冻结;核心结论「带参数二维码只有已认证服务号可用」,故当前扫码登录流程无法在订阅号上跑通,待用户选路线 A/B +type: project +--- + +2026-10-10 用户正式注册了微信公众号,AppID `wxb4bd18ef8255c03f` +(AppID 是公开标识、非密钥,可记录;**AppSecret 属敏感值,未认证前处于冻结状态,不入库**)。 + +**账号状态** +- 类型:**订阅号**(个人主体,用户没有个体户/营业执照) +- **未完成微信认证**;用户正在申请「改名」,改名通过后才做「个人认证」 +- **AppSecret 冻结**:官方提示「该账号尚未完成主体认证,前往微信公众平台完成认证后重试」 + → 拿不到 `access_token` + +**决定性结论(已查证微信官方开放社区,2026-10-10)** +- **「生成带参数的二维码」接口只有「已完成微信认证的服务号」可用**;认证订阅号、 + 个人订阅号均不可用。 +- 因此 **换到该订阅号跑不通当前扫码登录流程**;改名 + 个人认证也解决不了(仍是订阅号)。 +- 未认证个人订阅号**可以**用「服务器配置 + 接收消息 + 被动回复」(**不需要 AppSecret**), + 但开启服务器配置后就不能同时用后台自定义菜单(对本项目无影响)。 + +**可选路线(待用户拍板)** +- **A(推荐,符合原设计)**:办个体户 → 注册「服务号」→ 微信认证 300 元/年。 + 保留「扫码即授权、用户免手输」体验,并解锁阶段 3 微信支付(支付同样要求认证服务号)。 +- **B(不办个体户,但要改代码)**:改造登录流程绕开带参数二维码 —— + MFC 显示随机验证码 → 用户关注公众号后把验证码发给公众号 → + 服务端用 `openid` + 验证码绑定设备并签发 session。未认证订阅号即可跑, + 但服务端与 MFC 端都要改,UX 多一步。 + +**Why:** 主体类型与接口权限是「从代码里看不出来」的外部约束,直接决定架构能否上线; +照着现有代码改一堆,最后会卡在这个接口权限上。 + +**How to apply:** 讨论「切正式号 / 上线」时先看本文件。**不要再建议「用订阅号试试」**, +除非确定走路线 B。微信测试号(拥有全部接口)只能作过渡,不能上生产。