总体结论
认证服务号、AppID、AppSecret、备案域名、代码模板都已具备;但HTTPS(443 未开放、无证书)、目标子域名解析、公众号网页授权域名与校验文件、服务器身份与运行时这几项尚未落实,且必须管理员在微信后台操作,无法由代码代替。
认证服务号 · AppID/原始 ID · AppSecret · 已备案域名 · 前后端代码与 Nginx/Docker/云函数启动模板 · 现有 Ubuntu + nginx 服务器(22/80 开放)。
SSL 证书与 443 安全组 · 目标访问域名及解析 · Node ≥18 运行时 · 网页授权域名 + MP_verify_*.txt · IP 白名单(用服务器出口 IP)· 服务器 .env 与 WX_MODE=live · 合规文案与真实主体信息 · 会话/用户持久化。
主要是服务器登录信息、云厂商(备案接入是否一致)、选用哪个子域名、DNS 与公众号后台管理权限、是否需要 PC 扫码登录等,详见第 06 节。
材料逐项核对
| 类别 | 材料 / 条件 | 状态 | 说明与下一步 |
|---|---|---|---|
| 微信身份 | 已认证服务号 | 已具备 | 你已确认;仍建议在「接口权限」里核对「网页授权获取用户基本信息」为已获得 |
| AppID / 原始 ID | 已具备 | wx6ff6319c3ed127f6 / gh_2fba6debb5b2,已写入代码;原始 ID 不参与 OAuth | |
| AppSecret | 已提供·需处置 | 已在对话中明文出现。未写入本项目任何文件;建议只在服务器环境变量注入,并择期重置(见第 08 节) | |
| 开放平台 / UnionID / PC 网站应用 | 缺失 | PC / 非微信浏览器登录必需;需另申请「网站应用」,与本服务号绑定同一开放平台账号 | |
| 域名 | ICP 备案 | 已具备 | 现有站点页脚显示 沪ICP备2024070068号;域名 WHOIS 注册商为腾讯云、DNS 在 DNSPod,2027-01-27 到期 |
| 备案接入商一致性 | 待确认 | 备案与接入商绑定。若服务器不在备案对应的云厂商,需先办「接入备案」,否则国内服务器会被判定未备案拦截 | |
| 服务器 | SSH 密钥 | 待确认 | 本机 SSH 配置中只有一条 region-8.autodl.pro(root),看不出是站点服务器;需提供目标 IP/域名、用户、密钥路径 |
| 系统与端口 | 实测 | www 指向 49.232.224.131,Ubuntu + nginx/1.24.0,22 与 80 开放、443 未开放、3000 未占用 | |
| Node ≥ 18 运行时 | 待确认 | 服务端依赖全局 fetch 与 AbortSignal.timeout;版本不足需先升级 | |
| 网络与安全 | SSL 证书 + HTTPS | 缺失 | 实测 https://www.tinghuan.com.cn 443 连接失败;微信授权回调与 MP_verify 校验都要求 HTTPS |
| 目标访问域名 / DNS 记录 | 缺失 | 裸域 tinghuan.com.cn 无 A 记录;www 已有正式站点在用,建议另开子域(如 m. / demo.) | |
| 公众号后台 | 网页授权域名 + 校验文件 | 缺失 | 管理员填域名 → 下载 MP_verify_XXXX.txt → 放 public/ 根目录 → 能访问后再提交保存 |
| IP 白名单 | 待配 | 填服务器出口公网 IP(在服务器上 curl -4 ifconfig.me),可能与入口 IP 不同;本项目只调 OAuth 接口,一般不受其限制,但配上更稳妥 | |
| JS 接口安全域名(可选) | 按需 | 只有用微信分享 / 扫一扫等 JS-SDK 才需要,且与网页授权域名要分别添加 | |
| 代码与内容 | 官网 + OAuth 服务端 + 部署模板 | 已完成 | 含 Nginx 配置、Dockerfile、云函数 scf_bootstrap |
| 会话 / 用户持久化 | 需改造 | 当前用内存 Map,进程重启即失效、多实例不共享;选云函数则必须外部化 | |
| 真实主体信息与合规文案 | 缺失 | 现有站点主体为「上海畅播智联数字科技有限公司」,Demo 内「畅播科技」及全部文案/LOGO/联系方式均为占位,需替换;补齐《用户协议》《隐私政策》、备案号 |
本机实测发现(本次新增信息)
以下为只读探测结果,未登录服务器、未改动任何线上配置。
| 探测项 | 结果 | 影响 |
|---|---|---|
tinghuan.com.cn A 记录 | 无(公共 DNS 均无返回) | 裸域当前无法访问;若用裸域需新增解析 |
www.tinghuan.com.cn | 49.232.224.131 | 已有正式站点在 80 端口运行(nginx 1.24.0 / Ubuntu),不要直接覆盖 |
| 现有站点内容 | 「上海畅播智联数字科技有限公司 - AI数字人矩阵直播赋能实体商家」 | 与 Demo 占位品牌不一致;页脚有 沪ICP备2024070068号 |
| 端口 22 / 80 / 443 / 3000 | 22、80 开放;443、3000 关闭 | HTTPS 是当前最大硬缺口;需签发证书并在安全组放行 443 |
| 域名 WHOIS | 注册人「上海庭桓信息科技有限公司」,注册商腾讯云,DNS:DNSPod,有效期至 2027-01-27 | 域名实名主体与网站运营主体不同,需核对 ICP 备案主体、微信认证主体是否一致或存在授权关系 |
| 本机 SSH 配置 | 仅 Host region-8.autodl.pro / User root | 无法据此确认站点服务器登录方式;需补充目标主机信息 |
| 项目版本控制 | 当前目录不是 Git 仓库 | .gitignore 目前不生效;.env 只在服务器创建,避免随目录上传或误提交 |
例如 m.tinghuan.com.cn(或 demo.tinghuan.com.cn)单独解析 / 单独 server block。这样既能与主站共存,网页授权域名也只需按该子域名填写,回滚互不影响。注意微信后台填的域名必须与 redirect_uri 完全一致(含 www 与否)。
方案 C(云服务器) vs 云函数:怎么选更省事
结论先给:在你已有 Ubuntu + nginx + SSH 服务器的前提下,方案 C 标准云服务器更省事;云函数适合"不想再管服务器 / 流量弹性"的场景,且会多出会话外部化与平台配置。
| 维度 | 方案 C · 现有云服务器 | 云函数(腾讯云 SCF Web 函数 / 微信云托管) |
|---|---|---|
| 代码改动 | 几乎零改动:服务已监听 0.0.0.0:$PORT,上传后 pm2 start 即可 | Web 函数可直接跑 HTTP 服务:加 scf_bootstrap(已备好)设 PORT=9000;但必须把内存会话/用户改成数据库或 Redis |
| 静态资源 | Nginx 直出 public/,可再上 CDN | 同一函数即可托管静态(我们的服务已支持),也可拆到 COS + CDN,多一层配置 |
| HTTPS / 证书 | 需自己申请证书、配置 Nginx、放行 443(当前 443 关闭) | 平台提供 HTTPS,绑定自定义域名时上传/选择证书即可,省去 Nginx 与证书续期运维 |
| 自定义域名 | DNS A 记录指向现有 IP | DNS CNAME 指向 *.tencentscf.com + 函数路径映射;大陆地域必须已备案域名(你已满足) |
| 出口 IP / 白名单 | 出口 IP 基本固定,容易加白名单 | 出口 IP 动态。本项目只调 sns/oauth2/access_token 与 sns/userinfo,通常不受 IP 白名单限制;若后续要调 /cgi-bin/token(菜单、模板消息等),需 VPC + NAT 网关 + 固定 EIP 并加白 |
| 会话 | 单实例内存可用(重启会掉线,建议仍落库) | 必须外部化:冷启动与多实例不共享内存 |
| 运维 | 需管 Node、PM2、证书续期、日志、安全补丁 | 免服务器运维,按量计费,弹性扩缩;但需熟悉函数平台、日志与冷启动 |
| 共同必做 | 证书(或平台证书绑定)· DNS 解析 · MP_verify_*.txt 可访问 · 公众号网页授权域名 · .env 注入 · 微信内真机验收 —— 两条路都绕不开 | |
① 你不想维护这台服务器或后续没有固定运维;② 访问量波动大、需要弹性;③ 后续要接模板消息/客服消息等更多微信能力且愿意配固定出口 IP。若只是"公司官网 + 会员登录"这种稳定低流量站点,云服务器路径的步骤最少、排障最直观。
若选云函数,已在 deploy/scf_bootstrap 备好最小启动脚本:上传到函数代码包根目录、chmod 755,函数类型选「Web 函数」、运行时 Node.js 18+,服务端代码几乎无需改动。但仍需完成会话外部化改造,否则登录后刷新即丢失登录态。
需要额外配置和处理的清单
A · 服务器与网络
- 确认目标服务器 IP / SSH 用户 / 密钥路径,验证可登录
- 确认操作系统与 Node 版本,低于 18 先升级
- 安全组 / 防火墙放行 443(当前关闭)
- 新增独立子域名 server block,避免影响 80 端口现有主站
- 安装 PM2(或 systemd)守护 Node 进程,配置日志与开机自启
- 记录服务器出口公网 IP:
curl -4 ifconfig.me
B · 域名与证书
- 决定目标域名(建议
m.tinghuan.com.cn),在 DNSPod 加 A / CNAME 记录 - 申请域名 SSL 证书(腾讯云免费 DV 或 certbot),部署证书链与私钥
- 配置自动续期;验证
https://域名/MP_verify_XXXX.txt返回 200 - 若服务器云厂商与备案接入商不一致,先办「接入备案」
- CDN 若开启,需刷新校验文件路径并排除重写规则
C · 微信公众平台后台(需管理员扫码)
- 「接口权限」确认网页授权获取用户基本信息已生效
- 「功能设置 → 网页授权域名」填入目标域名(裸域,不带协议/端口/路径)
- 下载
MP_verify_XXXX.txt放到public/根目录,先验证可访问再提交保存 - 「基本配置 → IP 白名单」加入服务器出口 IP,等待数分钟生效
- 如用分享/扫一扫,另配「JS 接口安全域名」
- 微信开放平台绑定本服务号以获取 UnionID
D · 开放平台与合规
- PC 端微信登录:另申请「网站应用」并通过审核(独立 AppID)
- 核对备案主体、域名实名主体、微信认证主体、网站运营主体是否一致 / 有授权
- 替换 Demo 占位内容:公司全称、LOGO、业务文案、联系方式
- 补齐《用户协议》《隐私政策》《备案号》与公安备案信息
- 按最小必要原则说明头像/昵称/OpenID 的收集与使用
E · 代码与运行配置
- 在服务器创建
.env:WX_APPSECRET、PUBLIC_BASE_URL=https://目标域名、SESSION_SECRET、WX_MODE=live PUBLIC_BASE_URL必须与网页授权域名完全一致,否则回调报redirect_uri 参数错误- 会话 / 用户从内存 Map 迁到数据库或 Redis(云函数必做,云服务器强烈建议)
- 加接口限流、日志脱敏、
/healthz探活与错误告警 - 真机在微信内跑一遍:授权 → 同意 → 回跳 → 刷新保态 → 退出 → 再登录
F · 验收兜底
- 非微信浏览器给出降级提示,或已接 PC 扫码登录
- 取消授权、state 重放、code 复用、网络超时都有友好提示
- 常见错误码预案:
48001/10005权限、10003域名不一致、40029/40163code、40164IP 白名单 - 上线前用接口测试号或小范围灰度验证,再切正式号全量
还需要你提供 / 确认的信息
- 目标服务器的公网 IP 或主机名、SSH 用户名、密钥文件路径 ——
49.232.224.131是否就是这次要部署的机器?本机 SSH 配置里只有region-8.autodl.pro。 - 服务器所属云厂商(腾讯云 / 阿里云 / 自建 / 其他)—— 用于判断备案接入是否一致,以及是否需要固定出口 EIP。
- 目标访问域名用哪个?建议
m.tinghuan.com.cn或demo.tinghuan.com.cn,避免覆盖www现有主站。 - 是否有 DNSPod / 域名解析管理权限,能新增 A 或 CNAME 记录?
- SSL 证书是已有还是新申请?证书文件(pem + key)能否提供或由你在服务器上申请?
- 443 端口的安全组 / 防火墙是否能自行放行?服务器上是否已有其他站点占用 443?
- 公众号后台管理员是否能配合操作(网页授权域名、校验文件、IP 白名单保存时需管理员扫码)?
- 是否需要 PC / 非微信浏览器也能微信登录?这决定要不要另申请开放平台「网站应用」。
- 微信认证主体名称是什么?需与备案主体 / 网站主体核对(当前 WHOIS 注册人为「上海庭桓信息科技有限公司」,现有站点主体为「上海畅播智联数字科技有限公司」)。
- 登录用户是否需要长期保留(会员、订单、行为数据)?若需要,请指定数据库(MySQL / PostgreSQL / 云数据库 / Redis),以便替换内存会话。
- AppSecret 是否按建议重置?重置后旧密钥立即失效,需与线上其他系统协调。
建议执行顺序
补齐第 06 节的服务器、域名、证书、权限信息;确定走云服务器还是云函数。
加子域解析 → 签发并部署证书 → 放行 443 → 确认 https://域名/ 可访问且不影响现有 www 主站。
上传项目 → 服务器创建 .env(AppSecret 只在服务器)→ 启动 Node / PM2 或云函数 → /healthz 探活。
放好 MP_verify_XXXX.txt 并验证可访问 → 提交网页授权域名 → 配置 IP 白名单 → 等待生效。
WX_MODE=live,微信内真机实测完整授权链路与异常分支。
会话/用户落库、限流与监控、真实文案与合规信息替换、密钥轮换、灰度放量。
AppSecret 的安全处置
我没有把它写入项目的任何文件(避免落入仓库、镜像、日志或前端),也不会在页面与回复中完整展示。请在服务器上以环境变量注入,部署稳定后在公众号后台「基本配置」重置 AppSecret,并把新值直接写入服务器 .env —— 不要再经聊天工具传递。重置会使旧值立即失效,若其他系统仍在用旧密钥,需先协调。
- 只在服务器
.env或云厂商密钥管理 / 环境变量中存在;.env不随代码打包、不进镜像、不入 Git。 - 前端只包含 AppID 等公开信息;服务端日志只记录
errcode,不打印含密钥的请求 URL。 - 当前目录不是 Git 仓库,
.gitignore尚不生效;若之后初始化仓库,确认.env已被忽略。 - 重置后同步更新所有环境变量并重启服务,避免旧密钥残留造成
40001 / 40125类错误。
材料层面「身份凭证已齐、环境未就绪」。补齐证书/443、独立子域解析、公众号后台三项配置与服务器登录信息后即可上线;有现成服务器时方案 C 比云函数少改造,云函数可作为后续免运维演进方向。