Spring Boot微信小程序和公众号开发完整指南(初学者版)

目录

1. 前言与学习准备

1.1 本指南适合谁

1.2 你将学到什么

1.3 前置知识要求

1.4 开发环境准备

1.4.1 必需软件

1.4.2 开发工具配置

2. 微信开发基础概念

2.1 微信生态系统介绍

2.2 小程序vs公众号:区别与联系

2.2.1 微信公众号

2.2.2 微信小程序

2.2.3 如何选择?

2.3 微信开发的核心概念

2.3.1 AppID和AppSecret

2.3.2 Access Token

2.3.3 OpenID和UnionID

2.3.4 微信服务器和开发者服务器

2.4 开发流程概览

3. 项目搭建:从零开始

3.1 创建Spring Boot项目

3.1.1 使用Spring Initializr创建项目

3.1.2 项目初始配置

3.2 项目结构详解

3.2.1 标准项目结构

3.2.2 各个包的详细说明

3.2.3 创建基础包结构

3.3 依赖配置详解

3.3.1 完整的pom.xml配置

3.3.2 依赖说明

3.4 配置文件详解

3.4.1 多环境配置策略

3.4.2 配置文件使用技巧

4. 微信开发账号配置

4.1 注册微信小程序

4.1.1 注册流程

4.1.2 获取开发凭证

4.1.3 配置服务器信息

4.2 注册微信公众号

4.2.1 选择公众号类型

4.2.2 注册流程

4.2.3 配置开发者模式

4.3 获取开发凭证

4.3.1 小程序凭证

4.3.2 公众号凭证

4.3.3 测试号(推荐初学者使用)

4.4 配置服务器信息

4.4.1 本地开发配置

4.4.2 生产环境配置

5. 数据库设计与实现

5.1 数据库设计原则

5.1.1 命名规范

5.1.2 字段类型选择

5.2 用户表设计

5.2.1 用户表SQL

5.2.2 字段说明

5.3 业务表设计

5.3.1 商品表

5.3.2 订单表

5.3.3 其他常用表

5.4 JPA实体类编写

5.4.1 基础实体类

5.4.2 用户实体类

5.4.3 订单实体类

5.4.4 启用JPA审计功能

5.4.5 创建Repository接口

6. 小程序后端开发详解

6.1 小程序登录流程详解

6.1.1 登录流程图解

6.1.2 配置微信SDK

6.1.3 登录接口实现

6.1.4 请求和响应对象

6.1.5 认证服务实现

6.2 用户信息管理

6.2.1 获取用户信息

6.2.2 用户信息解密

6.3 文件上传功能

6.3.1 文件上传控制器

6.3.2 文件服务实现

6.3.3 配置文件访问

6.4 消息推送实现

6.4.1 消息推送服务

6.4.2 在业务中使用消息推送

7. 微信支付完整实现

7.1 支付准备工作

7.1.1 开通微信支付

7.1.2 配置支付参数

7.2 统一下单接口

7.2.1 支付配置类

7.2.2 创建订单

7.2.3 订单服务实现

7.3 支付结果通知

7.3.1 支付回调接口

7.3.2 处理支付通知

7.4 退款功能实现

7.4.1 退款接口

7.4.2 退款实现

8. 公众号开发详解

8.1 服务器配置验证

8.1.1 验证接口实现

8.2 消息接收与回复

8.2.1 消息处理服务

8.3 自定义菜单

8.3.1 菜单管理接口

8.3.2 菜单服务实现

8.4 网页授权

8.4.1 网页授权流程

8.4.2 授权控制器

8.4.3 OAuth服务实现

9. 安全与认证

9.1 JWT认证实现

9.1.1 添加JWT依赖

9.1.2 JWT工具类

9.2 接口权限控制

9.2.1 认证拦截器

9.2.2 配置拦截器

9.3 数据加密

9.3.1 加密工具类

9.4 防攻击策略

9.4.1 接口限流

9.4.2 防重复提交

10. 测试与调试

10.1 单元测试编写

