本文目录导读:

在PHP项目中对接短视频接口(如抖音、快手、微信视频号等),通常包含以下几个核心步骤,这里以最常见的抖音开放平台为例,提供一个通用的对接流程和核心代码示例。
第一步:准备工作
- 注册开发者账号:在目标平台(如抖音开放平台、快手开放平台)注册成为开发者。
- 创建应用:
- 填写应用名称、简介、Logo。
- 选择应用类型(网站应用、移动应用等)。
- 关键点:设置回调域名(用于授权)和IP白名单(用于服务端API调用,提升安全性)。
- 获取凭证:
- App Key (Client Key):应用的唯一标识。
- App Secret (Client Secret):应用的密钥,绝对不要暴露在前端代码中。
第二步:核心功能一:用户授权(获取Access Token)
大部分短视频平台的API需要代表用户操作(如获取用户信息、发布视频),因此需要OAuth 2.0授权流程。
流程概览
- 引导用户跳转:生成授权URL,用户点击后跳转到平台授权页面。
- 用户同意授权:用户登录并同意后,平台会回调你的服务器,并附带一个
code。 - 用
code换取access_token:你的PHP后端拿着code去平台服务器换取access_token和refresh_token。 - 保存
access_token:将其与用户ID绑定,存入数据库(通常有效期2-7天,过期后需用refresh_token刷新)。
PHP 代码示例(抖音)
<?php
// 1. 生成授权URL
$appKey = '你的AppKey';
$redirectUri = 'https://你的域名/oauth/callback'; // 需在平台配置
$scope = 'user_info,video.upload'; // 需要的权限列表
$state = bin2hex(random_bytes(16)); // 防止CSRF攻击
// 存入Session或Redis,用于回调时验证
session_start();
$_SESSION['oauth_state'] = $state;
$authUrl = "https://open.douyin.com/platform/oauth/connect?client_key={$appKey}&response_type=code&scope={$scope}&redirect_uri=" . urlencode($redirectUri) . "&state={$state}";
// 重定向用户
header("Location: $authUrl");
exit;
// 2. 回调处理 (接收code)
// 在 /oauth/callback 文件中
session_start();
if ($_GET['state'] !== $_SESSION['oauth_state']) {
die('State验证失败,可能被CSRF攻击');
}
$code = $_GET['code'];
$appSecret = '你的AppSecret';
// 3. 向服务器发送POST请求,换取access_token
$tokenUrl = "https://open.douyin.com/oauth/access_token/";
$postData = [
'client_key' => $appKey,
'client_secret' => $appSecret,
'code' => $code,
'grant_type' => 'authorization_code'
];
// 使用 cURL 发起请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $tokenUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if (isset($data['data']['access_token'])) {
$accessToken = $data['data']['access_token'];
$openId = $data['data']['open_id']; // 用户的唯一标识
$refreshToken = $data['data']['refresh_token'];
// 保存到数据库:与用户ID关联
// saveTokenToDB($userId, $openId, $accessToken, $refreshToken);
echo "授权成功!";
} else {
// 处理错误
echo "授权失败: " . $response;
}
第三步:核心功能二:调用视频相关API
有了 access_token 后,就可以调用平台的REST API了。
获取用户视频列表
function getUserVideos($accessToken, $openId) {
$url = "https://open.douyin.com/video/list/?open_id={$openId}&access_token={$accessToken}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 使用示例
$videos = getUserVideos($accessToken, $openId);
print_r($videos['data']['list']);
发布视频(上传)
这是最复杂的部分,通常分为两步(抖音为例):
- 初始化上传:获取上传凭证(upload_url)。
- 分片上传:如果视频较大(> 4MB),需要分片上传,然后调用合并接口。
// 1. 初始化上传
$initUrl = "https://open.douyin.com/video/upload/init/";
$postData = json_encode([
'access_token' => $accessToken,
'open_id' => $openId,
]);
// cURL请求...
$response = json_decode(curlExec($initUrl, $postData), true);
$uploadUrl = $response['data']['upload_url']; // 获取到的上传地址
$uploadId = $response['data']['upload_id']; // 上传任务ID
// 2. 上传视频文件 (假设文件较小)
$filePath = '/path/to/your/video.mp4';
$fileSize = filesize($filePath);
$chunk = file_get_contents($filePath);
$uploadChunkUrl = "{$uploadUrl}?upload_id={$uploadId}&part_number=1"; // 分片号
// 使用 cURL 发送 PUT 或 POST 请求,附上文件内容
// ...
// 3. (分片上传后) 调用完成接口
$completeUrl = "https://open.douyin.com/video/upload/complete/";
// 发送所有parts信息...
注意:涉及大文件上传时,建议使用平台提供的服务端SDK,它们封装了分片、重试等复杂逻辑。
第四步:视频内容获取与分析
如果你的需求是获取其他用户或公开视频的数据(如搜索、数据分析),流程会简单一些,通常不需要用户授权,使用应用级Access Token或Client Credentials即可。
- 抖音开发者工具中的视频数据接口。
- 示例:获取视频的点赞数、评论数。
$videoId = '视频ID'; $url = "https://open.douyin.com/video/data/?video_ids=[\"{$videoId}\"]&access_token={$appAccessToken}"; // 发起请求... 返回的data中可能包含 digg_count (点赞数), comment_count (评论数) 等。
常见平台对比
| 平台 | 授权方式 | 主要API | 特殊限制 | 官方SDK (PHP) |
|---|---|---|---|---|
| 抖音 | OAuth 2.0 | 用户信息、视频发布/列表、评论 | 企业号权限不同;分片上传较复杂 | 有 (但需关注更新) |
| 快手 | OAuth 2.0 | 用户信息、视频上传、商业开放 | 审核较严;需要申请具体能力 | 有 (GitHub) |
| 微信视频号 | 微信开放平台 | 发布视频、获取视频列表 | 需认证服务号;视频号需开通带货等权限 | 有 (微信官方SDK) |
| YouTube Data API | OAuth 2.0 | 视频列表、上传、搜索 | 全球通用;需要Google Cloud项目 | 有 (Google API Client) |
关键注意事项
- Token过期处理:务必实现
refresh_token的自动刷新逻辑,避免用户频繁重新授权。 - IP白名单:大部分平台的API调用对服务器IP有严格限制,生产环境记得配置。
- 频率限制:每个平台都有QPS限制(每秒请求次数),超限会返回
4xx错误,需要做本地缓存或重试机制。 - 错误处理:统一处理API返回的错误码(如
access_token过期、权限不足)。if (isset($apiResult['error_code'])) { switch ($apiResult['error_code']) { case 10001: // access_token过期 // 调用 refresh_token 接口 break; default: // 记录日志 或 返回友好提示 } } - 安全性:
App Secret存储在环境变量或配置文件中,禁止写入代码。- 使用
state参数防御CSRF攻击。 - 所有API请求使用HTTPS。
总结实现流程
- 选择SDK:优先查找并使用目标平台官方或高Star的PHP SDK(如
alibaba/aliyun-php-sdk-dyvmsapi用于阿里云,或joanhey/php-douyin等社区包)。 - 实现授权:完成OAuth 2.0的
code换取token流程。 - 封装API客户端:创建一个类,统一处理签名、Token刷新、cURL请求和错误码。
- 数据库设计:设计
user_third_account表,存储platform(平台名)、open_id、access_token、refresh_token、expire_time。 - 业务逻辑:根据需求调用对应的API,如上传视频时先初始化、再上传、最后回调通知用户。
如果只是简单的展示或分析(不需要代表用户上传),可以优先考虑使用数据开放API,门槛相对较低,如果需要用户授权操作,则必须走完整的OAuth 2.0流程。