微信商城小程序源码最新版|全开源UniApp完整包|前后端快速搭建商城

本文涉及的产品
PolarSearch,搜索节点 4核8GB
PolarDB Agent Flow,2核4GB
PolarDB Agent Express,2核4GB
简介: 这是一套基于UniApp(前端)+ SpringBoot(后端)的全开源微信商城小程序源码,无加密、可商用。涵盖商品管理、订单系统、微信支付、分销裂变、多商户入驻等完整电商功能,支持H5/小程序/APP多端编译。源码结构清晰,含前后端及后台管理系统,附详细部署指南与二次开发建议。

本文拆解的这套微信商城小程序源码,基于UniApp + SpringBoot前后端分离架构,,全开源无加密,覆盖商品管理、订单系统、支付对接、分销裂变、多商户入驻等完整电商能力。

源码:xcxyms.top

一、为什么选 UniApp 做商城小程序:一张图讲清底层逻辑

在众多小程序开发方案里(原生微信小程序、Taro、Remax、kbone…),UniApp + Vue 的组合之所以成为商城类项目的"事实主流",核心原因就三点:

维度 UniApp 的优势 对商城项目的意义
跨端编译 一套代码 → 微信小程序 / H5 / App / 支付宝小程序 / 钉钉… 商城天然有多端分发需求(公众号H5 + 小程序 + 未来App)
生态成熟度 基于 Vue 语法 + 微信小程序 API 映射,插件市场有大量现成组件(SKU面板、地址选择器、海报生成、虚拟列表) 商城页面复杂度高(商品详情SKU联动、购物车持久化、订单流),现成轮子=工期压缩
前后端解耦 UniApp 端只负责视图层 + 状态管理,通过 REST/GraphQL 调后端 API 商城真正的复杂度在后端:库存扣减、订单状态机、分布式锁、支付对账——前端不该碰这些

所以你拿到的"全开源 UniApp 商城完整包",本质上应该由 三大件 组成:

┌──────────────────┐
│          ① 后端服务(API Server)                  │
│  ThinkPHP 6 / SpringBoot / Node.js + MySQL + Redis  │
│  → 商品、订单、用户、支付、营销、权限              │
└──────────────────┘
                         ↕ REST/HTTPS
┌──────────────────┐
│          ② UniApp 前端(小程序端)                   │
│  pages/ 首页 分类 详情 购物车 订单 我的…            │
│  stores(Pinia/Vuex) + services(api封装)             │
└──────────────────┘
                         ↕ 编译
┌──────────────────┐
│          ③ 后台管理系统(Admin SPA)                 │
│  Vue + Element-UI / Element Plus                     │
│  → 商品上下架、订单发货、营销配置、数据看板         │
└──────────────────┘

7.png

二、源码目录结构拆解——看懂骨架,搭建才不会迷路

以主流的 UniApp + Vue3(或 Vue2)+ 后端 PHP/Java 前后端分离架构 为例,拿到源码包后你会看到类似这样的结构:

2.1 UniApp 前端目录(核心)

uni-mall/
├── pages/                  # 主包页面
│   ├── index/              # 首页(轮播 + 推荐 + 秒杀楼层)
│   ├── category/           # 分类页(多级分类树 + 筛选)
│   ├── goods/              # 商品详情(SKU选择 + 图文详情 + 收藏)
│   ├── cart/               # 购物车(本地+服务端双写)
│   ├── order/              # 订单流(确认订单 → 提交 → 支付 → 结果页)
│   ├── user/               # 个人中心(订单列表/售后/地址)
│   └── login/              # 登录(微信一键 / 手机号)
├── components/             # 全局组件
│   ├── sku-panel/          # SKU弹窗(规格联动核心)
│   ├── address-picker/     # 省市区四级联动
│   └── countdown/           # 秒杀倒计时
├── stores/                 # 状态管理
│   ├── cart.js             # 购物车 Store(Pinia 或 Vuex)
│   └── user.js             # 用户信息 & token
├── services/               # API 请求层
│   ├── goods.js            # 商品相关接口
│   ├── order.js            # 订单相关接口
│   └── user.js             # 登录/地址/收藏
├── utils/
│   ├── request.js          # axios/wx.request 封装(拦截器 + token注入 + 错误处理)
│   └── auth.js             # 登录态检测 & 静默登录
├── static/                 # 静态资源
├── config.js               # ★ 环境配置(apiUrl 填这里)
├── manifest.json           # AppID 配置(微信小程序)
├── pages.json              # 路由 + tabBar 配置
└── package.json