10.1.1 Service层测试

10.1.2 Controller层测试

10.2 接口测试

10.2.1 使用Postman测试

10.3 调试技巧

10.3.1 日志调试

10.3.2 配置日志级别

10.3.3 使用调试工具

10.4 常见问题排查

10.4.1 微信接口调用失败

10.4.2 数据库连接失败

11. 部署与上线

11.1 服务器选择

11.1.1 云服务器对比

11.1.2 服务器配置建议

11.2 应用部署

11.2.1 打包应用

11.2.2 上传到服务器

11.2.3 服务器环境准备

11.2.4 运行应用

11.3 域名配置

11.3.1 购买域名

11.3.2 域名备案

11.3.3 域名解析

11.4 SSL证书配置

11.4.1 申请免费证书

11.4.2 Nginx配置HTTPS

12. 项目优化与扩展

12.1 性能优化

12.1.1 数据库优化

12.1.2 接口优化

12.2 缓存策略

12.2.1 Redis缓存配置

12.2.2 缓存使用示例

12.3 日志管理

12.3.1 日志配置

12.3.2 日志最佳实践

12.4 监控告警

12.4.1 应用健康检查

12.4.2 自定义健康检查

12.4.3 简单的监控脚本

总结

下一步建议

学习资源


1. 前言与学习准备

1.1 本指南适合谁

这份指南专门为以下人群编写:

  • Java初级开发者:已经掌握Java基础,想要学习微信开发的同学
  • 传统Web开发者:想要转型做微信生态开发的程序员
  • 在校学生:计算机相关专业,想要做毕业设计或者增加项目经验
  • 创业者:想要快速搭建微信小程序或公众号的技术创业者

如果你是完全的编程新手,建议先学习Java基础和Spring Boot基础后再来学习本指南。

1.2 你将学到什么

通过本指南的学习,你将掌握:

  1. 微信开发全流程:从账号注册到项目上线的完整流程
  2. Spring Boot实战:在实际项目中深入理解Spring Boot的使用
  3. 小程序后端开发:登录认证、数据管理、支付等核心功能
  4. 公众号后端开发:消息处理、菜单管理、网页授权等功能
  5. 项目架构设计:学会设计清晰、可扩展的项目结构
  6. 最佳实践:掌握微信开发中的各种最佳实践和避坑指南

1.3 前置知识要求

为了更好地学习本指南,你需要具备以下基础知识:

  • Java基础:理解面向对象编程、集合、异常处理等概念
  • Spring Boot基础:了解Spring Boot的基本使用,如创建项目、编写Controller等
  • 数据库基础:了解MySQL的基本使用,会写简单的SQL语句
  • HTTP协议:理解GET、POST等请求方法,了解请求和响应的概念
  • JSON格式:了解JSON数据格式,知道如何解析和生成JSON

如果某些知识点不太熟悉也不用担心,我会在使用时详细解释。

1.4 开发环境准备

在开始之前,请确保你的电脑上安装了以下软件:

1.4.1 必需软件
  1. JDK 8或以上版本

    • 下载地址:https://www.oracle.com/java/technologies/downloads/
    • 安装后在命令行输入 java -version 检查是否安装成功
  2. IntelliJ IDEA(推荐)或 Eclipse

    • IDEA下载地址:https://www.jetbrains.com/idea/download/
    • 社区版免费,功能已经足够使用
  3. MySQL 5.7或8.0

    • 下载地址:https://dev.mysql.com/downloads/mysql/
    • 记住你设置的root密码,后面会用到
  4. Redis(可选但推荐)

    • Windows版本:https://github.com/microsoftarchive/redis/releases
    • Mac可以用Homebrew安装:brew install redis
  5. Postman(API测试工具)

    • 下载地址:https://www.postman.com/downloads/
