视频打赏系统源码是指一个已经开发好的、可供使用的视频平台或视频直播平台的打赏功能的源代码。这样的源码通常包括用户注册登录、视频上传、观看和打赏功能等模块。用户可以在观看视频或直播过程中通过打赏的方式给视频作者或主播表达赞赏和支持。通过获取视频打赏系统源码,开发者可以快速构建自己的视频打赏平台或直播平台,节省开发时间和成本。
源码演示:s.yunzes.top/ds
一、系统核心功能模块
后端
1.用户认证系统
1.1.用户模型app/model/User.php
<?php
declare (strict_types=1);
namespace app\model;
use think\Model;
use think\model\concern\SoftDelete;
class User extends Model
{
use SoftDelete;
// 自动加密密码
public function setPasswordAttr($value)
{
return password_hash($value, PASSWORD_BCRYPT);
}
// 微信用户关联
public function wechat()
{
return $this->hasOne(WechatUser::class);
}
}
1.2.JWT工具类app/common/JwtAuth.php
<?php
declare (strict_types=1);
namespace app\common;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class JwtAuth
{
private static $key = 'your_secure_key_here';
// 生成Token
public static function createToken(int $userId): string
{
$payload = [
'iss' => 'video_reward_system',
'iat' => time(),
'exp' => time() + 7200,
'uid' => $userId
];
return JWT::encode($payload, self::$key, 'HS256');
}
// 验证Token
public static function verifyToken(string $token): int
{
try {
$decoded = JWT::decode($token, new Key(self::$key, 'HS256'));
return (int)$decoded->uid;
} catch (\Exception $e) {
throw new \think\exception\HttpException(401, 'Invalid token');
}
}
}
1.3.认证控制器app/controller/Auth.php
<?php
declare (strict_types=1);
namespace app\controller;
use app\common\JwtAuth;
use app\model\User;
use think\facade\Db;
use think\facade\Validate;
class Auth extends BaseController
{
// 手机号注册
public function register()
{
$data = $this->request->only(['mobile', 'password', 'code']);
$validate = Validate::rule([
'mobile|手机号' => 'require|mobile|unique:user',
'password|密码' => 'require|length:6,20',
'code|验证码' => 'require|captcha'
]);
if (!$validate->check($data)) {
return json(['code' => 400, 'msg' => $validate->getError()]);
}
$user = User::create([
'mobile' => $data['mobile'],
'password' => $data['password']
]);
return json([
'code' => 200,
'token' => JwtAuth::createToken($user->id)
]);
}
// 微信快捷登录
public function wechatLogin()
{
$code = $this->request->post('code');
$wxInfo = $this->getWechatUserInfo($code); // 获取微信用户信息
Db::startTrans();
try {
$user = User::where('openid', $wxInfo['openid'])->find();
if (!$user) {
$user = User::create([
'openid' => $wxInfo['openid'],
'nickname' => $wxInfo['nickname'],
'avatar' => $wxInfo['avatar']
]);
$user->wechat()->save($wxInfo);
}
Db::commit();
return json(['token' => JwtAuth::createToken($user->id)]);
} catch (\Exception $e) {
Db::rollback();
return json(['code' => 500, 'msg' => '登录失败']);
}
}
// 获取当前用户
public function me()
{
$userId = $this->request->userId; // 通过中间件注入
$user = User::with('wechat')->find($userId);
return json($user->hidden(['password', 'delete_time']));
}
}
2.视频管理服务
// 视频上传接口
public function uploadVideo() {
$file = request()->file('video');
$savePath = \think\facade\Filesystem::disk('oss')->putFile('videos', $file);
Video::create([
'user_id' => auth()->id,
'url' => $savePath,
'cover' => $this->generateVideoCover($file)
]);
}
3.系统集成
// 微信支付回调处理
public function wxpayNotify() {
$result = WxPay::verifyNotify();
if($result && $result['result_code'] == 'SUCCESS') {
Order::updateStatus($result['out_trade_no'], 'paid');
// 分账处理:平台抽成30%
$amount = $result['total_fee'] * 0.7;
Balance::inc($videoOwnerId, $amount);
}
return response('<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>');
}
前端
1.视频播放组件
<script setup>
import { ref } from 'vue';
import axios from '@/plugins/axios';
const form = ref({
mobile: '',
code: '',
password: ''
});
// 执行注册
const handleRegister = async () => {
try {
const { data } = await axios.post('/auth/register', form.value);
localStorage.setItem('token', data.token);
// 跳转到个人中心
} catch (error) {
console.error('注册失败:', error.response.data);
}
};
// 获取当前用户
const loadUserInfo = async () => {
try {
const { data } = await axios.get('/auth/me');
user.value = data;
} catch (error) {
console.error('获取用户信息失败');
}
};
</script>
二、数据库关键设计
-- 打赏记录表
CREATE TABLE `reward_log` (
`id` INT(11) UNSIGNED AUTO_INCREMENT,
`sender_id` INT(11) NOT NULL COMMENT '打赏用户ID',
`receiver_id` INT(11) NOT NULL COMMENT '视频作者ID',
`video_id` INT(11) NOT NULL,
`gift_id` SMALLINT(6) NOT NULL COMMENT '礼物类型',
`amount` DECIMAL(10,2) NOT NULL COMMENT '实际金额',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_video` (`video_id`),
KEY `idx_receiver` (`receiver_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 实时消息表(用于WebSocket推送)
CREATE TABLE `realtime_messages` (
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` INT(11) NOT NULL,
`content` TEXT NOT NULL COMMENT 'JSON消息体',
`is_read` TINYINT(1) DEFAULT 0,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_user_unread` (`user_id`, `is_read`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
结语
视频打赏系统源码目前处于一个发展迅速的阶段,随着在线直播和视频平台的兴起,用户对于打赏主播和创作者的需求不断增加,因此视频打赏系统作为一个重要的功能模块也受到了广泛关注。目前市面上已经有许多成熟的视频打赏系统源码可以使用,这些源码通常提供了完整的打赏流程,包括用户支付、主播/创作者接收打赏款项、系统抽成等功能。这些源码大多基于常见的支付接口(如支付宝、微信支付等)进行集成,同时也考虑了用户体验和安全性等方面的要求。未来,随着在线视频内容市场的进一步扩大和用户付费意识的增强,视频打赏系统将继续发展壮大。未来视频打赏系统可能会更加智能化,例如通过用户行为数据分析提供个性化推荐打赏内容,或者通过区块链技术实现更加安全和透明的打赏流程。另外,视频打赏系统可能会与虚拟货币、社交网络等平台进行深度整合,提供更多元的打赏方式和场景。总的来说,视频打赏系统源码在未来有着广阔的发展前景,需要不断创新和完善,以适应用户需求的不断变化。