最近我把一套宠物用品销售小程序的源码完整过了一遍,后端用的是Spring Boot,前端是微信原生小程序,整体跑下来最大感受是:它不只是一个简单的增删改查demo,而是把微信登录、商品SKU、购物车、订单状态流转、支付回调、后台管理这些商城必备链路都串起来了。这篇就把整套项目的选型逻辑、核心代码思路、跑通部署时的坑,结合源码工程里实际用到的技术点完整梳理一遍。无论是准备做校园项目、积累全栈经验,还是真打算做宠物类目小程序的运营者,这套东西的参考价值都比想象中大。
1. 项目整体设计与技术选型思路
1.1 为什么是Spring Boot + 微信小程序这套组合
宠物用品销售这个场景有个特点:用户决策链路短、复购率高、需要快速触达。选微信小程序当客户端,核心原因是用户不用装App,扫一扫或者从聊天记录里点一下就能进店。搭配“附近的小程序”这类微信生态流量入口,对中小型宠物用品商家来说获客成本会低很多。小程序端我建议用原生开发,不要一上来就套Uniapp或者Taro,原因后面实操部分会说。
服务端用Spring Boot在这个项目里几乎是“标准答案”。按源码里的依赖来看,Spring Boot负责提供RESTful接口,内置Tomcat省去单独配服务器的步骤;持久层用的MyBatis-Plus,单表CRUD基本不用手写SQL,可以把主要精力放在订单、库存这些核心业务上。这种组合的另一个好处是资料极其丰富——你遇到的90%问题,搜一下“Spring Boot + 微信小程序”基本都有现成方案,对新手特别友好。
1.2 核心业务模块与数据流
整套系统拆开看,可以分成三个端:用户端小程序、商家管理后台、Spring Boot服务端。源码工程里一般对应三个子项目或者同项目多个module。
用户端核心流程是:用户打开小程序 -> 微信授权登录 -> 浏览首页轮播和分类 -> 进入商品详情 -> 加入购物车 -> 提交订单 -> 微信支付 -> 查看订单状态。管理后台负责商品上架、分类管理、订单发货、轮播图配置这些运营操作。
这里最需要注意的是数据流的方向:小程序不直接连数据库,所有操作都走后端接口。举个例子,用户在小程序里点击“加入购物车”,前端只是把 goodsId、count、token 通过POST请求发到 /api/cart/add,后端校验登录态后才会真正操作购物车表。这种前后端分离的设计让业务逻辑集中在服务端,小程序端只做展示和交互,后续如果要增加App或者H5商城,后端接口可以直接复用。
1.3 源码工程目录结构说明
拿到源码后先别急着点运行,把目录结构摸清楚再动手。常见结构如下:
text复制pet-shop-server
├── src/main/java/com/petshop
│ ├── controller # 接口层,接收前端请求
│ ├── service # 业务逻辑层
│ ├── mapper # MyBatis-Plus数据访问层
│ ├── entity # 数据库实体类
│ ├── common # 公共返回体、异常处理、工具类
│ ├── config # 配置类(拦截器、静态资源映射)
│ └── PetShopApplication.java
├── src/main/resources
│ ├── application.yml # 数据源、Redis、微信配置
│ └── mapper # XML文件(复杂SQL场景才需要)
└── sql
└── pet_shop.sql # 数据库初始化脚本
小程序端目录:
text复制pet-shop-miniapp
├── pages
│ ├── index # 首页
│ ├── category # 分类
│ ├── goods # 商品详情
│ ├── cart # 购物车
│ ├── order # 订单确认/列表
│ ├── user # 个人中心
│ └── login # 登录页
├── utils
│ └── request.js # 封装wx.request,统一处理token
├── app.js # 全局逻辑,启动时检查登录态
└── app.json # 页面路由和tabBar配置
这种目录划分是国内大部分中小型项目的标准形态,看懂了它,以后看其他开源项目也能很快上手。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心细节解析:几个必须搞懂的关键实现
2.1 微信登录与会话管理
登录是整套系统最容易被忽略但坑最多的环节。很多新手会直接调 wx.getUserProfile 拿用户头像昵称,然后拿这些信息当登录凭证——这是错的。微信官方推荐的方式是 wx.login 获取临时code,再把code发给后端,由后端调微信的 code2Session 接口换取 openid 和 session_key。openid是用户在你这套小程序体系里的唯一身份标识,后端只要存这个openid就能识别用户。
源码里登录接口的处理逻辑大致是:
java复制@PostMapping("/api/user/login")
public Result login(@RequestBody LoginRequ