1.4.2 开发工具配置
  1. 配置IDEA

    • 安装Lombok插件:File → Settings → Plugins → 搜索Lombok → Install
    • 配置Maven:File → Settings → Build → Build Tools → Maven
    • 设置编码:File → Settings → Editor → File Encodings → 都设置为UTF-8
  2. 配置Maven镜像(加速依赖下载)

    找到Maven的settings.xml文件(通常在用户目录/.m2/下),添加阿里云镜像:

    <mirrors>
      <mirror>
        <id>aliyun-maven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
      </mirror>
    </mirrors>
    

2. 微信开发基础概念

在正式开始编码之前,我们需要先理解微信开发的一些基础概念。这些概念非常重要,理解了它们,后面的开发就会事半功倍。

2.1 微信生态系统介绍

微信不仅仅是一个聊天工具,它已经发展成为一个完整的生态系统:

  1. 微信聊天:最基础的即时通讯功能
  2. 微信公众号:包括订阅号、服务号和企业号
  3. 微信小程序:无需下载安装的轻应用
  4. 微信支付:移动支付解决方案
  5. 企业微信:企业内部沟通协作工具

作为开发者,我们主要关注的是公众号和小程序的开发。

2.2 小程序vs公众号:区别与联系

很多初学者分不清小程序和公众号的区别,让我用通俗的语言解释一下:

2.2.1 微信公众号

什么是公众号?

  • 可以理解为微信里的"网站"或"博客"
  • 用户需要关注才能接收消息
  • 主要用于信息发布和用户互动

公众号的类型:

  1. 订阅号:适合个人和媒体,每天可以发送1条消息
  2. 服务号:适合企业,每月可以发送4条消息,功能更强大
  3. 企业号:现已升级为企业微信

公众号能做什么?

  • 发送图文消息、语音、视频等
  • 自定义菜单,提供各种服务
  • 网页授权,获取用户信息
  • 微信支付,实现交易功能
2.2.2 微信小程序

什么是小程序?

  • 可以理解为微信里的"APP"
  • 无需下载安装,即用即走
  • 有独立的开发框架和语法

小程序的特点:

  1. 体验好:加载速度快,操作流畅
  2. 获取成本低:扫码或搜索即可使用
  3. 功能丰富:可以调用微信的各种能力

小程序能做什么?

  • 电商购物、点餐、打车等各种服务
  • 游戏、工具类应用
  • 线下门店的连接器
2.2.3 如何选择?
  • 如果你主要是发布内容,选择公众号
  • 如果你要提供功能服务,选择小程序
  • 很多企业是两者结合使用

2.3 微信开发的核心概念

2.3.1 AppID和AppSecret

这是微信开发中最重要的两个参数:

  • AppID:应用的唯一标识,相当于你的应用的"身份证号"
  • AppSecret:应用的密钥,相当于"密码",需要妥善保管

记住:永远不要把AppSecret泄露给他人或提交到公开的代码仓库!

2.3.2 Access Token

Access Token是调用微信接口的凭证:

  • 有效期为2小时
  • 需要用AppID和AppSecret换取
  • 建议缓存起来,不要频繁获取
2.3.3 OpenID和UnionID
  • OpenID:用户在某个应用下的唯一标识
  • UnionID:用户在同一开发者账号下所有应用的唯一标识

举个例子:

  • 张三在你的小程序A中的OpenID是 "xxx123"
  • 张三在你的公众号B中的OpenID是 "yyy456"
  • 但他的UnionID在两个应用中都是 "zzz789"
2.3.4 微信服务器和开发者服务器

理解两个服务器的关系很重要:

  1. 微信服务器:微信官方的服务器,提供各种API
  2. 开发者服务器:就是我们要开发的Spring Boot应用

交互流程通常是:

用户 <-> 微信客户端 <-> 微信服务器 <-> 开发者服务器

2.4 开发流程概览

整个开发流程可以分为以下步骤:

  1. 准备阶段

    • 注册微信开发者账号
    • 创建小程序/公众号
    • 获取开发凭证
  2. 开发阶段

    • 搭建Spring Boot项目
    • 实现业务功能
    • 调试测试
  3. 部署阶段

    • 购买服务器和域名
    • 部署应用
    • 配置HTTPS
  4. 上线阶段

    • 提交审核
    • 发布上线
    • 运营维护