2.2 后端目录(以 ThinkPHP 6 / 经典 MVC 为例)

platform-api/
├── app/
│   ├── controller/
│   │   ├── api/            # 对外API(小程序调用的接口)
│   │   │   ├── Goods.php
│   │   │   ├── Order.php
│   │   │   ├── Pay.php
│   │   │   └── User.php
│   │   └── admin/          # 后台控制器
│   ├── model/              # ORM模型(Goods / Order / User...)
│   ├── service/             # 业务逻辑层(★ 核心:订单创建事务、库存扣减)
│   └── common/              # 工具(签名、加密、微信支付SDK)
├── config/                 # database.php / cache.php / 微信配置
├── public/                 # web入口(入口在 public/index.php)
├── runtime/                # 运行时(需写权限)
└── .env                    # 环境变量

读源码的第一准则:先找 config.js(前端)和 .env / config/database.php(后端)——这两个文件决定了你的源码能不能"活过来"。


6.jpg

三、环境准备清单(别跳过,80%的搭建失败都是环境不对)

3.1 前端侧(UniApp 编译环境)

工具 版本推荐 用途
HBuilderX 3.8+ UniApp 官方 IDE,编译/发行一键完成
Node.js 16.x LTS(推荐 18.x) 若你用 CLI 方式或 Vue3+Vite 分支
微信开发者工具 最新 stable 真机预览 + 上传审核
npm / pnpm pnpm 推荐 依赖安装

微信开发者工具安装后,必须打开「服务端口」:设置 → 安全 → 服务端口 → 开启。否则 HBuilderX 无法启动到小程序模拟器。

3.2 后端侧(以 LNMP / 宝塔 路线最常用)

PHP ≥ 7.4(推荐 8.0–8.2)  或   Java 8/11/17 + Maven
MySQL 5.7+  /  8.0
Redis 4.0+
Nginx 1.20+

PHP 必开扩展(缺一个就可能白屏):curlpdo_mysqlmbstringopensslfileinfo


四、逐步搭建:从"源码包"到"小程序跑通"

下面给你一条通用流程,覆盖市面上绝大多数 UniApp 商城开源包(不管是 PHP 系还是 Java 系,思路完全一致,只是第二步换命令)。

Step 1:后端先跑起来(API 必须可达)

A. 宝塔/PHP路线(最常见)

