微信公众号统一回调网关 · 8 业务方 · 双实例同代码 · 16 张表 · Next.js 15 + Prisma + PostgreSQL
微信平台事件单向进入网关,网关同步/事件回调业务方;双实例共享同一份代码,各自连独立分库。
每个模块独立可关闭(env feature flag),业务方按需对接。
业务方拉带参临时二维码 → 用户扫 → SSE 推 redirect → 业务方 HMAC finalize 落 cookie。
requireProfileCompletion=true该开关启用后:扫码先标 scanned,公众号回 OAuth 链接,用户点击走 snsapi_userinfo 拿头像昵称 → promote confirmed。
personal_qr 模式人工审核 + JSAPI 占位。webhook HMAC event|payOrderId|status|ts,退避重试 6 次 [0,30s,2m,10m,1h,6h,24h] 不达即 dead。
公众号文本/事件按 MessageRoute 规则匹配多 FanoutEndpoint,首个 ownsReply=true 下游决定回复 XML;FanoutLog 全量留痕,DownstreamHealth 心跳监控。
安全 path /_a/<32hex>/*(env ADMIN_PUBLIC_PATH),扫码登录;5+ tab:Apps / Invites / Admins / Scans / Payments / Routes / Endpoints / FanoutLogs。直访 /admin 返 404 伪装。
admin 颁邀请码(hash 入库) → 业务方 POST /apps/register 带 X-Invite-Code → 网关现生 64hex secret(DB 只存 hash) → 业务方写 env。
上图:默认路径(requireProfileCompletion=false);下图:启用 OAuth 完善信息后的扩展路径(2026-05-11 新增)。DB 写入用独立 lifeline 列。
按业务域分 5 组,prisma/schema.prisma 单源。
两实例共享 GitHub 源,各自走 mvp-deployer 异步构建,PM2 起进程,Caddy 反代,凭据走门神 vault。
真实业务 6 个 + 自吃狗粮 1 个 + 回归通道 1 个。