接下来,我们就按照这个流程,一步步完成整个项目的开发。

3. 项目搭建:从零开始

这一章我们将从零开始搭建一个Spring Boot项目。我会详细解释每一步,确保初学者也能轻松上手。

3.1 创建Spring Boot项目

3.1.1 使用Spring Initializr创建项目

Spring Initializr是创建Spring Boot项目最简单的方式。

方法一:使用网页版

  1. 打开 https://start.spring.io/

  2. 填写项目信息:

    • Project: Maven Project
    • Language: Java
    • Spring Boot: 2.7.14(选择2.x的最新稳定版)
    • Project Metadata:
      • Group: com.example(你的公司域名倒写)
      • Artifact: wechat-demo(项目名称)
      • Name: wechat-demo
      • Description: 微信小程序和公众号后端
      • Package name: com.example.wechat
      • Packaging: Jar
      • Java: 8
  3. 添加依赖(Dependencies):

    • Spring Web(必选)
    • Spring Data JPA(数据库访问)
    • MySQL Driver(MySQL驱动)
    • Spring Data Redis(Redis支持)
    • Lombok(简化代码)
    • Spring Boot DevTools(开发工具)
  4. 点击"Generate"下载项目压缩包

  5. 解压并用IDEA打开项目

方法二:使用IDEA创建

  1. 打开IDEA,选择 File → New → Project
  2. 选择 Spring Initializr
  3. 填写项目信息(同上)
  4. 选择依赖(同上)
  5. 完成创建
3.1.2 项目初始配置

项目创建后,我们需要做一些初始配置:

  1. 配置application.properties

src/main/resources/application.properties改名为application.yml(YAML格式更清晰),并添加以下内容:

# 服务器配置
server:
  port: 8080  # 服务端口
  servlet:
    context-path: /api  # 接口前缀

# Spring配置
spring:
  application:
    name: wechat-demo  # 应用名称
  
  # 数据库配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/wechat_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: your_password  # 改成你的密码
  
  # JPA配置
  jpa:
    hibernate:
      ddl-auto: update  # 自动更新表结构
    show-sql: true  # 显示SQL语句
    properties:
      hibernate:
        format_sql: true  # 格式化SQL语句
  
  # Redis配置(如果安装了Redis)
  redis:
    host: localhost
    port: 6379
    password:  # 如果没有密码就留空

# 日志配置
logging:
  level:
    com.example.wechat: DEBUG  # 设置项目日志级别
  1. 创建数据库

打开MySQL客户端,执行以下SQL:

CREATE DATABASE wechat_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. 运行测试

找到主类WechatDemoApplication.java,点击运行。如果看到以下日志,说明项目启动成功:

Started WechatDemoApplication in x.xxx seconds

在浏览器访问 http://localhost:8080/api ,应该会看到404错误页面(因为还没有写接口),这是正常的。

3.2 项目结构详解

一个清晰的项目结构对于项目的可维护性至关重要。下面我详细介绍每个包的作用和命名规范。

