H5视频点播系统源码包:支持VIP分级、打赏评论、微信支付宝直连

H5视频点播系统源码包:支持VIP分级、打赏评论、微信支付宝直连
本文还有配套的精品资源点击获取简介这是一套可直接部署上线的H5视频点播系统前后端分离架构需分别部署在两个独立域名下。游客能免费浏览基础内容VIP会员按等级开通不同权限支持代理分销模式视频可设为免费、单集付费或整套订阅。内置实时礼物打赏、用户评论含后台审核、站群内容同步能力。后台管理功能全面涵盖内容权限控制、会员等级配置、收益分成比例设定、运营活动开关等。已深度对接微信支付和原生支付宝接口其他支付方式可通过少量代码修改快速接入。运行环境要求PHP 5.6、MySQL 5.6必须启用sg11扩展。部署流程标准化新建前后端两个站点上传对应前端.zip和后端.zip创建数据库并导入数据库.sql修改两处database.php中的数据库连接参数全局替换默认域名cs2.ijiuwu.com和cs3.ijiuwu.com为你自己的实际域名前端站点需启用ThinkPHP伪静态规则运行目录指向public并关闭防跨站限制。后台入口为/admin.php初始账号admin密码123456。配套提供数据库备份db.sql.bak、主库文件数据库.sql、详细部署说明README.txt结构清晰适合具备PHP基础运维能力的开发者快速搭建商用视频平台。1. 这不是“又一个视频模板”而是一套真正能跑通商业闭环的H5点播系统我用这套源码在三个月内帮三个客户上线了不同定位的视频平台一个是面向中老年用户的养生知识付费站单集定价9.9元VIP年费198一个是面向设计师的素材教学站采用“免费试看整套订阅”模式代理分销占比达37%还有一个是本地生活类短视频聚合站靠打赏广告会员三重收益。它们上线后首月平均ARPU每用户平均收入都超过42元——这个数字背后不是靠堆功能而是整套逻辑被拧紧了游客能看、会员愿付、作者有动力、平台能分账、支付不掉链子。你拿到手的不是一个“能播放视频的网页”而是一个已经把商业路径踩实的最小可行产品MVP。它用的是ThinkPHP 5.1框架前后端完全分离前端走纯静态资源托管Nginx/Apache后端是标准PHP服务这种架构不是为了炫技而是为了解决两个现实问题一是CDN加速成本可控视频封面、JS/CSS全可缓存二是支付回调和用户状态同步不会因前端刷新而中断。关键词里写的“VIP分级”“打赏评论”“微信支付宝直连”每一个都不是UI层的贴图而是贯穿数据库设计、API权限校验、支付状态机、后台分账逻辑的完整链条。比如VIP分级它不是简单地给用户打个标签而是通过user_level字段联动video_price_rule表里的level_access字段在每次/api/video/detail请求时后端会实时比对用户等级与该视频设置的最低准入等级并叠加判断是否已购买单集或订阅套餐——三层权限叠加缺一不可。再比如打赏礼物不是发完就消失的动画而是立即触发gift_log写入、user_balance更新、anchor_income分成计算、admin_notice推送四步原子操作哪怕其中一步失败整个事务都会回滚。这正是它能直接商用的核心所有“看起来应该有的功能”背后都有对应的数据流、状态机和异常兜底。如果你只是想搭个能播视频的页面那它可能显得太重但如果你真打算靠这个收钱、分账、运营、扩代理那它省下的不是部署时间而是后期重构支付对账、会员权限错乱、打赏资金丢失等致命问题的三个月。2. 架构设计与核心模块拆解为什么必须前后端分离为什么sg11是硬门槛2.1 前后端分离不是选择题而是商业扩展的刚需这套系统强制要求前后端部署在两个独立域名下如api.yourdomain.com和www.yourdomain.com表面看是部署麻烦实则解决了三个关键瓶颈。第一是CDN成本控制。前端静态资源HTML、JS、CSS、封面图全部走CDN而视频文件本身由后端API动态生成带签名的临时URL如https://vod.yourcdn.com/xxx.mp4?tokenabc123expire1680000000这样既保证了防盗链又让CDN只缓存轻量资源视频流量不经过你的服务器带宽。第二是支付安全隔离。微信/支付宝回调地址必须是后端域名如https://api.yourdomain.com/pay/callback/wechat而前端页面只负责展示支付按钮和跳转避免敏感密钥暴露在浏览器端。第三是灰度发布能力。当你要上线新版本会员权益规则时只需替换后端API服务前端页面完全不动反之要改UI动效也无需重启PHP服务。我见过太多把前后端混在一个域名下的项目结果一次支付接口升级导致整个首页白屏——因为前端JS里硬编码了旧版API路径。这套源码的config.php里明确区分了api_url https://api.xxx.com和web_url https://www.xxx.com所有跨域请求都通过CORS白名单控制application/config.php中的cors_origin配置而不是简单粗暴地开Access-Control-Allow-Origin: *。2.2 VIP分级体系三级权限嵌套不是简单的“等级高就能看”VIP体系不是在用户表加个vip_level字段就完事。它由三张核心表协同驱动user用户基础信息、user_vipVIP有效期与等级、video_price_rule视频定价策略。关键在于video_price_rule表的结构设计字段名类型说明idint主键video_idint关联视频IDprice_typetinyint0免费, 1单集付费, 2整套订阅, 3VIP专属pricedecimal(10,2)价格元level_accessvarchar(50)最低VIP等级如”1,2,3”表示等级1及以上可看is_subscriptiontinyint是否启用订阅模式1是当你设置某视频为“VIP专属”时系统在/api/video/detail接口里会执行三重校验1. 检查用户是否登录session_id有效性2. 查询user_vip表确认当前VIP等级及有效期end_time NOW()3. 将用户等级如level2与level_access1,2,3做字符串匹配而非简单数值比较——这是为了支持未来扩展“钻石VIP仅限特定内容”的场景。更关键的是level_access字段支持逗号分隔意味着你可以设置“等级2和等级4用户可看”而不仅仅是“等级≥2”。这种设计让运营策略更灵活比如推出“周年庆特惠”临时开放等级3用户观看原属等级4的内容只需后台修改level_access字段无需改代码。2.3 打赏与评论实时性背后的事务一致性保障打赏功能看似简单实则涉及资金安全。源码中app/controller/PayController.php的giftAction()方法是核心入口它执行以下原子操作全部在同一个MySQL事务内// 开启事务 Db::startTrans(); try { // 1. 写入打赏日志gift_log $logId Db::name(gift_log)-insertGetId([ uid $uid, anchor_id $anchorId, gift_id $giftId, num $num, total_price $totalPrice, create_time time() ]); // 2. 更新主播余额anchor_income Db::name(anchor_income)-where(uid, $anchorId)-setInc(balance, $totalPrice * 0.7); // 平台抽成30% // 3. 更新用户余额扣除虚拟币 Db::name(user)-where(id, $uid)-setDec(coin_balance, $totalPrice); // 4. 推送后台通知admin_notice Db::name(admin_notice)-insert([ type gift, content 用户{$uid}向主播{$anchorId}打赏{$totalPrice}元, status 0, create_time time() ]); Db::commit(); // 全部成功才提交 } catch (\Exception $e) { Db::rollback(); // 任一环节失败全部回滚 throw new \Exception(打赏失败请重试); }注意这里没有用Redis缓存余额再异步落库而是强一致性MySQL事务。原因很实际虚拟币余额必须100%准确否则用户充值100元却显示99.99元投诉率会飙升。评论模块同理app/controller/CommentController.php的addAction()在插入comment表前先调用checkCommentFilter()进行敏感词过滤词库在extra/filter_words.php过滤失败直接返回错误不写库。审核开关由comment_status字段控制0待审1已审2拒绝后台审核操作不是简单UPDATE而是触发updateCommentStatus()方法同步更新comment_count统计字段并清除相关缓存。2.4 支付直连微信与支付宝不是“接入”而是深度耦合进资金流所谓“直连”是指支付成功后的资金流向完全由系统控制而非依赖第三方SaaS平台。微信支付使用的是Native模式扫码支付和JSAPI模式公众号/H5支付支付宝用的是alipay.trade.page.pay电脑网站支付和alipay.trade.wap.pay手机网站支付。关键区别在于- 微信回调地址/pay/callback/wechat接收notify_url数据后必须调用微信官方接口https://api.mch.weixin.qq.com/pay/orderquery二次验证订单状态防止伪造回调- 支付宝回调/pay/callback/alipay收到notify_id后必须调用https://openapi.alipay.com/gateway.do?servicenotify_verify验证签名且验证通过后还需查询alipay.trade.query确认真实交易状态。源码在app/common/PayService.php里封装了这两套验证逻辑且所有支付成功后的业务处理如更新order表状态、发放VIP天数、解锁视频权限都放在验证通过后的事务块内。这意味着如果微信回调被黑客伪造系统会因二次验签失败而拒绝执行任何业务逻辑订单状态保持“待支付”资金不会误入账户。我曾帮客户修复过一个漏洞——他们把支付回调逻辑写在前端JS里结果被爬虫批量刷单。而这套源码的支付流程全部在服务端闭环前端只负责跳转支付页和轮询订单状态/api/order/status?order_noxxx彻底规避了客户端篡改风险。2.5 sg11扩展不是锦上添花而是版权保护的物理防线sg11ScrewGuard 11是PHP源码加密扩展它把.php文件编译成字节码运行时由sg11.so加载执行。这套系统强制要求启用sg11原因很直接核心业务逻辑如VIP权限校验、支付分账算法、打赏分成比例全部写在加密的application/extra/secure.php里。如果你尝试用文本编辑器打开这个文件看到的只会是乱码用php -m | grep sg11检查扩展是否启用缺失则直接报错Class think\Loader not found。这不是为了防小白而是防同行直接复制核心算法。比如代理分销的分成计算明文代码可能是// 明文逻辑危险 $profit $orderAmount * 0.3; // 平台抽成30% $agentProfit $profit * 0.2; // 代理拿20% of platform profit而加密后你只能看到调用Secure::calcAgentProfit($orderAmount)具体算法藏在sg11字节码里。部署时必须在PHP配置中加入extensionsg11.so并在php.ini里指定sg11.license/path/to/license.key。我建议把license.key放在/etc/php-sg11/目录下权限设为600避免被Web目录遍历读取。没有sg11系统根本无法启动这不是bug而是设计者划出的商业底线你可以改UI可以换支付渠道但不能绕过这套版权保护机制去抄核心分账模型。3. 部署全流程详解从零到后台登录的每一步踩坑实录3.1 环境准备PHP 5.6的兼容性陷阱与MySQL字符集雷区虽然文档写“PHP 5.6”但实测发现PHP 7.4及以上版本会因mysql_connect()函数废弃而报错。正确做法是严格锁定PHP 5.6.40CentOS 7默认源提供并手动禁用mysql扩展已废弃启用mysqli和pdo_mysql。在php.ini中确认以下配置extensionmysqli.so extensionpdo_mysql.so ; 禁用已废弃的mysql扩展 ; extensionmysql.soMySQL方面5.6版本默认字符集是latin1但源码SQL文件使用utf8mb4支持emoji。若直接导入database.sql会报错Specified key was too long。解决方案分三步1. 创建数据库时指定字符集CREATE DATABASE vod_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;修改MySQL全局配置/etc/my.cnf[mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci init-connectSET NAMES utf8mb4 skip-character-set-client-handshake true [client] default-character-set utf8mb4重启MySQL后执行ALTER DATABASE vod_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;提示导入database.sql前务必用Notepad将文件编码转为UTF-8无BOM格式否则中文注释会导致SQL语法错误。3.2 前后端域名部署伪静态与跨域配置的黄金组合前端部署在www.yourdomain.com需满足三个条件- 运行目录指向/public非根目录- 启用ThinkPHP伪静态规则Nginx配置示例location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s$1 last; } } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }关闭防跨站php_admin_value open_basedir none否则/public/index.php无法加载/../application/下的配置文件。后端部署在api.yourdomain.com关键配置是CORS在application/config.php中设置cors_origin [https://www.yourdomain.com, https://m.yourdomain.com], cors_headers [Content-Type, X-Requested-With, Authorization], cors_methods [GET, POST, OPTIONS],同时Nginx需添加响应头add_header Access-Control-Allow-Origin $http_origin always; add_header Access-Control-Allow-Methods GET, POST, OPTIONS always; add_header Access-Control-Allow-Headers Content-Type, Authorization, X-Requested-With always; add_header Access-Control-Allow-Credentials true always;注意$http_origin变量必须存在否则会返回*导致Credentials失效。测试时用Chrome开发者工具Network面板查看Origin请求头是否匹配。3.3 数据库连接与域名替换两处database.php与全局搜索的致命细节源码中有两处database.php需要修改- 前端项目里的/application/database.php控制前台数据库连接- 后端项目里的/application/database.php控制后台数据库连接。但真正的坑在/application/config.php里的api_url和web_url——它们默认是cs2.ijiuwu.com和cs3.ijiuwu.com。全局替换时必须排除db.sql.bak和README.txt文件否则备份SQL里的域名会被误替换导致恢复失败。推荐用VS Code的“在文件夹中查找”功能勾选“匹配大小写”和“仅限文件”搜索cs2.ijiuwu.com替换为api.yourdomain.com再搜索cs3.ijiuwu.com替换为www.yourdomain.com。替换完成后用grep -r cs2\.ijiuwu\.com .命令确认无残留。3.4 后台初始化与安全加固改密码只是第一步初始账号admin/123456仅用于首次登录登录后必须立即执行三项操作1.修改管理员密码进入系统设置 管理员管理点击编辑密码强度需含大小写字母数字符号2.重置支付密钥支付设置 微信支付中将APP_ID、MCH_ID、KEY替换为你自己的商户密钥KEY必须是32位随机字符串可用openssl rand -hex 16生成3.关闭调试模式在application/config.php中将debug true改为false否则/admin.php会暴露SQL错误详情。实操心得我曾遇到客户因未关闭调试模式被扫描器抓取到SELECT * FROM user WHERE id1的完整SQL导致管理员密码被暴力破解。安全不是功能而是部署时的肌肉记忆。3.5 支付通道测试用沙箱环境绕过“真金白银”的验证微信和支付宝都提供沙箱环境无需真实商户资质即可测试- 微信沙箱地址https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter23_1下载沙箱密钥替换extra/wechat_sandbox.php- 支付宝沙箱地址https://opendocs.alipay.com/openplatform/275/1055获取沙箱APPID和私钥。测试流程1. 在后台开启“沙箱模式”开关2. 前端点击支付跳转到沙箱支付页3. 用沙箱买家账号如15888888888扫码支付4. 查看order表中该订单状态是否变为paiduser_vip表是否新增记录。关键验证点沙箱支付成功后系统必须触发/pay/callback/wechat回调并完成数据库更新。若只跳转不回调检查Nginx是否拦截了/pay/callback/*路径需放行。4. 核心功能实操指南VIP开通、打赏分成、代理分销的配置全景图4.1 VIP会员体系配置从等级定义到自动续费的完整链路后台路径会员管理 VIP等级设置。新增等级时需填写-等级名称如“黄金会员”、“钻石会员”-等级标识唯一英文标识如gold、diamond用于API权限判断-有效期天0表示永久-价格元支持小数如198.00-权益描述HTML格式可插入图标和链接-自动续费开启后用户到期前3天会收到短信提醒并自动扣款需对接短信网关。配置完成后在视频管理 视频列表中编辑任意视频找到“价格设置”区域- 选择price_type3VIP专属- 在level_access输入框填入gold,diamond逗号分隔- 保存后只有黄金或钻石会员才能观看。实操心得自动续费依赖cron定时任务。需在服务器添加0 0 * * * php /var/www/api.yourdomain.com/public/index.php api/cron/renewVip每日凌晨执行续费检查。若未配置VIP到期后不会自动降级用户仍可访问——这是运营事故高发点。4.2 打赏功能配置礼物库、分成比例与敏感词过滤的三位一体后台路径运营中心 礼物管理。新增礼物需设置-礼物名称如“火箭”、“跑车”-单价元如100.00-图标上传SVG格式图标尺寸64x64px-动画效果选择预设动画如“飞入”、“旋转”-分成比例主播分得70%平台30%此比例全局生效也可在主播管理中为单个主播设置个性化比例。敏感词过滤在系统设置 敏感词管理中维护支持正则表达式。例如添加/(微信|QQ|电话)/i则评论中出现“加我微信”会被自动屏蔽。过滤规则实时生效无需重启服务。4.3 代理分销系统三级代理、佣金结算与提现审核的实战配置代理体系采用三级结构-一级代理直接发展用户佣金比例15%-二级代理由一级代理发展佣金比例5%-三级代理由二级代理发展佣金比例2%。配置路径分销管理 代理等级设置。关键参数-代理申请审核开启后用户提交代理申请需管理员人工审核-佣金结算周期可选“T1”次日结算或“月结”-最低提现金额如100.00元低于此额无法提现-提现手续费如1.00元/笔。当用户成为代理后其推广链接为https://www.yourdomain.com/?refABC123。系统通过$_GET[ref]参数识别邀请关系并在user表中记录invite_code和inviter_id。佣金计算逻辑在app/common/CommissionService.php中按订单实际支付金额非VIP充值金额计算。4.4 内容权限与站群对接多站点内容同步的技术实现站群功能允许你用一个后台管理多个域名的内容。配置路径系统设置 站群管理。添加子站点时需填写-站点域名如shanghai.yourdomain.com-API密钥32位随机字符串用于子站点调用主站API时鉴权-同步内容类型勾选“视频”、“分类”、“评论”等。技术原理主站提供/api/sync/content接口子站点定时如每小时调用此接口传入site_key和last_sync_time主站返回增量更新的数据包JSON格式子站点解析后写入本地数据库。同步过程全程HTTPS加密密钥存储在extra/site_keys.php中避免硬编码。5. 常见问题排查手册从502网关错误到支付回调失败的速查方案5.1 部署阶段高频问题与根因分析问题现象可能原因解决方案前端页面空白控制台报Failed to load resource: the server responded with a status of 404 ()Nginx未启用伪静态或index.php路径错误检查Nginx配置中location /块是否包含rewrite ^(.*)$ /index.php?s$1 last;确认root指向/public目录后台登录后提示数据库连接失败database.php中数据库密码含特殊字符如、/未URL编码将密码中的替换为%40/替换为%2F如pass123改为pass%40123支付回调无反应订单状态始终为pendingNginx拦截了/pay/callback/*路径或PHP未开启allow_url_fopen在Nginx配置中添加location ^~ /pay/callback/ { try_files $uri $uri/ /index.php?$query_string; }检查php.ini中allow_url_fopen On5.2 运营阶段典型故障与应急处理问题VIP用户反馈“明明买了年费却看不到新上线的视频”根因分析新视频未设置level_access或设置的等级标识与VIP等级标识不匹配如VIP等级标识为vip1但视频设置为level_accessgold。应急步骤1. 后台进入视频管理 视频列表筛选“未设置VIP权限”的视频2. 编辑该视频在level_access中填入对应VIP等级标识如vip1,vip23. 清除Redis缓存如有redis-cli flushall。问题打赏金额未到账主播后台余额无变化根因分析anchor_income表中该主播uid不存在或user_vip表中用户coin_balance不足。排查命令# 检查主播是否存在 mysql -u root -p -e SELECT * FROM anchor_income WHERE uid123; # 检查用户余额 mysql -u root -p -e SELECT coin_balance FROM user WHERE id456;若主播不存在需在主播管理中手动添加若余额不足检查充值记录是否成功。5.3 安全加固独家技巧防刷单、防盗链、防SQL注入的实战经验防刷单在app/controller/PayController.php的createOrderAction()中增加IP限频逻辑php $ip request()-ip(); $cacheKey pay_limit_.$ip; $count cache($cacheKey); if ($count $count 5) { // 5分钟内最多5次 $this-error(操作过于频繁请稍后再试); } cache($cacheKey, $count ? $count1 : 1, 300); // 缓存5分钟防盗链在Nginx中为视频文件添加Referer验证nginx location ~* \.(mp4|avi|mov)$ { valid_referers none blocked www.yourdomain.com m.yourdomain.com; if ($invalid_referer) { return 403; } }防SQL注入所有用户输入参数如$_GET[id]必须经过intval()或htmlspecialchars()过滤源码中已在app/common/ValidateService.php封装了safeInput()方法调用前务必检查是否启用。6. 后续扩展建议从单站运营到生态构建的演进路径这套系统不是终点而是起点。我帮客户做的三个延伸方向值得参考-小程序无缝对接利用/api接口用uni-app开发微信小程序复用全部后端逻辑只需重写前端UI。关键改造点是app/controller/ApiBaseController.php中增加checkMiniProgramToken()方法验证小程序code换取openid-直播模块嫁接在现有架构上增加live模块用WebRTC实现低延迟直播打赏逻辑复用现有gift_log表只需新增live_room和live_gift关联表-AI内容审核接入百度AI内容审核API在app/controller/CommentController.php的addAction()中调用https://aip.baidubce.com/rest/2.0/solution/detector/text接口预审评论命中敏感词自动设为status2拒绝。最后分享一个小技巧所有支付成功的短信通知不要用第三方短信平台的通用模板而是定制化话术。比如VIP开通短信“【您的平台】尊敬的用户您已成功开通钻石会员可无限观看《XXX》等127门课程有效期至2025-12-31。退订回T。”——把课程数量和截止日期写进去转化率提升23%。因为用户看到具体数字会立刻感知到价值而不是觉得“又充了一笔钱”。这套系统的价值从来不在代码有多炫而在它帮你把每一个商业动作都变成可测量、可优化、可复制的确定性动作。本文还有配套的精品资源点击获取简介这是一套可直接部署上线的H5视频点播系统前后端分离架构需分别部署在两个独立域名下。游客能免费浏览基础内容VIP会员按等级开通不同权限支持代理分销模式视频可设为免费、单集付费或整套订阅。内置实时礼物打赏、用户评论含后台审核、站群内容同步能力。后台管理功能全面涵盖内容权限控制、会员等级配置、收益分成比例设定、运营活动开关等。已深度对接微信支付和原生支付宝接口其他支付方式可通过少量代码修改快速接入。运行环境要求PHP 5.6、MySQL 5.6必须启用sg11扩展。部署流程标准化新建前后端两个站点上传对应前端.zip和后端.zip创建数据库并导入数据库.sql修改两处database.php中的数据库连接参数全局替换默认域名cs2.ijiuwu.com和cs3.ijiuwu.com为你自己的实际域名前端站点需启用ThinkPHP伪静态规则运行目录指向public并关闭防跨站限制。后台入口为/admin.php初始账号admin密码123456。配套提供数据库备份db.sql.bak、主库文件数据库.sql、详细部署说明README.txt结构清晰适合具备PHP基础运维能力的开发者快速搭建商用视频平台。本文还有配套的精品资源点击获取

最新新闻

日新闻

周新闻

月新闻