随着数字经济与消费升级的双重驱动,盲盒经济已成为零售领域的重要增长极。本指南基于uni-app跨端框架与PHP后端技术栈,结合济南壹软网络科技有限公司等企业的实战经验,提供一套完整的三端(H5/小程序/APP)源码部署方案。本方案采用前后端分离架构,支持高并发场景下的稳定运行,并提供智能推荐、区块链存证等创新功能模块。
一、系统架构设计
1.1 技术选型矩阵
- 盲盒源码与演示:m.ymzan.top
- 跨端前端:uni-app(Vue.js语法,支持编译到iOS/Android、微信/支付宝小程序、H5)
- 后端服务:ThinkPHP 6.x(RESTful API) + Redis(缓存)+ RabbitMQ(异步任务)
- 数据库:MySQL 8.0(主从架构)+ MongoDB(非结构化数据)+ ClickHouse(实时分析)
- 部署环境:Docker容器化 + Kubernetes集群编排 + 阿里云ECS
1.2 核心架构图
css
mermaid
graph LR
A[用户端] --> B[CDN加速]
B --> C[Nginx负载均衡]
C --> D[Spring Cloud Gateway网关]
D --> E[用户微服务 JWT鉴权]
D --> F[内容微服务 FFmpeg转码]
D --> G[推荐微服务 Redis缓存]
E --> H[MySQL主从集群]
F --> I[MongoDB分片集群]
G --> J[ClickHouse实时分析]
二、核心功能模块源码解析
2.1 用户管理系统
登录鉴权实现(ThinkPHP 6.x)
php
php
// JWT生成与验证
use Firebase\JWT\JWT;
class AuthService {
public static function generateToken($userId) {
$key = config('jwt.key');
$payload = [
'iss' => 'blindbox-api',
'aud' => 'blindbox-client',
'iat' => time(),
'exp' => time() + 86400*7,
'uid' => $userId
];
return JWT::encode($payload, $key, 'HS256');
}
}
// 微信小程序登录
public function wxLogin() {
$code = input('code');
$wxData = curl_get('https://api.weixin.qq.com/sns/jscode2session', [
'appid' => config('wx.appid'),
'secret' => config('wx.secret'),
'js_code' => $code,
'grant_type' => 'authorization_code'
]);
$openid = $wxData['openid'];
// 查询或创建用户记录
$user = UserModel::where('openid', $openid)->find();
if (!$user) {
$user = new UserModel();
$user->openid = $openid;
$user->create_time = time();
$user->save();
}
return json(['token' => AuthService::generateToken($user->id)]);
}
2.2 盲盒商品管理
商品SKU动态配置(uni-app前端)
xml
vue
<template>
<view class="blindbox-list">
<van-swipe vertical :loop="false" @change="onSwipeChange">
<van-swipe-item v-for="box in blindBoxes" :key="box.id">
<image :src="box.cover_image" mode="aspectFill" />
<text class="price">¥{{ box.price }}</text>
<van-button size="small" @click="buy(box)">立即抽盒</van-button>
</van-swipe-item>
</van-swipe>
</view>
</template>
<script>
export default {
data() {
return {
blindBoxes: []
};
},
async onLoad() {
const res = await uni.request({
url: '/api/v1/blindbox/list',
method: 'GET'
});
this.blindBoxes = res.data.data;
},
methods: {
async buy(box) {
const res = await uni.request({
url: '/api/v1/order/create',
method: 'POST',
data: {
box_id: box.id,
amount: box.price
},
header: {
'Authorization': 'Bearer ' + uni.getStorageSync('token')
}
});
if (res.data.code === 0) {
uni.navigateTo({ url: '/pages/draw/index?order_id=' + res.data.order_id });
}
}
}
};
</script>
2.3 支付与订单系统
微信支付集成(ThinkPHP扩展)
php
php
// 创建支付订单
public function createPayOrder($orderId, $amount) {
$wxPay = new WxPay();
$result = $wxPay->unifiedOrder([
'body' => '盲盒商品购买',
'out_trade_no' => $orderId,
'total_fee' => $amount * 100, // 转换为分
'notify_url' => 'https://api.blindbox.com/pay/notify'
]);
return $result;
}
// 支付回调处理
public function handlePayNotify() {
$xmlData = file_get_contents('php://input');
$data = (array) simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA);
if ($data['return_code'] === 'SUCCESS' && $data['result_code'] === 'SUCCESS') {
// 更新订单状态为已支付
OrderModel::where('order_id', $data['out_trade_no'])
->update(['status' => 'paid']);
// 触发抽奖逻辑
$this->triggerDraw($data['out_trade_no']);
}
return response('SUCCESS');
}

三、三端部署方案
3.1 开发环境配置
uni-app项目初始化
markdown
bash
# 安装HBuilderX
sudo dpkg -i HBuilderX-3.4.12.deb
# 初始化uni-app项目
vue create -p dcloudio/uni-preset-vue blindbox-app
# 安装依赖
cd blindbox-app && npm install
3.2 生产环境部署
Docker容器化部署
markdown
Dockerfile
# 后端服务Dockerfile
FROM php:8.1-fpm
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip \
git \
&& docker-php-ext-configure gd \
&& docker-php-ext-install -j$(nproc) gd \
&& pecl install redis \
&& docker-php-ext-enable redis
COPY . /var/www/html
WORKDIR /var/www/html
RUN composer install
Kubernetes部署配置
yaml
yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: blindbox-api
spec:
replicas: 3
selector:
matchLabels:
app: blindbox-api
template:
metadata:
labels:
app: blindbox-api
spec:
containers:
- name: php
image: registry.example.com/blindbox/api:v1.2
ports:
- containerPort: 9501
env:
- name: DB_HOST
value: mysql-cluster
- name: REDIS_HOST
value: redis-cluster
3.3 性能优化策略
- CDN加速:阿里云OSS + 全站CDN,首屏加载时间从2.8s缩短至0.9s
- 缓存策略:Redis缓存热门盲盒数据,QPS提升40%
- 负载均衡:Nginx四层负载均衡,支持10万+并发
- 数据库优化:MySQL读写分离,ClickHouse实时分析用户行为
四、扩展功能实现
4.1 智能推荐系统
php
php
// 基于用户行为的推荐算法
public function getRecommendations($userId) {
$user = UserModel::find($userId);
$behaviors = UserBehavior::where('user_id', $userId)
->where('action_time', '>', time() - 86400*7)
->select();
// 协同过滤算法
$similarUsers = $this->findSimilarUsers($user);
$hotItems = Item::where('category', $user->favorite_category)
->orderBy('purchase_count', 'desc')
->limit(10)
->get();
return array_merge($similarUsers->items, $hotItems);
}
4.2 区块链存证
markdown
solidity
// Ethereum智能合约
pragma solidity ^0.8.0;
contract BlindBoxProof {
struct DrawRecord {
address user;
uint256 boxId;
uint256 itemId;
uint256 timestamp;
}
mapping(uint256 => DrawRecord) public draws;
function recordDraw(
address _user,
uint256 _boxId,
uint256 _itemId
) external {
draws[_boxId] = DrawRecord({
user: _user,
boxId: _boxId,
itemId: _itemId,
timestamp: block.timestamp
});
}
}

结语
本指南完整覆盖了从技术选型、源码实现到部署运维的全流程。通过uni-app的跨端能力与PHP的高效后端,可实现一套代码三端部署。结合智能推荐、区块链存证等创新功能,可构建具备市场竞争力的盲盒平台。