3.2.1 标准项目结构
wechat-demo/
├── src/
│   ├── main/
│   │   ├── java/com/example/wechat/
│   │   │   ├── WechatDemoApplication.java    # 主启动类
│   │   │   ├── config/                       # 配置类包
│   │   │   ├── controller/                   # 控制器包
│   │   │   ├── service/                      # 业务逻辑包
│   │   │   ├── repository/                   # 数据访问包
│   │   │   ├── entity/                       # 实体类包
│   │   │   ├── dto/                          # 数据传输对象包
│   │   │   ├── enums/                        # 枚举类包
│   │   │   ├── utils/                        # 工具类包
│   │   │   ├── exception/                    # 异常类包
│   │   │   └── interceptor/                  # 拦截器包
│   │   └── resources/
│   │       ├── application.yml               # 主配置文件
│   │       ├── application-dev.yml           # 开发环境配置
│   │       ├── application-prod.yml          # 生产环境配置
│   │       ├── static/                       # 静态资源
│   │       └── templates/                    # 模板文件
│   └── test/                                 # 测试代码
└── pom.xml                                   # Maven配置文件
3.2.2 各个包的详细说明
  1. config包 - 存放所有配置类

    config/
    ├── WechatConfig.java      # 微信相关配置
    ├── RedisConfig.java       # Redis配置
    ├── WebMvcConfig.java      # Web配置
    └── SwaggerConfig.java     # API文档配置
    
  2. controller包 - 存放所有控制器(接收请求的地方)

    controller/
    ├── miniapp/               # 小程序相关接口
    │   ├── AuthController.java     # 认证接口
    │   ├── UserController.java     # 用户接口
    │   └── PayController.java      # 支付接口
    ├── mp/                    # 公众号相关接口
    │   ├── MessageController.java  # 消息接口
    │   └── MenuController.java     # 菜单接口
    └── common/                # 通用接口
        └── FileController.java     # 文件上传接口
    
  3. service包 - 存放业务逻辑

    service/
    ├── impl/                  # 接口实现类
    ├── AuthService.java       # 认证服务接口
    ├── UserService.java       # 用户服务接口
    └── WechatService.java     # 微信服务接口
    
  4. entity包 - 存放数据库实体类

    entity/
    ├── base/                  # 基础实体类
    │   └── BaseEntity.java    # 包含id、创建时间等公共字段
    ├── User.java              # 用户实体
    └── Order.java             # 订单实体
    
  5. dto包 - 存放数据传输对象

    dto/
    ├── request/               # 请求参数类
    │   └── LoginRequest.java
    └── response/              # 响应数据类
        └── LoginResponse.java
    
3.2.3 创建基础包结构

让我们手动创建这些包结构:

  1. com.example.wechat下右键 → New → Package
  2. 依次创建上述所有包
  3. 这样做的好处是项目结构一目了然,便于团队协作

3.3 依赖配置详解

项目的依赖配置在pom.xml文件中,让我详细解释每个依赖的作用。

3.3.1 完整的pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <!-- Spring Boot父项目,提供默认配置 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.14</version>
        <relativePath/>
    </parent>
    
    <!-- 项目基本信息 -->
    <groupId>com.example</groupId>
    <artifactId>wechat-demo</artifactId>
    <version>1.0.0</version>
    <name>wechat-demo</name>
    <description>微信小程序和公众号后端</description>
    
    <!-- 属性配置 -->
    <properties>
        <java.version>1.8</java.version>
        <weixin-java.version>4.4.0</weixin-java.version>
        <hutool.version>5.8.21</hutool.version>
    </properties>
    
    <dependencies>
        <!-- Spring Boot Web启动器:包含了Spring MVC、Tomcat等 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- JPA启动器:用于操作数据库 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
        <!-- MySQL驱动:连接MySQL数据库 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <!-- Redis启动器:用于缓存 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
        <!-- Lombok:简化代码,自动生成getter/setter等 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- 微信开发SDK:这是重点! -->
        <!-- 小程序开发包 -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>${weixin-java.version}</version>
        </dependency>
        
        <!-- 公众号开发包 -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>${weixin-java.version}</version>
        </dependency>
        
        <!-- 微信支付开发包 -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-pay</artifactId>
            <version>${weixin-java.version}</version>
        </dependency>
        
        <!-- Hutool工具包:提供各种实用工具 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>
        
        <!-- 参数验证 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        
        <!-- 开发工具:支持热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        
        <!-- 测试相关 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <!-- 构建配置 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
3.3.2 依赖说明

让我解释一下为什么需要这些依赖:

  1. weixin-java系列:这是最重要的依赖,封装了微信API,让我们不用自己处理复杂的签名验证等问题

  2. Hutool:一个功能强大的Java工具包,提供了很多实用方法,比如:

    • 字符串处理
    • 日期处理
    • 加密解密
    • HTTP请求
  3. Lombok:可以通过注解自动生成代码,比如:

    @Data  // 自动生成getter/setter/toString等方法
    public class User {
        private Long id;
        private String name;
    }
    
  4. DevTools:开发时修改代码后自动重启,提高开发效率