8.jpg

  1. 宝塔 → 网站 → 添加站点,域名填你准备的 API 域名(如 api.xxx.com
  2. 把后端代码上传到站点目录,确保 web 根目录指向 public/(不是根目录本身,否则配置泄露)
  3. 建数据库 → 导入 _sql/platform.sql(或源码包里的 install.sql)
  4. 改配置文件:
// .env 或 config/database.php 里
DB_HOST=127.0.0.1
DB_DATABASE=mall_db
DB_USERNAME=mall_user
DB_PASSWORD=your_pwd

// Redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=

// 微信配置(先占位,后面再填真实商户号)
WECHAT_APPID=你的小程序AppID
WECHAT_SECRET=你的小程序Secret
WECHAT_MCH_ID=
WECHAT_KEY=
  1. 给 runtime 目录写权限:
chown -R www:www /www/wwwroot/api.xxx.com/
chmod -R 755 /www/wwwroot/api.xxx.com/
  1. 访问 https://api.xxx.com/api/goods/list?page=1&limit=10,确认接口能返回 JSON。

B. SpringBoot 路线简述(如 youlai-mall 系)

# MySQL/Redis/Nacos 先跑起来
# 导入 document/sql/*.sql
# Nacos 里改 mysql & redis 连接
# IDEA → 依次启动:nacos → youlai-gateway → youlai-auth → mall-pms/oms/ums

访问 http://localhost:9999/doc.html 看 Swagger,接口通了再做前端。


Step 2:HBuilderX 导入 UniApp 前端 & 改 config.js

打开 HBuilderX → 文件 → 导入 → 从本地目录导入,选中 uni-mall/ 目录。

找到 config.js(有的项目在根目录,有的在 utils/config.js):

// config.js 示例
export default {
   
  // ★ 填你后端公网地址,结尾不要带斜杠
  apiUrl: 'https://api.xxx.com',
  // 小程序端 timeout
  timeout: 15000,
  // 存储键名
  tokenKey: 'uni_token',
}

关键检查项

  • apiUrl 必须是 https://(微信小程序强制 HTTPS,本地 127 调试除外)
  • 如果后端在开发阶段还没上 HTTPS,可以用微信开发者工具 → 详情 → 本地设置 → 不校验合法域名(仅开发阶段)

9.jpg

Step 3:绑 AppID + 跑起来

  1. manifest.json微信小程序配置 → 填你的小程序 AppID(在 https://mp.weixin.qq.com 注册并拿到)
  2. HBuilderX → 运行 → 运行到小程序模拟器 → 微信开发者工具
  3. 开发者工具里能看到首页 → 说明前端 ↔ 后端已经接通

Step 4:微信登录 & 支付对接(核心难点)

微信登录(小程序端最小流程)

// utils/auth.js
export function wxLogin() {
   
  return new Promise((resolve, reject) => {
   
    wx.login({
   
      success(res) {
   
        // res.code → 发给后端
        // 后端用 code + appid + secret → 调微信接口换 openid/session_key
        // 后端生成你自己的 JWT token → 返回给前端存进去
        resolve(res.code)
      },
      fail: reject
    })
  })
}

前端拿到后端返回的 token 后存 uni.setStorageSync('token', token),之后的所有请求在 request.js 拦截器里带上:

// utils/request.js
const baseURL = 'https://api.xxx.com'
export function request(options) {
   
  const token = uni.getStorageSync('token')
  return new Promise((resolve, reject) => {
   
    wx.request({
   
      url: baseURL + options.url,
      method: options.method || 'GET',
      data: options.data,
      header: {
   
        'Authorization': token ? `Bearer ${
     token}` : '',
        'Content-Type': 'application/json'
      },
      success(res) {
   
        if (res.statusCode === 401) {
   
          // token过期 → 触发重新登录
          return
        }
        resolve(res.data)
      },
      fail: reject
    })
  })
}

微信支付(下单闭环)

支付的关键不是"调起",而是后端生成 prepay_id 并签名返回,前端拿参数调 wx.requestPayment

// 提交订单成功后
wx.requestPayment({
   
  timeStamp: payData.timeStamp,
  nonceStr: payData.nonceStr,
  package: payData.package,       // 形如 prepay_id=xxx
  signType: 'RSA',                // 或 MD5,看微信支付V2/V3
  paySign: payData.paySign,
  success() {
   
    uni.navigateTo({
    url: '/pages/order/result?status=success' })
  }
})

⚠️ 后端回调地址 notify_url 必须是公网 HTTPS 可达的,且验签失败时绝对不能落盘成功状态——这是支付安全的生死线。


五、数据库核心表设计(理解这个,二次开发就通了一半)

商城的灵魂不在页面,在数据模型。下面是核心表的最小集合:

-- 商品
goods (id, spu_name, price, stock, category_id, album_json, detail_html, status)

-- SKU(多规格商品的核心)
goods_sku (id, goods_id, sku_json, price, stock, sku_code)

-- 购物车(支持游客临时cart + 登录后merge)
cart (id, user_id/null, sku_id, quantity, checked)

-- 订单
orders (
  id, order_no, user_id, total_amount, pay_amount,
  status,           -- 0待付 1已付 2发货 3完成 4关闭
  address_snapshot_json,
  created_at
)

-- 订单明细
order_items (id, order_id, sku_id, qty, price_unit)

-- 用户
users (id, openid, nickname, avatar, phone)

二次开发时的第一刀,通常切在 goods_sku.stock 的扣减策略上:

  • 方案A(简单):下单时直接 UPDATE sku SET stock = stock - qty WHERE stock >= qty。适合小规模。
  • 方案B(生产):Redis 预扣库存 + 数据库最终一致 + 订单超时自动回滚。高并发必走这条。

六、性能优化:别让商城"能跑"就行

6.1 UniApp 分包加载(防止主包超限 2MB)

// pages.json
{
   
  "subPackages": [
    {
   
      "root": "pages-sub/order",
      "pages": ["list", "detail", "result"]
    }
  ],
  "preloadRule": {
   
    "pages/index/index": {
   
      "packages": []
    }
  }
}

6.2 后端缓存策略

商品详情页:Redis KV 缓存(TTL 300s,后台编辑商品时主动 del)
首页楼层:预生成 JSON 快照存 Redis,避免每次实时 JOIN
用户会话:Redis / JWT 无状态(推荐 JWT + 短期有效 + refresh机制)

6.3 图片资源

所有商品图走对象存储(COS / OSS / MinIO),别直接放服务器磁盘。CDN + WebP 自适应能让首屏加载差出一个量级。


七、上线前的安全加固清单

☑  config.js 里的 apiUrl 必须是 HTTPS
☑  后端 .env 文件不能在 web 可访问目录(PHP项目尤其注意)
☑  支付 notify_url 做签名校验 + 幂等(同一 transaction_id 不重复入账)
☑  订单金额后端二次计算,不能相信前端传来的 pay_amount
☑  后台管理端改默认路径(别留 /admin 裸奔)
☑  SQL 入参用 ORM 预编译 / PreparedStatement(防注入)
☑  微信 secret / 商户 key 不要硬编码在前端
☑  小程序 request 合法域名列表在公众平台配置白名单

八、常见"搭不起来"的排错路线图

10.jpg

症状 优先排查
HBuilderX 运行后白屏 manifest.json 的 AppID 是否为空;config.js 的 apiUrl 是否填错
接口报 404 后端入口是否在 public/,Nginx try_files 规则是否正确
微信登录 code→openid 失败 appid/secret 填反了?用的是测试号而非正式号?
支付能调起但 notify 不回调 notify_url 是否内网?是否 HTTPS?防火墙 443 开了没?
上传小程序提示"包过大" 没做分包;static 里塞了原图 → 移出去走 CDN

如果你愿意,下一步我可以按你手头具体源码的技术栈(比如是 ThinkPHP6 系 / SpringBoot 系 / Node系?前端是 Vue2 还是 Vue3+Pinia?)给你做精确到文件级的二次开发路线图——包括 SKU 引擎重写、库存预扣 Lua 脚本、订单状态机流转表和支付对账 Cron 的完整代码骨架。只要贴出你源码的根目录截图或 package.json / composer.json 即可。

相关文章
|
4天前
|
数据采集 数据可视化 数据挖掘
表格魔法师:QoderWork CN 让脏数据秒变仪表盘
本文介绍如何使用阿里QoderWork CN桌面应用,通过内置xlsx技能自动化完成Excel数据清洗(统一日期格式、补全空值、去重等)与可视化(生成含仪表盘、日志、交互表格及图表的HTML报告),提升数据分析效率。
246 8
|
5月前
|
Ubuntu Linux 数据库
Linux 环境 Docker 安装 Polardb-X 数据库 容器 教程
本文介绍如何通过 Docker 快速部署 Polardb-X 数据库容器,实现一键启动。涵盖镜像拉取、容器运行、登录验证等步骤,操作简便,适用于快速开发与测试环境。附往期7篇主流系统安装教程。
1085 5
|
11月前
|
JSON 安全 数据挖掘
全开源在线客服系统源码搭建指南|uniapp网页在线客服系统源码PHP
随着互联网发展,在线客服系统成为企业提升服务效率、优化用户体验的重要工具。通过开源客服系统源码,企业可节省开发成本,快速部署高效客服平台。本文介绍其功能、优势及开发应用,助力企业智能化转型。
|
JavaScript
如何解决ElementUI中的el-tab-pane组件使用v-show不生效的问题?
如何解决ElementUI中的el-tab-pane组件使用v-show不生效的问题?
1543 3
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
948 0
|
存储 缓存 NoSQL
希音面试:亿级用户 日活 月活,如何统计?(史上最强 HyperLogLog 解读)
本文详细介绍了如何使用Redis的各种数据结构(如Set、Bitmap、HyperLogLog)来统计网站的日活(DAU)和月活(MAU)用户数。作者通过实际案例和代码示例,系统地讲解了这些数据结构的原理和应用场景,特别是HyperLogLog在处理亿级用户数据时的优势。文章还深入解析了HyperLogLog的数学原理和底层数据结构,帮助读者更好地理解和应用这一高效的数据统计工具。此外,文章还提供了多个相关面试题和参考资料,适合准备面试的技术人员阅读。
|
存储 前端开发 NoSQL
如何优雅地实现在线人数统计功能:技术干货分享
在现代Web开发中,实时在线人数统计是一个常见且重要的功能,它不仅提升了用户体验,还能为网站运营者提供宝贵的数据支持。今天,我们将深入探讨如何优雅地实现这一功能,结合前端展示、后端处理及数据存储等多个方面,为您呈现一套完整的技术解决方案。
1979 5
|
缓存 安全 Java
Form表单提交方式比较与优化策略
Form表单提交方式比较与优化策略
|
存储 监控 NoSQL
|
移动开发 小程序 API
uniapp中uview组件库的NoticeBar 滚动通知 使用方法
uniapp中uview组件库的NoticeBar 滚动通知 使用方法
1035 1

热门文章

最新文章