# MpSubscribeMessage **Repository Path**: wanghuya/mp-subscribe-message ## Basic Information - **Project Name**: MpSubscribeMessage - **Description**: 微信小程序订阅消息后端服务 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-17 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信小程序订阅消息后端服务 这是一个基于Spring Boot 3开发的微信小程序订阅消息后端服务,用于学习和演示微信小程序订阅消息功能。 ## 功能特性 - 微信小程序用户认证(获取openid、access_token等) - 订阅消息发送功能 - 文章管理功能(创建、更新、发布、删除文章) - 向订阅用户推送文章消息 - 用户管理功能(创建、更新、查询用户信息) - 推送记录管理 ## 技术栈 - **后端框架**:Spring Boot 3.2.2 - **数据库**:MySQL 5.7 - **缓存**:Redis 7.0 - **ORM框架**:Spring Data JPA - **工具类库**:Hutool 5.8.25 - **日志**:SLF4J + Logback - **构建工具**:Maven 3.6.0+ ## 项目结构 ``` src/main/ ├── java/com/example/mp/subscribe/ │ ├── Application.java # 项目主启动类 │ ├── config/ # 配置类 │ │ └── WechatMiniappConfig.java # 微信小程序配置 │ ├── controller/ # 控制器 │ │ ├── WechatAuthController.java # 微信认证控制器 │ │ ├── SubscribeMessageController.java # 订阅消息控制器 │ │ ├── ArticleController.java # 文章控制器 │ │ ├── PushController.java # 推送控制器 │ │ └── UserController.java # 用户控制器 │ ├── entity/ # 实体类 │ │ ├── User.java # 用户实体 │ │ ├── Article.java # 文章实体 │ │ └── PushRecord.java # 推送记录实体 │ ├── repository/ # 数据访问接口 │ │ ├── UserRepository.java # 用户数据访问 │ │ ├── ArticleRepository.java # 文章数据访问 │ │ └── PushRecordRepository.java # 推送记录数据访问 │ └── service/ # 业务逻辑层 │ ├── WechatService.java # 微信服务 │ ├── ArticleService.java # 文章服务 │ ├── PushService.java # 推送服务 │ └── UserService.java # 用户服务 └── resources/ └── application.yml # 项目配置文件 ``` ## 安装和运行 ### 1. 环境准备 - JDK 17+ - MySQL 5.7+ - Redis 7.0+ - Maven 3.6.0+ ### 2. 数据库配置 1. **创建数据库**: ```sql CREATE DATABASE mp_subscribe_message DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. **初始化数据库表**: - 使用项目提供的SQL脚本 `src/main/resources/db/init.sql` - 执行方式1:使用MySQL客户端直接执行 ```bash mysql -u root -p < src/main/resources/db/init.sql ``` - 执行方式2:在MySQL Workbench等工具中导入并执行 3. 修改 `src/main/resources/application.yml` 中的数据库配置: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mp_subscribe_message?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: your_username password: your_password ``` ### 3. Redis配置 修改 `src/main/resources/application.yml` 中的Redis配置: ```yaml spring: data: redis: host: localhost port: 6379 password: your_redis_password database: 0 ``` ### 4. 微信小程序配置 修改 `src/main/resources/application.yml` 中的微信小程序配置: ```yaml wechat: miniapp: app-id: your_app_id app-secret: your_app_secret template-id: your_template_id ``` ### 5. 编译和运行 #### 开发环境 ```bash # 编译项目 mvn clean package # 运行项目 java -jar target/mp-subscribe-message.jar ``` 或者使用IDE直接运行 `Application.java` 类。 #### 生产环境部署 **后端服务已部署到域名**:`https://your-domain.com` **生产环境部署步骤**: 1. **打包项目**: ```bash mvn clean package -DskipTests ``` 2. **上传文件到服务器**: ```bash scp target/mp-subscribe-message.jar root@your-server-ip:/path/to/deploy ``` 3. **在服务器上运行**: ```bash # 后台运行 nohup java -jar mp-subscribe-message.jar > app.log 2>&1 & # 使用systemd管理(推荐) # 创建服务文件:/etc/systemd/system/mp-subscribe-message.service # 启动服务:systemctl start mp-subscribe-message # 设置开机自启:systemctl enable mp-subscribe-message ``` 4. **配置域名和HTTPS**: - 使用Nginx反向代理到后端服务 - 配置SSL证书,启用HTTPS - 配置域名解析到服务器IP 5. **生产环境注意事项**: - 配置防火墙规则,只开放必要端口 - 定期备份数据库 - 配置日志管理 - 启用监控和告警 - 定期更新依赖包 - 配置环境变量管理敏感信息 - 启用应用级监控(如Spring Boot Actuator) ## API文档 ### 认证接口 - **登录接口**:`POST /api/auth/login` - 参数:`code`(微信登录凭证) - 返回:用户openid和session_key - **获取access_token**:`POST /api/auth/getAccessToken`(仅用于测试) - 返回:微信小程序access_token ### 订阅消息接口 - **发送订阅消息**:`POST /api/subscribe-message/send` - 请求体: ```json { "openid": "用户openid", "templateId": "模板ID(可选)", "data": { "thing1": { "value": "文章标题" }, "time2": { "value": "2024-01-17 10:00:00" }, "thing3": { "value": "文章摘要" } }, "page": "跳转页面(可选)" } ``` ### 文章接口 - **创建文章**:`POST /api/articles` - **更新文章**:`PUT /api/articles/{id}` - **获取文章详情**:`GET /api/articles/{id}` - **删除文章**:`DELETE /api/articles/{id}` - **获取文章列表**:`GET /api/articles?status=1`(status=0:草稿,status=1:已发布) - **获取最新发布的文章**:`GET /api/articles/latest?limit=10` - **发布文章**:`POST /api/articles/{id}/publish` - **增加文章阅读量**:`POST /api/articles/{id}/view` ### 推送接口 - **向所有订阅用户推送文章**:`POST /api/push/article/{articleId}` - **获取推送记录**:`GET /api/push/records?status=1`(status=0:待推送,status=1:推送成功,status=2:推送失败) - **更新用户订阅状态**:`POST /api/push/subscribe-status?openid=xxx&isSubscribed=true` ### 用户接口 - **创建或更新用户**:`POST /api/users` - **获取用户详情**:`GET /api/users/{openid}` - **获取用户列表**:`GET /api/users` - **获取订阅用户列表**:`GET /api/users/subscribed` - **更新用户订阅状态**:`POST /api/users/{openid}/subscribe-status?isSubscribed=true` - **删除用户**:`DELETE /api/users/{openid}` ## 微信小程序前端集成 ### 1. 登录流程 ```javascript // 1. 获取登录凭证code wx.login({ success: res => { if (res.code) { // 2. 调用后端登录接口获取openid wx.request({ url: 'https://your-domain.com/api/auth/login', method: 'POST', data: { code: res.code }, success: res => { // 3. 保存openid到本地存储 wx.setStorageSync('openid', res.data.openid); } }); } } }); ``` ### 2. 请求订阅消息 ```javascript // 请求订阅消息 wx.requestSubscribeMessage({ tmplIds: ['your_template_id'], success: res => { if (res['your_template_id'] === 'accept') { // 订阅成功,调用后端接口更新订阅状态 wx.request({ url: 'https://your-domain.com/api/users/' + openid + '/subscribe-status', method: 'POST', data: { isSubscribed: true } }); } } }); ``` ## 前端部署操作 ### 1. 准备工作 - **微信开发者工具**:下载并安装最新版本的微信开发者工具 - **微信公众平台账号**:拥有小程序开发权限的账号 - **小程序AppID**:在微信公众平台获取 - **模板ID**:在微信公众平台申请订阅消息模板 ### 2. 配置小程序域名 **步骤1**:登录 [微信公众平台](https://mp.weixin.qq.com/) **步骤2**:进入小程序管理后台,依次点击: - 设置 - 开发设置 - 服务器域名 **步骤3**:添加服务器域名: - **request合法域名**:添加 `https://your-domain.com` - **uploadFile合法域名**:根据需要添加(可选) - **downloadFile合法域名**:根据需要添加(可选) **注意**: - 域名必须已备案 - 必须使用HTTPS协议 - 域名必须与后端服务地址一致 ### 3. 导入并配置项目 **步骤1**:打开微信开发者工具 **步骤2**:点击「导入项目」,选择 `miniprogram` 目录 **步骤3**:填写项目信息: - **AppID**:填写你的小程序AppID - **项目名称**:自定义(如「订阅消息演示」) - **项目目录**:选择 `miniprogram` 目录 - **基础库版本**:选择最新稳定版 **步骤4**:点击「确定」导入项目 ### 4. 更新模板ID 在 `app.js` 中修改 `globalData.templateId` 为你申请的订阅消息模板ID: ```javascript globalData: { userInfo: null, openid: null, baseUrl: 'https://your-domain.com/api', templateId: 'your_actual_template_id' // 替换为你的模板ID } ``` ### 5. 上传代码 **步骤1**:在微信开发者工具中,点击「上传」按钮 **步骤2**:填写版本信息: - **版本号**:如 `1.0.0` - **版本备注**:如「首次上线」 **步骤3**:点击「上传」 **注意**: - 确保代码中没有console.log等调试信息 - 确保所有功能正常运行 - 确保符合微信小程序审核规范 ### 6. 提交审核 **步骤1**:登录微信公众平台 **步骤2**:进入小程序管理后台,依次点击: - 版本管理 - 开发版本 **步骤3**:找到刚上传的版本,点击「提交审核」 **步骤4**:填写审核信息: - **功能介绍**:详细描述小程序的功能和用途 - **服务类目**:选择适合的服务类目 - **测试账号**:如果需要,提供测试账号和密码 - **备注**:其他需要说明的信息 **步骤5**:点击「提交」 ### 7. 发布上线 **步骤1**:审核通过后,登录微信公众平台 **步骤2**:进入小程序管理后台,依次点击: - 版本管理 - 审核版本 **步骤3**:点击「发布」按钮 **步骤4**:确认发布信息,点击「确定」 **注意**: - 发布后约10分钟左右,小程序会在微信中更新 - 可以在「线上版本」中查看当前线上版本 ### 8. 后续维护 1. **版本更新**: - 每次更新代码后,需要重新上传、提交审核、发布 - 可以使用「灰度发布」功能,逐步向用户推送新版本 2. **数据统计**: - 在微信公众平台查看小程序的使用数据 - 分析用户行为,优化小程序功能 3. **问题排查**: - 使用微信开发者工具的调试功能排查问题 - 查看小程序的运行日志 ## 注意事项 1. 请确保已在微信公众平台申请了订阅消息模板,并将模板ID配置到application.yml中。 2. 订阅消息的内容格式需要与模板字段匹配,否则会发送失败。 3. 请确保MySQL和Redis服务已正常运行。 4. 本项目仅供学习和演示使用,生产环境请根据实际情况进行安全加固。 ## 许可证 MIT License