在线体育投注平台 Laravel 8
项目分析报告 – 体育博彩平台 (Prophecy)
一、项目概述
1.1 基本信息
- 项目名称: Prophecy (体育博彩平台)
- 技术框架: Laravel 8.x (PHP 7.3+/8.0+)
- 项目类型: 在线体育博彩/投注平台
- 前端框架: Tailwind CSS + Alpine.js + Blade 模板
- 数据库: MySQL
构建工具: Laravel Mix + Webpack
1.2 核心业务
这是一个完整的体育博彩投注平台,用户可以:
- 浏览各类体育赛事(足球、篮球、网球等)
- 查看比赛详情和赔率
- 下注投注比赛结果
- 管理资金(充值/提现)
- 查看投注历史和结果
- 通过推荐系统获得佣金
二、项目结构
2.1 目录结构
prophecy-503.show99.xyz/
├── app/ # 应用核心代码
│ ├── Console/ # 命令行任务(定时任务)
│ ├── Events/ # 事件类
│ ├── Exceptions/ # 异常处理
│ ├── Helper/ # 辅助函数 (helpers.php)
│ ├── Http/ # HTTP 相关
│ │ ├── Controllers/ # 控制器
│ │ │ ├── Admin/ # 后台管理控制器
│ │ │ ├── Auth/ # 认证控制器
│ │ │ └── User/ # 用户端控制器
│ │ ├── Middleware/ # 中间件
│ │ └── Requests/ # 表单请求验证
│ ├── Mail/ # 邮件类
│ ├── Models/ # Eloquent 模型
│ ├── Providers/ # 服务提供者
│ ├── Rules/ # 自定义验证规则
│ ├── Services/ # 业务服务层
│ │ └── Gateway/ # 支付网关服务
│ └── View/ # 视图相关
├── bootstrap/ # 启动文件
├── config/ # 配置文件
├── database/ # 数据库相关
│ ├── factories/ # 模型工厂
│ ├── migrations/ # 数据库迁移
│ └── seeders/ # 数据填充
├── resources/ # 资源文件
│ ├── css/ # 样式文件
│ ├── js/ # JavaScript 文件
│ └── views/ # Blade 视图
│ ├── admin/ # 后台视图
│ ├── auth/ # 认证视图
│ ├── layouts/ # 布局视图
│ └── themes/ # 主题视图
│ └── betting/ # 博彩主题
├── routes/ # 路由文件
│ ├── web.php # Web 路由
│ ├── api.php # API 路由
│ └── auth.php # 认证路由
├── storage/ # 存储文件
└── public/ # 公共资源
2.2 核心模块划分
用户端模块 (User)
- 用户认证: 注册、登录、密码重置、邮箱/短信验证
- 首页: 赛事展示、分类筛选、实时比赛
- 投注系统: 投注单、下注、赔率计算
- 资金管理: 充值、提现、交易记录
- 个人中心: 个人资料、安全设置(两步验证)
- 推荐系统: 邀请好友、佣金记录
- 客服工单: 提交工单、查看回复
后台管理模块 (Admin)
- 仪表盘: 数据统计、图表展示
- 赛事管理:
- 分类管理(体育类别)
- 锦标赛管理
- 队伍管理
- 比赛管理
- 问题/选项管理(投注项目)
- 投注管理:
- 投注记录查询
- 赛果管理
- 退款处理
- 用户管理:
- 用户列表
- KYC 审核
- 余额调整
- 用户详情
- 财务管理:
- 充值记录(待处理/已完成)
- 提现记录
- 交易流水
- 佣金记录
- 支付网关:
- 支付方式配置
- 手动网关设置
- 内容管理:
- CMS 页面
- 博客管理
- 模板配置
- 系统设置:
- 基本配置
- 邮件模板
- 短信模板
- 通知配置
- 语言管理
- 权限管理
- 客服工单: 工单列表、回复处理
三、核心业务逻辑
3.1 赛事管理流程
赛事层级结构:
GameCategory (分类)
└── GameTournament (锦标赛)
└── GameMatch (比赛)
├── GameTeam1 (队伍 1)
├── GameTeam2 (队伍 2)
└── GameQuestions (投注问题)
└── GameOptions (投注选项/赔率)
核心模型关系:
GameCategory– 体育分类(足球、篮球等)GameTournament– 锦标赛/联赛GameMatch– 具体比赛GameTeam– 参赛队伍GameQuestions– 投注问题(如:谁会赢?)GameOption– 投注选项及赔率
3.2 投注流程
用户投注流程:
1. 用户浏览比赛列表 → 2. 选择比赛和投注选项 → 3. 填写投注金额
→ 4. 系统计算潜在回报 → 5. 确认投注 → 6. 扣除余额生成投注记录
投注数据模型:
BetInvest– 投注主记录- user_id: 用户 ID
- question_id: 投注问题 ID
- invest_amount: 投注金额
- return_amount: 潜在回报
- status: 状态 (0 待结算 1 赢 2 输 3 退款)
BetInvestLog– 投注明细记录
3.3 赛果结算流程
赛果管理流程:
1. 比赛结束 → 2. 管理员设置获胜选项 → 3. 系统自动计算中奖用户
→ 4. 更新投注记录状态 → 5. 发放奖金到用户余额 → 6. 记录交易流水
3.4 支付系统
支持的支付网关 (25+ 种):
- 国际支付: PayPal, Stripe, Skrill, PerfectMoney
- 加密货币: Coinbase Commerce, Blockchain, Block.io, CoinPayments
- 地区支付:
- 欧洲: Mollie, Payeer
- 非洲: Flutterwave, Paystack, Monnify
- 亚洲: Razorpay, Paytm, PayUmoney, Instamojo
- 拉美: MercadoPago
- 其他: Authorize.net, 2Checkout, Voguepay
充值流程:
1. 用户选择支付网关 → 2. 输入金额 → 3. 系统计算手续费
→ 4. 跳转到支付网关 → 5. 用户完成支付 → 6. 回调处理
→ 7. 管理员审核(手动)/自动入账 → 8. 更新用户余额
提现流程:
1. 用户选择提现方式 → 2. 填写提现金额和账户信息
→ 3. 系统验证余额和限制 → 4. 提交申请 → 5. 管理员审核
→ 6. 执行打款 → 7. 更新状态和余额
3.5 推荐系统
推荐层级佣金:
- 支持多级推荐(可配置)
- 佣金类型:
- 存款佣金 (deposit_commission)
- 投注佣金 (bet_commission)
- 投注赢利佣金 (bet_win_commission)
数据模型:
Referral– 推荐关系记录ReferralBonus– 佣金奖励记录
3.6 KYC 认证系统
认证流程:
1. 用户上传身份证明 → 2. 提交审核 → 3. 管理员审核
→ 4. 审核通过/拒绝 → 5. 更新用户状态
数据模型:
KYC– KYC 认证记录IdentifyForm– 身份验证表单配置
四、核心代码分析
4.1 路由结构 (routes/web.php)
// 前台路由
Route::get('/', 'FrontendController@index')->name('home');
Route::get('/category/{category_slug}/{category_id}', 'FrontendController@category');
Route::get('/match/{match_name}/{match_id}', 'FrontendController@match');
// 用户中心路由 (需要登录)
Route::group(['middleware' => ['auth'], 'prefix' => 'user'], function () {
Route::get('/dashboard', 'User\HomeController@index')->name('home');
Route::post('/betSlip', 'User\HomeController@betSlip')->name('betSlip');
Route::get('/bet-history', 'User\BetHistoryController@betList')->name('betHistory');
Route::get('/add-fund', 'User\HomeController@addFund')->name('addFund');
Route::get('/withdraw', 'User\HomeController@payoutMoney')->name('payout.money');
// ...更多路由
});
// 后台管理路由
Route::group(['prefix' => 'admin'], function () {
Route::get('/dashboard', 'Admin\DashboardController@dashboard');
Route::get('category/list', 'Admin\CategoryController@listCategory');
Route::get('match/list', 'Admin\MatchController@listMatch');
Route::get('/bet-history', 'Admin\ManageBetController@betList');
Route::get('/result/history', 'Admin\ManageResultController@resultList');
// ...更多路由
});
4.2 核心控制器
FrontendController.php
- 首页展示
- 分类/锦标赛/比赛页面
- 博客/FAQ/联系我们
- 内容管理
User/HomeController.php
- 用户仪表盘
- 投注功能
- 充值/提现
- 个人资料管理
- 交易记录查询
PaymentController.php
- 充值请求处理
- 支付网关集成
- IPN 回调处理
- 充值确认
GameFetchController.php
- 赛事数据获取
- 实时比赛数据
- 赔率数据格式化
4.3 核心模型
User.php (用户模型)
// 核心属性
- id, firstname, lastname, username, email
- phone, phone_code, address, image
- balance, referral_id, status
- email_verified_at, code, code_expired_at
// 核心关系
- funds(): 充值记录
- transaction(): 交易记录
- ticket(): 工单
- payout(): 提现记录
- referral(): 推荐人
- referralBonusLog(): 佣金记录
BetInvest.php (投注记录)
// 核心属性
- user_id, question_id
- invest_amount: 投注金额
- return_amount: 潜在回报
- status: 0 待结算 1 赢 2 输 3 退款
// 核心关系
- user(): 用户
- betInvestLog(): 投注明细
GameMatch.php (比赛)
// 核心属性
- category_id, tournament_id
- team1_id, team2_id
- name, start_date, end_date
- status, is_unlock
// 核心关系
- gameCategory(): 分类
- gameTournament(): 锦标赛
- gameTeam1/gameTeam2(): 队伍
- gameQuestions(): 投注问题
Gateway.php (支付网关)
// 核心属性
- code, name, image, status
- parameters: 配置参数 (JSON)
- currencies: 支持币种 (JSON)
- min_amount, max_amount
- percentage_charge, fixed_charge
- convention_rate: 汇率
4.4 辅助函数 (app/Helper/helpers.php)
// 主题相关
template() - 获取当前主题
// 文件处理
getFile() - 获取文件 URL
removeFile() - 删除文件
uploadImage() - 上传图片
// 格式化
getAmount() - 格式化金额
dateTime() - 格式化日期
slug() - 生成 URL 友好别名
// 安全相关
strRandom() - 生成随机字符串
code() - 生成验证码
getIpInfo() - 获取 IP 信息
// 业务相关
getLevelUser() - 获取推荐层级
invoice() - 生成订单号
4.5 支付网关服务结构
app/Services/Gateway/
├── stripe/Payment.php # Stripe 支付
├── paypal/Payment.php # PayPal 支付
├── coinbasecommerce/ # Coinbase 商务
├── blockchain/ # Blockchain 加密货币
├── flutterwave/ # Flutterwave 非洲支付
├── razorpay/ # Razorpay 印度支付
└── ... (25+ 网关)
每个网关实现统一接口:
class Payment {
public static function prepareData($order, $gateway) // 准备支付数据
public static function ipn($request, $gateway, $order, $trx, $type) // IPN 回调
}
五、数据库设计
5.1 核心数据表
用户相关
users– 用户主表password_resets– 密码重置kyc– KYC 认证identify_forms– 身份验证表单
赛事相关
categories– 体育分类game_tournaments– 锦标赛game_teams– 队伍game_matches– 比赛game_questions– 投注问题game_options– 投注选项/赔率
投注相关
bet_invests– 投注记录bet_invest_logs– 投注明细
财务相关
funds– 充值记录payout_logs– 提现记录payout_methods– 提现方式gateways– 支付网关transactions– 交易流水
推荐相关
referrals– 推荐关系referral_bonuses– 佣金奖励
系统相关
configures– 系统配置admins– 管理员tickets– 客服工单subscribers– 订阅用户languages– 语言包
5.2 关键数据表结构
users 表
- id: 主键
- firstname, lastname: 姓名
- username: 用户名 (唯一)
- email: 邮箱 (唯一)
- password: 密码 (bcrypt)
- phone, phone_code: 手机号
- address: 地址
- image: 头像
- balance: 余额
- referral_id: 推荐人 ID
- status: 状态 (1 激活 0 禁用)
- email_verified_at: 邮箱验证时间
- code, code_expired_at: 验证码及过期时间
- remember_token: 记住我令牌
- created_at, updated_at
bet_invests 表
- id: 主键
- user_id: 用户 ID
- question_id: 问题 ID
- invest_amount: 投注金额
- return_amount: 潜在回报
- status: 状态
- 0: 待结算
- 1: 赢 (已派奖)
- 2: 输
- 3: 退款
- created_at, updated_at
game_matches 表
- id: 主键
- category_id: 分类 ID
- tournament_id: 锦标赛 ID
- team1_id, team2_id: 队伍 ID
- name: 比赛名称
- start_date, end_date: 比赛时间
- status: 状态
- is_unlock: 是否解锁投注
- created_at, updated_at
六、技术特性
6.1 安全特性
- CSRF 保护: Laravel 内置 CSRF Token
- SQL 注入防护: Eloquent ORM 参数绑定
- XSS 防护: Purify HTML 净化
- 密码加密: bcrypt 加密
- 两步验证: Google Authenticator
- 邮箱/短信验证: 注册/提现验证
- IP 检测: 用户行为追踪
6.2 性能优化
- 缓存: Redis/Memcached 支持
- 队列: 后台任务处理
- 优化命令:
php artisan optimize:clear - Eager Loading: 模型关联预加载
6.3 扩展性
- 主题系统: 支持多主题切换
- 多语言: 完整的多语言支持
- 插件系统: 第三方服务集成
- 模块化: 清晰的模块划分
6.4 第三方集成
- 社交登录: Laravel Socialite
- 邮件服务: PHPMailer, Nexmo
- 短信服务: Nexmo
- 实时通知: Pusher
- 验证码: reCAPTCHA
- 客服系统: Tawk.to, Facebook Messenger
- 分析工具: Google Analytics
七、部署配置
7.1 环境要求
- PHP: 7.3+ / 8.0+
- MySQL: 5.7+
- Web 服务器: Nginx / Apache
- 扩展: BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML
7.2 关键配置
.env– 环境变量配置config/basic.php– 基本配置(货币、佣金等)config/location.php– 文件上传路径配置app/Http/Kernel.php– 中间件配置
7.3 定时任务
// routes/web.php
Route::get('cron', function () {
return Artisan::call('cron:run');
});
// 需要配置系统 crontab 定期访问
7.4 队列处理
# 启动队列监听
php artisan queue:work
八、总结
8.1 项目特点
- 功能完整: 涵盖博彩平台所有核心功能
- 支付丰富: 支持 25+ 种支付网关
- 架构清晰: Laravel MVC 标准架构
- 可扩展: 模块化设计,易于扩展
- 安全性高: 多层安全防护机制
8.2 核心业务闭环
用户注册 → 充值 → 浏览赛事 → 下注 → 赛果结算 → 赢利提现
↓
推荐好友 → 获得佣金
8.3 技术栈总结
- 后端: Laravel 8.x + PHP 7.3+/8.0+
- 前端: Blade + Tailwind CSS + Alpine.js
- 数据库: MySQL + Eloquent ORM
- 缓存: Redis/Memcached
- 队列: Laravel Queue
- 实时: Pusher
- 构建: Laravel Mix + Webpack
文档生成时间: 2026 年 2 月 28 日 项目版本: Laravel 8.x 分析范围: 完整项目代码分析