当前位置: 首页 > news >正文

JAVA源码单商户PC源码小程序公众号APP源码的后端代码示例

我为您提供一个完整的Java单商户全渠道商城后端示例(支持PC/小程序/公众号/APP),采用Spring Boot + MyBatis-Plus + Redis架构。

📁 项目结构

shop-backend/ ├── src/main/java/com/shop/ │ ├── config/ # 配置类 │ ├── controller/ # 控制器(多端接口) │ ├── service/ # 业务逻辑 │ ├── mapper/ # 数据访问 │ ├── entity/ # 实体类 │ ├── dto/ # 数据传输对象 │ ├── vo/ # 视图对象 │ ├── enums/ # 枚举类 │ ├── exception/ # 异常处理 │ └── utils/ # 工具类 ├── src/main/resources/ │ ├── mapper/ # XML映射文件 │ └── application.yml # 配置文件 └── pom.xml

🔧 核心依赖 (pom.xml)

xml

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson2</artifactId> <version>2.0.40</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> <version>4.5.0</version> </dependency> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.38.0.ALL</version> </dependency> </dependencies>

📋 核心代码示例

1. 商品实体与控制器

java

// Entity/Goods.java @Data @TableName("goods") public class Goods { @TableId(type = IdType.AUTO) private Long id; private String name; private BigDecimal price; private Integer stock; private String images; // JSON数组 private Integer status; // 1上架 0下架 private Long categoryId; private String description; private LocalDateTime createTime; } // Controller/GoodsController.java @RestController @RequestMapping("/api") @CrossOrigin // 支持多端跨域 public class GoodsController { @Autowired private GoodsService goodsService; // PC端:商品列表 @GetMapping("/pc/goods/list") public R<PageResult<GoodsVO>> pcGoodsList( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size, @RequestParam(required = false) Long categoryId) { return R.ok(goodsService.getGoodsList(page, size, categoryId)); } // 小程序/公众号:商品详情 @GetMapping("/miniapp/goods/{id}") public R<GoodsDetailVO> miniappGoodsDetail(@PathVariable Long id) { return R.ok(goodsService.getGoodsDetail(id)); } // APP端:推荐商品 @GetMapping("/app/goods/recommend") public R<List<GoodsVO>> appRecommendGoods() { return R.ok(goodsService.getRecommendGoods()); } // 后台管理:商品CRUD @PostMapping("/admin/goods") @PreAuthorize("hasRole('ADMIN')") public R<Void> adminAddGoods(@RequestBody GoodsDTO dto) { goodsService.addGoods(dto); return R.ok(); } }

2. 订单服务(核心业务)

java

// Service/OrderService.java @Service public class OrderService { @Autowired private OrderMapper orderMapper; @Autowired private GoodsMapper goodsMapper; @Autowired private RedisTemplate<String, Object> redisTemplate; @Transactional(rollbackFor = Exception.class) public OrderVO createOrder(CreateOrderDTO dto, String userId) { // 1. 校验库存(Redis预减库存) String stockKey = "stock:goods:" + dto.getGoodsId(); Long stock = redisTemplate.opsForValue().decrement(stockKey); if (stock < 0) { throw new BusinessException("库存不足"); } // 2. 创建订单 Order order = new Order(); order.setOrderNo(generateOrderNo()); order.setUserId(userId); order.setTotalAmount(calculateTotal(dto.getItems())); order.setStatus(OrderStatus.UNPAID.getCode()); order.setPayType(dto.getPayType()); // WX_MINI/WX_PUBLIC/ALIPAY orderMapper.insert(order); // 3. 扣减真实库存 goodsMapper.decreaseStock(dto.getGoodsId(), dto.getQuantity()); return convertToVO(order); } // 微信小程序支付 public WxPayMpOrderResult wxMiniPay(String orderNo, String openId) { WxPayMpOrderRequest request = new WxPayMpOrderRequest(); request.setBody("商品购买"); request.setOutTradeNo(orderNo); request.setTotalFee(order.getTotalAmount().multiply(new BigDecimal(100)).intValue()); request.setSpbillCreateIp("127.0.0.1"); request.setNotifyUrl("https://yourdomain.com/api/pay/notify/wx"); request.setTradeType("JSAPI"); request.setOpenid(openId); try { return wxPayService.createOrder(request); } catch (WxPayException e) { throw new BusinessException("支付创建失败"); } } }

3. 统一支付回调

java

// Controller/PayController.java @RestController @RequestMapping("/api/pay") public class PayController { // 微信支付回调(小程序/公众号共用) @PostMapping("/notify/wx") public String wxPayNotify(@RequestBody String xmlData) { try { WxPayOrderNotifyResult result = wxPayService.parseOrderNotifyResult(xmlData); String orderNo = result.getOutTradeNo(); // 更新订单状态 orderService.paySuccess(orderNo); return WxPayNotifyResponse.success("处理成功"); } catch (Exception e) { return WxPayNotifyResponse.fail("处理失败"); } } // 支付宝回调(APP端) @PostMapping("/notify/alipay") public String alipayNotify(HttpServletRequest request) { Map<String, String> params = AlipaySignature.getRequestCheckContentV1(request); if (AlipaySignature.rsa256CheckContent(params, ALIPAY_PUBLIC_KEY, "UTF-8", "RSA2")) { String orderNo = params.get("out_trade_no"); orderService.paySuccess(orderNo); return "success"; } return "failure"; } }

4. 用户体系(多端统一)

java

