微信小程序实战:从零搭建一个VIP会员管理系统(附完整代码)

zheng头像
zheng 2026-07-14 15:41
楼主

## 为什么做这个小程序?

相信很多做实体店、工作室、或者搞会员制社群的朋友都有这个痛点:会员多了,谁充了多少钱、还剩多少余额,光靠脑子记或 Excel 根本管不过来。

正好我最近在研究微信小程序开发,就动手做了一个 **VIP会员管理系统**。顾客扫码就能绑定会员,充值和消费自动记录,还能一键给客户发通知。趁小程序备案的空档,我把整个开发过程写下来,给有需要的朋友参考。

## 小程序长什么样?

**核心功能一览:**

- 会员列表,支持搜索和排序
- 一键充值/消费,余额实时更新
- 完整交易流水,按类型筛选
- 统计分析:总充值、总消费、会员排名
- 顾客扫码绑定,支持微信通知
- 网页管理后台,电脑端也能操作
- 暗色主题,简洁专业

> 由于小程序还在备案中,暂时无法搜索体验。备案通过后会更新小程序码。

## 技术架构

整个项目分三部分:

| 层级 | 技术 | 说明 |
|------|------|------|
| 小程序前端 | 微信原生开发(WXML + WXSS + JS) | 5 个页面 + 自定义 TabBar |
| 后端 API | PHP | 单文件 API,部署在任意 PHP 服务器 |
| 管理后台 | HTML + JS(单页面) | 电脑端操作,数据与小程序互通 |

架构非常简单:小程序和网页后台通过同一个 PHP API 读写 JSON 数据文件,无需数据库。

```
微信小程序 ──→ PHP API ──→ JSON 数据文件
网页后台 ──→ PHP API ──→ JSON 数据文件
```

## 一、后端 API 设计

后端只有一个 PHP 文件,通过 `?action=xxx` 区分不同操作。

### 核心 API 列表

| action | 方法 | 说明 |
|--------|------|------|
| login | POST | 微信登录,code 换 openid |
| status | GET | 获取账户状态 |
| members | GET | 获取会员列表 |
| add_member | POST | 新增会员 |
| edit_member | POST | 编辑会员信息 |
| delete_member | POST | 删除会员 |
| recharge | POST | 会员充值 |
| consume | POST | 会员消费 |
| transactions | GET | 获取交易记录 |
| get_bind_code | GET | 获取绑定码(网页端) |
| bind_code | POST | 输入绑定码绑定 |
| invite_bind | POST | 邀请链接绑定 |
| unbind | POST | 解除微信绑定 |

### 登录流程

```php
// 微信登录:code 换取 openid
if ($action === 'login') {
$code = $input['code'] ?? '';
$wxUrl = "https://api.weixin.qq.com/sns/jscode2session?" .
"appid={$wxAppId}&secret={$wxSecret}&js_code=" .
urlencode($code) . "&grant_type=authorization_code";

$wxResponse = file_get_contents($wxUrl);
$wxData = json_decode($wxResponse, true);
$openid = $wxData['openid'];

echo json_encode(['openid' => $openid]);
}
```

微信小程序端调用 `wx.login()` 获取临时 code,后端用 code 向微信服务器换取唯一标识 openid。后续所有操作都带上 openid,实现数据隔离。

### 数据存储

数据以 JSON 文件存储,每个用户一个文件:

```json
{
"members": [
{
"id": 1,
"name": "张三",
"phone": "138****1234",
"balance": 500.00,
"total_recharge": 1000.00,
"total_consume": 500.00
}
],
"transactions": [
{
"id": 1,
"member_id": 1,
"member_name": "张三",
"type": "recharge",
"amount": 500.00,
"time": "2025-07-14 10:30:00"
}
]
}
```

### 会员充值核心逻辑

```php
case 'recharge':
$amount = floatval($input['amount'] ?? 0);
$id = intval($input['member_id']);

// 找到对应会员,更新余额
foreach ($data['members'] as &$m) {
if ($m['id'] == $id) {
$m['balance'] += $amount;
$m['total_recharge'] += $amount;
// 记录交易流水
addTransaction($data, $id, $m['name'], 'recharge', $amount, $m['balance']);
break;
}
}
saveData($jsonFile, $data);
```

## 二、小程序前端

### 页面结构

小程序一共 5 个页面:

```
pages/
├── index/ # 首页:会员列表 + 统计卡片
├── transactions/ # 交易记录
├── stats/ # 统计分析
├── mine/ # 我的(设置、绑定、注销)
└── bind/ # 绑定页(扫码/邀请绑定)
```

### 首页:会员管理核心

首页是使用频率最高的页面,我把它设计为信息密度最高的布局:

