# ys_wx_project **Repository Path**: leapai/ys_wx_project ## Basic Information - **Project Name**: ys_wx_project - **Description**: 微信小程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-21 - **Last Updated**: 2026-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 牛牛农场微信小游戏 这是牛牛农场的微信小游戏客户端。土地、作物、种子库存、好友、农场动态和算力豆都直接使用 `leap-number-ai` Web 项目的同一套 Go API 与 PostgreSQL 数据,不再使用独立 JSON 后端。 ## 主要能力 - 微信 `wx.login` 服务端换取身份;小游戏包内没有 AppSecret。 - 未绑定用户直接输入跃数 AI 网站登录账号和密码完成绑定;账号启用双重验证时继续输入 6 位验证码。 - 绑定后显示网站账号的用户名和头像,账号密码只用于本次服务端校验,不写入小游戏存储。 - 与 Web 端同步种子购买(算力豆/账户余额)、播种、自然成熟、余额加速、收获、宝箱、每日任务、好友申请/搜索/推荐、系统邻居、拜访偷菜与动态。 - Web 端完成农场操作后,通过已有鉴权实时事件通道通知小游戏;小游戏重新读取服务端权威状态,并自动播放播种、浇水、成熟、收菜、宝箱或算力豆动画。连接中断时自动退回 5 秒校准,恢复后重连,在线时每 30 秒做一次兜底校准。 - 服务端返回 `profile.is_admin=true` 时,账号与同步页会显示“配置”按钮。管理员可测试并切换 Web 项目服务器地址;数据源、HTTP API、Web 地址和实时连接均从同一配置派生,切换后重新验证微信绑定,旧服务器令牌不会发送到新地址。 - 主界面按微信右上角胶囊和设备底部安全区自适应;松土播种抽屉、作物生长/成熟、奖励与幸运宝箱均有 Canvas 动画反馈。 - 直接复用 Web 系统公告:仅后台设置为“弹窗”的未读公告会进入小游戏弹窗队列,关闭后同步已读状态,长内容可分页查看。 - 直接复用 Web 农场音频配置:管理员在原农场配置中维护背景音乐、播种音效和好友收菜音效;小游戏提供独立音乐/音效开关并记住用户选择。 - 保留激励视频入口;仅在好友收菜时提供服务端控制的广告暴击,默认 `5 倍/每日 2 次`。 - 广告任务、播放最短时间、次数限制、幂等和算力豆入账都由服务端校验。 ## 微信身份与再次进入 - 小游戏每次启动都会调用 `wx.login` 做一次无感身份校验,临时 code 只发给服务端换取 OpenID;客户端不能读取用户的微信号。 - 首次绑定网站账号后,服务端把小游戏 OpenID 与网站 `user_id` 固定关联。以后用同一微信、同一小游戏 AppID 进入时会直接签发登录令牌,不需要再次输入网站账号、密码或验证码。 - 本地同时保存访问令牌和刷新令牌;真正决定账号归属的是服务端绑定表,因此清理小游戏本地缓存不会解除绑定。 - 生产环境必须启用小游戏配置并执行 `228_mini_game_identity_binding_and_ads.sql`,否则无法保证自动识别已绑定账号。 ## 本地调试 1. 微信开发者工具会自动使用 `http://127.0.0.1:8080/api/v1`;真机和发布包自动使用 `https://ys666.site/api/v1`。也可在 `game.js` 加载前通过 `GameGlobal.MINI_GAME_CONFIG` 覆盖公开配置。 2. 在微信开发者工具中以“小游戏”导入当前目录,详情设置中关闭合法域名校验(当前 `project.private.config.json` 已关闭)。 3. 本机后端使用 `SERVER_MODE=debug`、`WECHAT_CONNECT_MINI_GAME_ENABLED=true`、`WECHAT_CONNECT_MINI_GAME_DEV_LOGIN_ENABLED=true` 和固定 `WECHAT_CONNECT_MINI_GAME_DEV_OPEN_ID`,无需 AppSecret 即可走完整绑定流程。release 模式会拒绝启动该测试旁路。 4. 开发者工具内的激励视频会显示“本地广告模拟”确认框,方便联调暴击结算;真机和发布包仍只调用正式微信激励视频。 5. 真机和生产必须关闭开发登录,并在微信公众平台配置服务器域名为 request 合法域名和 socket 合法域名。管理员配置页只能切换到 HTTPS 地址;微信后台没有加入白名单的自定义域名仍会被客户端平台拦截。 农场音频使用系统返回的 HTTPS 或站内相对地址;如配置外部音频域名,也必须同步完成微信平台所需的音频网络域名配置。 6. Web 后端生产配置并重启: - `WECHAT_CONNECT_MINI_GAME_ENABLED=true` - `WECHAT_CONNECT_MINI_GAME_APP_ID=<小游戏 AppID>` - `WECHAT_CONNECT_MINI_GAME_APP_SECRET=<仅服务端保存>` - 可选:`WECHAT_CONNECT_MINI_GAME_STEAL_BOOST_MULTIPLIER=5` - 可选:`WECHAT_CONNECT_MINI_GAME_DAILY_AD_LIMIT=2` - 可选:`WECHAT_CONNECT_MINI_GAME_AD_MINIMUM_SECONDS=5` 7. 执行 Web 后端迁移 `228_mini_game_identity_binding_and_ads.sql`。 ## 校验 ```powershell npm test npm run check ``` `npm run check` 会同时校验农场背景、土地和作物资源是否齐全、图片扩展名是否在微信小游戏编译白名单内,并确认微信预览/发布包显式包含 `assets/farm`。运行时使用 JPG/PNG;不要把资源路径改回 WebP,当前开发者工具会在编译阶段排除 WebP 并导致真机请求 404。发布前若此检查失败,不应继续上传。 发布前还需在真机验证:账号绑定、公告弹窗与已读回写、长公告翻页、音乐/音效开关及前后台恢复、断网重试、广告完整/中途关闭、Web 与小游戏同时收获或偷菜的幂等结果。 旧版 Cocos 运行包、独立 JSON 后端和开放数据域文件仍保留在工作目录中便于追溯,但已从微信上传包排除;当前入口只有 `game.js -> src/main.js`,线上数据只访问 Web API。