php 收费视频实现
实现 PHP 收费视频功能
用户认证与权限控制
使用 PHP 框架(如 Laravel 或 Symfony)内置的认证系统或自定义中间件验证用户登录状态。结合角色权限管理(如 RBAC),限制未付费用户访问视频内容。
// Laravel 中间件示例
public function handle($request, Closure $next) {
if (!auth()->user()->hasPaidAccess()) {
return redirect('/payment');
}
return $next($request);
}
支付系统集成
接入第三方支付网关(如 PayPal、Stripe 或支付宝)。生成唯一订单号并记录支付状态到数据库,需包含用户 ID、视频 ID、金额和支付状态字段。
// Stripe 支付示例
\Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
$charge = \Stripe\Charge::create([
'amount' => 1000, // 金额(分)
'currency' => 'usd',
'source' => $token,
'description' => '视频购买'
]);
视频加密与安全分发
使用 HLS 或 DASH 协议对视频分片加密。通过临时签名 URL 或令牌验证控制访问权限,防止直接 URL 分享。
// 生成临时访问 URL
$expiry = time() + 3600; // 1小时有效期
$signature = hash_hmac('sha256', "video/{$videoId}/{$expiry}", $secretKey);
$url = "/video/{$videoId}?exp={$expiry}&sig={$signature}";
数据库设计
创建必要的数据表结构:
users: 用户基础信息videos: 视频元数据(标题、描述、价格)payments: 支付记录user_video_access: 用户访问权限关联表
CREATE TABLE user_video_access (
user_id INT,
video_id INT,
expires_at DATETIME,
PRIMARY KEY (user_id, video_id)
);
前端交互设计
采用 AJAX 动态加载视频播放器,支付成功后通过 API 获取解密密钥或播放令牌。使用 JavaScript 播放器(如 Video.js 或 hls.js)处理加密流。
// 前端获取播放令牌
fetch('/api/video/token', {
headers: { 'Authorization': 'Bearer ' + userToken }
}).then(response => response.json())
.then(data => initPlayer(data.stream_url));
日志与监控
记录用户观看行为和分析异常访问。实现自动过期检测和续费提醒功能,通过队列处理高并发请求。
// 记录观看日志
DB::table('video_plays')->insert([
'user_id' => $userId,
'video_id' => $videoId,
'played_at' => now()
]);
性能优化
使用 CDN 分发加密视频片段,数据库读写分离。对频繁访问的权限验证结果进行缓存,减少实时查询压力。

// Redis 缓存权限验证
$key = "user_access:{$userId}:{$videoId}";
if (!Redis::get($key)) {
$access = DB::table('user_video_access')->where(...)->exists();
Redis::setex($key, 300, $access ? 1 : 0);
}