3.4 配置文件详解

Spring Boot支持多环境配置,这在实际开发中非常有用。

3.4.1 多环境配置策略

创建三个配置文件:

  1. application.yml - 公共配置
spring:
  profiles:
    active: dev  # 默认使用开发环境
  1. application-dev.yml - 开发环境配置
# 开发环境配置
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/wechat_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
  
  jpa:
    show-sql: true  # 开发环境显示SQL
    hibernate:
      ddl-auto: update  # 自动更新表结构

# 微信配置(这里先用测试号)
wechat:
  miniapp:
    app-id: wx1234567890abcdef
    app-secret: abcdef1234567890abcdef1234567890
  mp:
    app-id: wx0987654321fedcba
    app-secret: fedcba0987654321fedcba0987654321

# 日志配置
logging:
  level:
    com.example.wechat: DEBUG  # 开发环境打印详细日志
  1. application-prod.yml - 生产环境配置
# 生产环境配置
server:
  port: 80

spring:
  datasource:
    url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/wechat_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: prod_user
    password: ${DB_PASSWORD}  # 使用环境变量,更安全
  
  jpa:
    show-sql: false  # 生产环境不显示SQL
    hibernate:
      ddl-auto: validate  # 只验证,不修改表结构

# 微信配置(使用环境变量)
wechat:
  miniapp:
    app-id: ${MINIAPP_APPID}
    app-secret: ${MINIAPP_SECRET}
  mp:
    app-id: ${MP_APPID}
    app-secret: ${MP_SECRET}

# 日志配置
logging:
  level:
    com.example.wechat: INFO  # 生产环境只打印重要日志
  file:
    name: /var/log/wechat/app.log  # 日志文件路径
3.4.2 配置文件使用技巧
  1. 使用环境变量:敏感信息不要直接写在配置文件中

    password: ${DB_PASSWORD:defaultPassword}  # 冒号后面是默认值
    
  2. 配置分组:相关配置放在一起

    wechat:
      miniapp:
        app-id: xxx
        app-secret: xxx
      mp:
        app-id: xxx
        app-secret: xxx
    
  3. 切换环境

    • 开发时:java -jar app.jar --spring.profiles.active=dev
    • 生产时:java -jar app.jar --spring.profiles.active=prod

4. 微信开发账号配置

这一章我们将详细介绍如何注册和配置微信开发账号。这些步骤看起来繁琐,但每一步都很重要,请耐心完成。

4.1 注册微信小程序

4.1.1 注册流程
  1. 访问注册页面

    • 打开 https://mp.weixin.qq.com/
    • 点击右上角"立即注册"
    • 选择"小程序"
  2. 填写账号信息

    • 邮箱:每个邮箱只能注册一个小程序
    • 密码:设置一个复杂的密码
    • 确认密码:再输入一次
    • 验证码:输入图片验证码
  3. 邮箱激活

    • 登录邮箱,查收激活邮件
    • 点击激活链接
  4. 信息登记

    • 选择主体类型:
      • 个人:最简单,适合学习和测试
      • 企业:需要营业执照,功能更全
    • 填写管理员信息:
      • 姓名
      • 身份证号
      • 手机号
    • 微信扫码验证
  5. 填写小程序信息

    • 小程序名称:想好再填,后期修改有限制
    • 小程序简介:简单介绍功能
    • 服务类目:选择合适的类目
4.1.2 获取开发凭证

注册成功后,获取开发需要的凭证:

  1. 登录小程序管理后台
  2. 左侧菜单:开发 → 开发管理 → 开发设置
  3. 找到"开发者ID"部分:
    • AppID(小程序ID):复制保存
    • AppSecret(小程序密钥):点击"生成"或"重置",复制保存

重要提醒:AppSecret只显示一次,一定要保存好!