// Entity/User.java @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String unionId; // 微信unionId private String openId; // 微信openId private String phone; private String nickname; private String avatar; private Integer platform; // 1-小程序 2-公众号 3-APP 4-PC private LocalDateTime registerTime; } // Service/UserService.java @Service public class UserService { // 微信小程序登录 public LoginVO wxMiniLogin(String code) { // 1. 通过code获取openId WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); String unionId = session.getUnionid(); // 2. 查找或创建用户 User user = userMapper.selectOne( new LambdaQueryWrapper<User>().eq(User::getOpenId, openId) ); if (user == null) { user = new User(); user.setOpenId(openId); user.setUnionId(unionId); user.setPlatform(1); // 小程序 userMapper.insert(user); } // 3. 生成JWT token String token = JwtUtil.generateToken(user.getId()); return new LoginVO(token, user.getNickname(), user.getAvatar()); } }

5. 配置文件示例

yaml

# application.yml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver redis: host: localhost port: 6379 database: 0 # 微信小程序配置 wx: miniapp: appid: your_appid secret: your_secret mp: appid: your_mp_appid secret: your_mp_secret # 支付宝配置 alipay: appid: your_alipay_appid privateKey: your_private_key publicKey: alipay_public_key notifyUrl: https://yourdomain.com/api/pay/notify/alipay

🔐 统一响应格式

java

@Data public class R<T> { private Integer code; private String message; private T data; public static <T> R<T> ok(T data) { R<T> r = new R<>(); r.setCode(200); r.setMessage("success"); r.setData(data); return r; } public static <T> R<T> fail(String msg) { R<T> r = new R<>(); r.setCode(500); r.setMessage(msg); return r; } }

📱 多端接口汇总

端类型基础路径特点
PC端/api/pc/*完整商品列表、购物车、订单管理
小程序/api/miniapp/*微信登录、微信支付、模板消息
公众号/api/mp/*OAuth2登录、网页授权、支付
APP端/api/app/*手机号登录、支付宝支付、推送
管理后台/api/admin/*商品/订单/用户管理(需权限)

🚀 快速启动

bash

# 1. 创建数据库 CREATE DATABASE shop DEFAULT CHARACTER SET utf8mb4; # 2. 导入SQL(resources/sql/init.sql) # 3. 修改配置文件中的数据库和微信/支付宝配置 # 4. 启动 mvn spring-boot:run

这个示例包含了商品管理、订单流程、多端支付、用户体系等核心功能,可直接作为单商户全渠道商城的后端基础。需要具体模块(如秒杀、优惠券、分销等)可进一步扩展。

http://www.jsqmd.com/news/809803/

相关文章:

  • 2026年亲测:从85%降到10%,保姆级论文降AI率去AI痕迹教程 - 降AI实验室
  • 如何构建完整的下一代测序实验室信息管理系统:MISO开源LIMS深度解析
  • 2026年天津洛阳柴火鸡汤加盟与土鸡汤馆选址完全指南|玖味时光楠溪王捌鸡官方联系电话 - 企业名录优选推荐
  • 面试官追问AUC和F1-Score区别?从推荐系统实战案例看指标选择与陷阱
  • 2026年青岛企业全场景营销与AI精准获客完全指南:从短视频代运营到GEO推广的降本增效闭环 - 年度推荐企业名录
  • 白话解读DSI3:从单线通信到多设备管理的核心机制
  • 如何打造工业级STM32温控系统:从零到精密的实战指南
  • 福州港文机械设备租赁:福州叉车租赁哪家好 - LYL仔仔
  • 告别数据错乱!STM32H743串口DMA接收的Cache一致性终极处理方案
  • 鞍山黄金回收公司选择指南 拆解专业回收技术细节 - 奔跑123
  • 别再只用外部中断了!STM32F4 HAL库驱动EC11编码器的三种实用方法(附代码对比)
  • Codeforces Round 1054 (Div. 3) E题
  • 2026年开封洛阳柴火鸡特色餐饮深度横评与选购指南 - 企业名录优选推荐
  • 2026年贵州柴火鸡特色餐饮选购指南:楠溪王捌鸡与行业竞品深度横评 - 企业名录优选推荐
  • 雨量监测站:实现降雨量实时精准计量
  • 张家口黄金回收哪家靠谱?金裕恒 / 盛誉轩 / 金成瑞连锁实测,无套路 - 润富黄金珠宝行
  • 在自动化Agent工作流中集成Taotoken实现多模型决策与调用
  • JPEGView:Windows上最轻量高效的图像查看与编辑解决方案
  • 2026年内墙仿石漆经销商靠谱吗:行业选型标准与主流品牌实力解析 - 产业观察网
  • 山东千宝再生资源:烟台工业原料回收企业哪个好 - LYL仔仔
  • 沧州卢辉再生物资回收:沧州光伏板回收生产厂家 - LYL仔仔
  • 当PID不够‘刚’时:用Simulink快速上手滑模控制(SMC)来搞定你的电机/机械臂模型
  • 2026年青岛广告投流与短视频代运营深度横评:极迅传媒如何破局企业获客困局 - 年度推荐企业名录
  • 2026年青岛广告投流与GEO推广一体化营销服务深度横评:如何精准获客 - 年度推荐企业名录
  • Information Fusion系统投稿流程
  • 2026年CRM厂商全景解析:五大通用型与工业版产品差异对比 - jfjfkk-
  • 手把手教你用C语言在粤嵌GEC6818开发板上显示任意BMP图片(附完整代码)
  • 2026最新工商注册公司排行:5家合规机构核心服务能力实测 - 奔跑123
  • 上海2026年柴火鸡土菜馆选购指南:从预制菜困局到原生态烟火气的突围之路 - 企业名录优选推荐
  • 联塑家装管属于什么档次,用过硬产品力解答管道品牌怎么选 - 极速运营