按协议而不是按厂商做适配,与现有短信、对象存储的做法一致:openai 兼容格式 一个适配器即可覆盖 DeepSeek、通义、智谱、火山方舟、Ollama 等,新增厂商通常 只需在后台加一条模型记录;anthropic、gemini、webhook、debug 各一个适配器。 密钥沿用 integration.go 的 AES-GCM 加密存储。 测试账号托管的回复走 persistMessage 同一条落库和推送路径,因此未读数、 WebSocket 推送和会话排序全部复用现有逻辑,客户端无需改动。为此把 persistMessage 抽出 persistMessageContext,因为 worker 没有 *http.Request。 任务队列用数据库表而非内存:重启不丢回复,多实例不重复消费。领取用 UPDATE 打 claim_token 再回读,没有用 SELECT ... FOR UPDATE SKIP LOCKED——生产存在 MySQL 5.7 环境,那里该语法无法解析。同一会话同时只允许一个待处理任务 (pending_key 生成列 + 唯一键),所以用户连发多条消息只会得到一条回复。 闸门:仅 is_test=1 且在允许批次内的账号生效,托管账号之间不互相触发,三层 配额,调用失败默认静默。会话内是否标注 AI 身份由 ai.disclose_in_chat 控制 并默认开启,关闭前需确认所在地区的监管要求。 app.go、integration.go、im.go 三个文件同时包含本次改动之前工作区里就已存在 的未提交修改,一并带入。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
admin
@ 63a38dce49
mobile
@ 6fb81ac3c5
星遇社交平台
根据《陌陌类社交平台 V1.0 完整技术方案》实现的三端一体、可运行社交平台。项目包含 Vben Admin 管理端、Go 后端和 uni-app 客户端,并已连接本机 im 数据库。
已实现
- 管理端:运营概览、用户全量资料、实名/职业认证审核、会员等级与到期日、密码重置与强制下线、设备与会话、违规处罚、全量消息记录、动态审核、举报处置、风险事件、会员套餐新增/编辑/删除、订单状态编辑/入账/关闭/退款/删除、平台/短信/支付配置和审计日志。
- 用户端:启动、密码/验证码登录与自动刷新令牌、注册、找回密码、推荐/最新/关注、搜索、附近、动态与评论、通知中心、实时聊天、图片/语音消息、个人资料编辑、关系与访客列表、隐私设置、会员支付和订单中心;H5 使用本地 SVG 图标并适配窄屏、安全区和动态视口。
- 后端:JWT 登录与版本化强制失效、一次性短信验证码、用户/关注/喜欢/拉黑、搜索与距离排序、动态/评论、通知、举报处罚、认证审核、会员/订单权益联动、支付渠道、加密集成配置、管理 API、审计、WebSocket IM。
- IM:会话序号、客户端消息 ID 幂等、历史消息、未读数、已读游标、WebSocket 推送及 Protobuf 协议定义。
- 媒体:鉴权上传、格式与大小校验、本地静态访问;生产环境可将同一接口替换为 MinIO/OSS。
- 数据库:11 组 MySQL 迁移和幂等演示数据,包含认证、处罚、账号安全控制及套餐/订单安全归档字段。SQL 已兼容当前本机 MySQL 5.7.26。
目录
admin/ Vben Admin 5.7.0 + Element Plus 管理端
backend/ Go 1.27 + go-zero + MySQL + WebSocket 服务
mobile/ uni-app + Vue 3 + TypeScript 客户端
scripts/ 数据库迁移、开发启动和 API 冒烟测试
接口边界定义位于 backend/docs/social.api,IM 协议定义位于 backend/proto/im/v1/。
本地地址与演示账号
| 服务 | 地址 | 账号 |
|---|---|---|
| 后端 | http://127.0.0.1:8888 |
— |
| 管理端 | http://127.0.0.1:5555 |
admin / Admin@123 |
| uni-app H5 | http://127.0.0.1:5173 |
13800138000 / 123456 |
数据库默认使用 root:root@tcp(127.0.0.1:3306)/im。建议通过 IM_DB_DSN 和 IM_JWT_SECRET 覆盖开发默认值。
首次运行
# 1. 建表并迁移(数据库 im 需要已存在)
powershell -ExecutionPolicy Bypass -File .\scripts\migrate.ps1
# 2. 启动后端
powershell -ExecutionPolicy Bypass -File .\scripts\dev-backend.ps1
# 3. 新终端启动管理端
cd admin
pnpm install
pnpm dev:ele
# 4. 新终端启动 uni-app H5
cd mobile
pnpm install
pnpm dev:h5
如使用真机或模拟器,将 mobile/.env.example 复制成相应模式的 .env 文件,并把 127.0.0.1 改为开发机局域网地址或已部署域名。
短信与支付配置
登录管理端后,在“平台配置”中进入“短信配置”或“支付配置”:
- 短信支持
debug与webhook两种提供商。Webhook 会收到包含phone、scene、code、signName、templateId的 JSON POST,可通过 Bearer Token 鉴权。 - 支付支持沙箱与生产参数管理,可独立启停支付宝和微信支付。私钥、APIv3 密钥、Webhook Token 等敏感字段使用 AES-GCM 加密后写入数据库,管理页面不会回显明文。
- 沙箱模式可完成创建订单、确认支付、会员订阅生效和订单查询的完整闭环;切换生产模式前,页面会校验所启用渠道的必填商户参数。
构建与验证
# 后端
cd backend
..\.tools\go\bin\go.exe test ./...
# Vben 管理端
cd admin
pnpm -F @vben/web-ele run typecheck
pnpm -F @vben/web-ele run build
# uni-app H5
cd mobile
pnpm type-check
pnpm build:h5
# 后端运行后执行全链路 API 冒烟测试
cd ..
powershell -ExecutionPolicy Bypass -File .\scripts\smoke.ps1
本地与生产边界
当前仓库可完整演示核心业务闭环。默认短信提供商为 debug,调试验证码可在管理端修改;默认支付为沙箱模式并会真实更新本地订单和会员状态。生产模式已具备参数安全存储、渠道可用性校验和订单边界,但在获得真实商户资料后仍需接入支付宝/微信原生 SDK、支付下单与异步回调验签。上线前还应使用正式短信网关、对象存储/CDN,配置 HTTPS 回调地址,并替换 IM_JWT_SECRET 与数据库默认口令。