4.1.3 配置服务器信息
  1. 在开发设置页面,找到"服务器域名"
  2. 点击"开始配置"或"修改"
  3. 填写域名(开发阶段可以先不填):
    • request合法域名:https://your-domain.com
    • socket合法域名:wss://your-domain.com
    • uploadFile合法域名:https://your-domain.com
    • downloadFile合法域名:https://your-domain.com

注意

  • 必须是HTTPS
  • 不能使用IP地址
  • 每月只能修改5次

4.2 注册微信公众号

4.2.1 选择公众号类型

微信公众号有三种类型:

  1. 订阅号

    • 个人和企业都可以注册
    • 每天可群发1条消息
    • 消息显示在订阅号文件夹中
  2. 服务号

    • 只有企业可以注册
    • 每月可群发4条消息
    • 消息直接显示在聊天列表
    • 支持高级接口(如支付)
  3. 企业号(已升级为企业微信)

建议:学习阶段注册订阅号即可

4.2.2 注册流程
  1. 访问注册页面

    • 打开 https://mp.weixin.qq.com/
    • 点击"立即注册"
    • 选择账号类型
  2. 基本信息

    • 邮箱:不能与小程序重复
    • 密码
    • 验证码
  3. 选择类型

    • 选择"订阅号"
    • 选择地区
  4. 信息登记

    • 选择主体类型(个人/企业)
    • 填写身份信息
    • 管理员微信扫码
  5. 公众号信息

    • 账号名称
    • 功能介绍
    • 运营地区
4.2.3 配置开发者模式

默认公众号是"编辑模式",我们需要切换到"开发者模式":

  1. 基本配置

    • 左侧菜单:设置与开发 → 基本配置
    • 找到"开发者ID":
      • AppID:复制保存
      • AppSecret:生成并保存
  2. 服务器配置

    • 在基本配置页面,找到"服务器配置"
    • 点击"修改配置":
      • URL:https://your-domain.com/api/wechat/mp/portal
      • Token:自定义一个字符串(如:mytoken123)
      • EncodingAESKey:随机生成
      • 消息加解密方式:明文模式(学习阶段)

注意:配置服务器URL前,需要先部署好验证接口,否则验证不通过。

4.3 获取开发凭证

让我们整理一下需要保存的所有凭证:

4.3.1 小程序凭证
# 保存到 application-dev.yml
wechat:
  miniapp:
    app-id: wx1234567890abcdef      # 你的小程序AppID
    app-secret: abcdef1234567890...  # 你的小程序AppSecret
4.3.2 公众号凭证
wechat:
  mp:
    app-id: wx0987654321fedcba      # 你的公众号AppID
    app-secret: fedcba0987654321...  # 你的公众号AppSecret
    token: mytoken123                # 你设置的Token
    aes-key: xxx...                  # 你的EncodingAESKey
4.3.3 测试号(推荐初学者使用)

如果你只是学习,可以使用测试号,功能齐全且无需审核:

  1. 小程序测试号

    • 打开 https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html
    • 微信扫码登录
    • 获取测试号的AppID和AppSecret
  2. 公众号测试号

    • 打开 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    • 微信扫码登录
    • 获取测试号的AppID和AppSecret

4.4 配置服务器信息

4.4.1 本地开发配置

开发阶段,我们的服务运行在本地(localhost),微信服务器无法访问。解决方案:

方案一:使用内网穿透工具

  1. 下载ngrok:https://ngrok.com/
  2. 运行命令:ngrok http 8080
  3. 获得临时域名:https://xxx.ngrok.io
  4. 在微信后台配置这个域名

方案二:使用测试号

  • 测试号没有域名限制
  • 可以直接用本地地址测试
4.4.2 生产环境配置

部署到生产环境需要:

  1. 购买云服务器

    • 阿里云、腾讯云、华为云等
    • 最低配置:1核2G即可
  2. 购买域名

    • 需要备案(约20天)
    • 建议买.com或.cn域名
  3. 配置HTTPS

    • 申请SSL证书(可以免费)
    • 配置到服务器
  4. 更新微信后台配置

    • 将域名配置到微信后台
    • 确保服务器可以正常访问