- **顶部统计卡片**:总余额、累计充值、本月消费
- **搜索排序栏**:按姓名/手机搜索,按姓名/余额排序
- **会员列表**:显示姓名、手机(脱敏)、余额、VIP等级
- **浮动按钮**:右下角 + 按钮快速新增会员
- **点击会员弹出操作菜单**:充值、消费、编辑、解绑、删除

```javascript
// 加载数据
loadData: function() {
var that = this;
wx.showLoading({ title: '加载中...' });

Promise.all([
util.getMembers(),
util.getTransactions(),
util.getStatus()
]).then(function(results) {
var members = results[0];
var transactions = results[1];
var status = results[2];

that.setData({
members: members,
transactions: transactions,
stats: that.calcStats(members, transactions)
});
wx.hideLoading();
});
}
```

### 会员等级设计

根据余额自动计算等级,直观展示:

| 等级 | 条件 | 徽章颜色 |
|------|------|----------|
| 钻石VIP | 余额 ≥ 10000 | 金色 |
| 黄金VIP | 余额 ≥ 5000 | 橙色 |
| 普通VIP | 余额 ≥ 500 | 蓝色 |
| 普通会员 | 余额 < 500 | 灰色 |

```javascript
// WXS 中计算等级
function getLevel(m) {
var balance = m.balance || 0;
if (balance >= 10000) return 'diamond';
if (balance >= 5000) return 'gold';
if (balance >= 500) return 'vip';
return 'normal';
}
```

### 充值/消费 + 一键通知

这是我觉得最实用的功能:充值和消费完成后,自动生成通知文案,一键复制发给客户。

```javascript
// 充值成功后
notifyRecharge: function(member, amount) {
var text = '【充值通知】\n' +
'尊敬的 ' + member.name + ':\n' +
'您已成功充值 ¥' + amount.toFixed(2) + '\n' +
'当前余额:¥' + member.balance.toFixed(2) + '\n' +
'感谢您的支持!';

wx.setClipboardData({
data: text,
success: function() {
wx.showToast({ title: '已复制,可发送给客户' });
}
});
}
```

### 交易记录页

按类型筛选(全部/充值/消费),每条记录显示会员名、操作类型、金额、时间,支持删除。

### 统计分析页

- 三个汇总卡片:总充值、总消费、剩余金额
- 会员排名表格,支持按充值或消费排序
- 前三名金银铜色排名徽章
- 点击任意卡片或行弹出详情

### 网页绑定

小程序和网页后台数据互通的核心:

1. 在网页端点击「生成绑定码」,得到一个 6 位数字
2. 在小程序「我的」页面输入绑定码
3. 绑定成功后,两端操作的是同一份数据

绑定码 5 分钟过期,保证安全性。

## 三、网页管理后台

除了小程序,我还做了一个网页版后台。电脑端大屏操作更方便,特别是录入大量会员数据的时候。

网页端功能和小程序完全一致:
- 会员管理(增删改查)
- 充值消费
- 交易记录
- 数据与小程序实时同步

网页端通过扫码登录,使用同一个 API,操作同一份数据。

## 四、部署指南

如果你想自己部署一套,步骤如下:

### 1. 准备环境

- 一台 Linux 服务器(任意配置)
- 已备案的域名
- PHP 7.4+ 环境
- 微信小程序 AppID 和 AppSecret

### 2. 部署后端

```bash
# 创建目录
mkdir -p /var/www/html/wxxcx

# 上传 api_wxxcx.php 和 config.php
# config.php 内容:
$wxAppId = '你的小程序AppID';
$wxSecret = '你的小程序AppSecret';
```

### 3. 部署网页后台

把 `vip.html` 放到同一目录即可。

### 4. 小程序端配置

修改 `utils/util.js` 中的 API 地址:

```javascript
var API_BASE = 'https://你的域名/wxxcx/api_wxxcx.php';
```

然后用微信开发者工具上传代码,提交审核即可。

## 五、总结

这个小程序从构思到开发完成,断断续续花了两周左右的业余时间。最花时间的不是写代码,而是**打磨交互细节**——操作菜单的动画、余额变动的即时反馈、通知文案的一键复制,这些看似不起眼的地方,才是用户体验的关键。

目前小程序还在备案中,等正式上线后我会把小程序码更新到这里。如果你对这个小程序感兴趣,或者有类似的需求想交流,欢迎在评论区留言。

---

**相关资源:**

- 完整源码:备案通过后放出
- 管理后台:`https://zjunwei.com/wxxcx/vip.html`
- API 接口:`https://zjunwei.com/wxxcx/api_wxxcx.php`

Nginx 反向代理配置教程:一台服务器跑多个网站 服务器安全加固指南:防火墙、fail2ban 与 SSH 防护

最新回复

暂无回复,来说两句吧
评论已关闭
站点总访问量:2815