微信小程序 + ASP.NET Core + PostgreSQL:传奇类手游会员站的三端一体实现

发布时间:2026/10/14 1:47:00
微信小程序 + ASP.NET Core + PostgreSQL:传奇类手游会员站的三端一体实现
传奇类手游的运营日常往往卡在同一件事上开服信息、福利领取、玩家社区、绑号与会员等级散落在不同渠道运营同学又要另开一套后台改 Banner、灌活动、调积分。本文介绍一套同仓库实现的传奇游戏会员站CqMember微信原生小程序面向玩家ASP.NET Core 托管 API 与静态管理后台数据落在 PostgreSQL。演示环境品牌名来自后台SiteSettings.SiteName截图为「传奇会员站」仓库种子默认名可后台改小程序app.json里的字只是接口未返回时的兜底。支付为模拟流程不会真实扣款未接入微信支付。下文配图全部来自实机 / 开发者工具与浏览器后台截图经裁剪拼版后用于博客版式未绘制假 UI。1. 这套系统解决什么目标不是「又一个落地页」而是把玩家侧与运营侧收进同一套后端端谁用做什么微信小程序玩家首页聚合、开服表、游戏目录、福利签到、社区、绑号、会员、推广/admin/静态后台运营 / 超管站点品牌、广告位、游戏与开服、活动福利、订单与用户积分、帖子与消息CqMember.Api两端共用/api/app/*App JWT与/api/admin/*Admin JWT同进程托管/uploads同仓的直接收益是图片相对路径、品牌字段、活动 PeriodKey、订单状态机只维护一份。小程序导航栏标题、分享标题ShareTitle 留空时与后台页面标题都通过GET /api/app/settings读取 SiteName / LogoUrl避免「前台一个名、后台另一个名」。价格、权益文案、Banner 图同样以后台为准改配置不必重新发包页面结构变更除外。2. 技术栈与仓库结构层技术客户端微信原生小程序WXML / WXSS / JS非 uni-app / TarotabBar 4 页 子页共23页后端ASP.NET Corenet10.0EF Core Npgsql / PostgreSQL鉴权双 JWTJwt:App/Jwt:Admin签发方、受众、密钥分离非 Development 要求密钥不同且非占位值管理端纯静态 HTML / JS / CSS放在wwwroot/admin/随 API 一起发布无需前端构建文档 / 验证Swashbuckletools/verify.py、check_mp.py、xUnit含北京时间 PeriodKey 用例顶层布局传奇游戏会员站/ CqMember.sln server/ CqMember.Api/ # Controllers/App Controllers/Admin # Data实体 / DbContext / Migrations # ServicesJWT、北京时间时钟、积分、微信登录、上传 # wwwroot/admin /uploads CqMember.Tests/ seed/ # demo-data.sqlprod-cleanup-REVIEW.sql需人工审核 miniprogram/ # 微信开发者工具导入目录 tools/ # verify / check_mp / make_assets shots/ # 实机 UI 截图本文配图来源对外地址由Site:PublicBaseUrl统一拼接库内只存/uploads/...相对路径旧的 localhost 或换域名前主机名可在输出阶段改写。Production 要求 PublicBaseUrl 以https://开头否则拒绝启动。反向代理侧Security:KnownProxies为空则不信任任何转发头客户端 IP 取 TCP 远端避免伪造X-Forwarded-For绕过登录锁定。3. 架构双 JWT、同进程后台、统一响应微信小程序 (App JWT) ──┐ ├──► CqMember.Api 浏览器管理后台 (Admin JWT)─┘ ├── /api/app/* ├── /api/admin/* ├── /admin/静态 └── /uploads/ ▼ PostgreSQL (cq_member) WeChat code2session可桩统一响应形如{ code, msg, data }。两端密钥与受众隔离避免小程序 token 误调后台接口。管理端登录失败有锁定策略Security:LoginMaxFailures/LoginLockMinutes按用户名 客户端 IP 持久化到 PG。账号被标记强制改密时返回业务码如40301前端拦到改密页。Development 下可开模拟登录Auth:AllowMocktrue且请求显式带mockUser其它环境即使写 true 也会被忽略。微信 AppId / AppSecret 为空时服务可启动后台仍可用但小程序登录返回50301绝不静默回退成模拟登录。4. 玩家能力实机截图玩家主路径可以概括为打开首页看 Banner / 宫格 / 即将开服 → 进开服表或游戏详情 → 到福利页签到与领任务 → 逛社区与游戏列表。首页左Logo、多位置 Banner、5 宫格活动赛事、排行榜、玩家社区、休闲游戏、会员中心、中部推广、即将开服轮播与全部游戏 / 社区热卡。开服表中按游戏筛选展示版本标签与开服时刻下载走复制外链弹窗而不是在小程序内直接拉安装包。福利右等级卡、连续签到、每日福利 / 礼包 / 兑换。领取是否成功由后端 PeriodKey 与幂等约束决定前端只负责展示可领 / 已领状态。社区与游戏目录是另一条高频路径社区支持按游戏 / 分类浏览、发帖传图、赞 / 藏 / 评与关注。游戏列表分新游 / 热门等维度详情页承接介绍、标签与下载入口。此外还有消息用户 / 帖子 / 系统含全员广播我的登录后看统计、积分、装扮、绑号、兑换记录、游玩历史、我的帖子与收藏休闲游戏分类列表 外链玩法并写游玩记录会员 / 推广 / 绑号见第 6 节闸门相关截图。23 个页面都挂在同一套/api/app/*上鉴权统一走 App JWT。5. 运营后台实机截图后台与 API 同进程发布浏览器打开/admin/即可无需单独 Node 构建流水线。仪表盘汇总用户、会员、订单界面标注模拟支付流水、游戏与开服、活动领取与帖子等指标并带近 7 日北京时间趋势。模块清单与工程含义模块作用仪表盘今日新增、待支付、领取次数、近 7 日柱状图、最近订单站点设置SiteName / Logo / 分享文案品牌单点广告位 / 首页入口驱动小程序 Banner 与宫格不必改前端代码游戏 / 开服表CRUD 后直接反映到首页与「即将开服」活动 / 福利 / 领取记录 / 积分流水配置规则 审计领取会员套餐 / 订单套餐权益订单可人工标记已支付或取消并联动等级用户查询与调积分消息 / 社区帖 / 评论运营侧内容治理装扮 / 休闲游戏装扮商城素材与外链玩法管理员 / 强制改密账号治理与 40301 闸门运营改配置玩家端下次拉 settings / 列表接口即可看到这是「静态后台 动态 API」比「纯前端写死文案」更合适的原因。6. 工程闸门幂等、邀请上限、改密、环境护栏与模拟支付业务页面背后有几道值得写进实现 checklist 的闸门。对应的玩家侧页面如下绑号、会员中心、推广领取幂等唯一约束(UserId, ActivityId, PeriodKey)。PeriodKey 按北京时间切 Once / Daily / Weekly有单元测试覆盖时钟边界。客户端重试或跨日切换时同一周期不能领两次。邀请奖励InviteeId 唯一邀请人按日槽位发积分Invite:RewardPoints/Invite:DailyCap默认示例为每邀 50 分、日上限 5 人并发用行锁FOR UPDATE。模拟登录不发奖避免开发环境刷分。推广页展示统计与海报入口依赖真实登录态。强制改密与登录锁定后台账号可被标记必须改密40301。连续失败锁定42901状态进 PostgreSQL进程重启不丢。截图仪表盘顶栏可见失败次数提示说明锁定策略已接上 UI。Dev / Prod 数据库护栏非 Production禁止连接非本机库Production不自动迁移、不跑 DemoSeeder迁移需显式--migrate上传做魔数校验KnownProxies为空则不信任转发头。模拟支付边界会员中心文案写明「支付为演示流程不会产生真实扣款」。订单状态机Pending→ 模拟 pay →Paid或Cancelled。后台可人工标记已支付并升等级。PurchaseEnabled可整站关闭购买。未接入真实微信支付iOS 虚拟商品审核风险需运营侧自行评估工程文只强调演示边界。绑号页把「专服 游戏账号」做成可解绑绑定与福利领取、会员等级一样写库逻辑都在服务端小程序不信任本地「已领取」缓存。7. 本地怎么跑 / 验证点到为止开发态典型步骤安装 .NET 10 SDK 与本机 PostgreSQL在appsettings.Development.json写入本机连接串勿把生产串写进 Developmentcd server/CqMember.Api dotnet run——Development localhost 首次可自动建库迁移并按Seed:Demo灌演示数据微信开发者工具打开miniprogram/将BASE_URL指向本机http://localhost:5000或已配置的 PublicBaseUrl浏览器打开http://localhost:5000/admin/登录后台。自检tools/verify.py打接口、dotnet test跑 PeriodKey 等用例、check_mp做小程序侧检查。生产环境用appsettings.Production.jsongitignore或环境变量配置真实 AppId、JWT、连接串与 PublicBaseUrl启动校验失败时控制台只输出一次中英文原因并以非零退出避免错误配置下刷屏重启。演示数据清理脚本prod-cleanup-REVIEW.sql必须人工审核后再执行。8. 小结CqMember 把传奇类会员站常见的「开服 福利 社区 绑号 运营改配」收进小程序 / API / 静态后台三端一体双 JWT隔离玩家与运营SiteSettings单点品牌与素材地址PeriodKey领取幂等与北京时间周期邀请日上限 强制改密 登录锁定护住积分与后台Dev 禁连远程库 / Prod 禁自动迁移降低误操作模拟支付划清演示与真实扣款边界。若你也在做同类垂直站优先抄的不是视觉皮肤而是这些把「能跑」变成「不容易写坏数据、不容易误连正式库」的闸门。配图均由shots/实机 PNG 缩放、圆角与拼版生成原始文件对应关系见同目录sources.md。