5. 数据库设计与实现

良好的数据库设计是项目成功的基础。这一章我们将设计一个简单但完整的数据库结构。

5.1 数据库设计原则

在设计数据库时,我们要遵循以下原则:

  1. 简单明了:表名和字段名要直观易懂
  2. 适度冗余:为了查询性能,可以适当冗余
  3. 考虑扩展:预留扩展字段
  4. 统一规范:命名规范要统一
5.1.1 命名规范
  • 表名:使用复数形式,如 usersorders
  • 字段名:使用下划线分隔,如 user_namecreate_time
  • 主键:统一使用 id
  • 时间字段:create_time(创建时间)、update_time(更新时间)
5.1.2 字段类型选择
  • ID:使用 BIGINT,支持很大的数据量
  • 字符串:短字符串用 VARCHAR,长文本用 TEXT
  • 时间:使用 DATETIME
  • 金额:使用 DECIMAL 或者 BIGINT(存储分)

5.2 用户表设计

用户表是最核心的表,我们需要存储微信用户信息和系统用户信息。

5.2.1 用户表SQL
-- 创建用户表
CREATE TABLE `users` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `open_id` varchar(50) NOT NULL COMMENT '微信OpenID',
  `union_id` varchar(50) DEFAULT NULL COMMENT '微信UnionID',
  `nick_name` varchar(50) DEFAULT NULL COMMENT '微信昵称',
  `avatar_url` varchar(500) DEFAULT NULL COMMENT '头像地址',
  `gender` tinyint DEFAULT '0' COMMENT '性别:0-未知,1-男,2-女',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机号',
  `real_name` varchar(20) DEFAULT NULL COMMENT '真实姓名',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-禁用,1-正常',
  `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型:0-普通用户,1-VIP用户',
  `balance` bigint NOT NULL DEFAULT '0' COMMENT '账户余额(分)',
  `points` int NOT NULL DEFAULT '0' COMMENT '积分',
  `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_open_id` (`open_id`),
  KEY `idx_union_id` (`union_id`),
  KEY `idx_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
5.2.2 字段说明

让我解释一下为什么这样设计:

  1. open_id和union_id

    • open_id:用户在小程序或公众号中的唯一标识
    • union_id:如果你有多个应用,用户在所有应用中的统一标识
  2. 余额存储为分

    • 避免浮点数精度问题
    • 100分 = 1元
  3. 索引设计

    • open_id设置唯一索引,提高查询效率
    • phone设置普通索引,支持手机号查询

5.3 业务表设计

除了用户表,我们还需要设计一些业务表。这里以商品和订单为例。

5.3.1 商品表
-- 商品表
CREATE TABLE `products` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `name` varchar(100) NOT NULL COMMENT '商品名称',
  `description` text COMMENT '商品描述',
  `price` bigint NOT NULL COMMENT '价格(分)',
  `stock` int NOT NULL DEFAULT '0' COMMENT '库存',
  `category_id` bigint DEFAULT NULL COMMENT '分类ID',
  `main_image` varchar(500) DEFAULT NULL COMMENT '主图',
  `images` text COMMENT '商品图片(JSON数组)',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-下架,1-上架',
  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_category` (`category_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
5.3.2 订单表
-- 订单表
CREATE TABLE `orders` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `order_no` varchar(32) NOT NULL COMMENT '订单号',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `total_amount` bigint NOT NULL COMMENT '订单总金额(分)',
  `pay_amount` bigint DEFAULT NULL COMMENT '实付金额(分)',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '订单状态:0-待付款,1-已付款,2-已发货,3-已完成,4-已取消',
  `pay_type` tinyint DEFAULT NULL COMMENT '支付方式:1-微信支付,2-余额支付',
  `pay_time` datetime DEFAULT NULL COMMENT '支付时间',
  `transaction_id` varchar(50) DEFAULT NULL COMMENT '微信支付订单号',
  `remark` varchar(200) DEFAULT NULL COMMENT '订单备注',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_no` (`order_no`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_status`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值