快手联盟Content API必须使用后台生成的30天有效期access_token鉴权,调用/ads/positions接口需GET请求、带Bearer认证头、必传ad_type=short_video参数,position_id须以字符串处理避免PHP整型截断。

快手联盟 Content API 的鉴权方式必须用 access_token,不是 client_id + client_secret 直接调用
很多人卡在第一步:以为像 OAuth2 一样先拿 code 再换 token,其实快手联盟的 content_api 要求的是「长期有效的 access_token」,由联盟后台手动申请生成,有效期 30 天,且不支持自动刷新。
实操建议:
- 登录 快手联盟后台 →「开发者管理」→「内容 API 授权」→ 创建应用并获取
access_token(注意不是refresh_token) - 这个
access_token要当敏感凭据保管,不能硬编码进 PHP 文件,建议存入环境变量或配置中心 - 调用任何接口前,请求头必须带
Authorization: Bearer {access_token},漏掉或格式错(比如写成Bearer:{access_token}少空格)会直接返回401 Unauthorized
获取短视频广告位数据得调 /openapi/v1/ads/positions,不是 /ad/positions 或其它路径
快手文档里接口路径容易看混,尤其老文档残留了测试路径或内部路径。真实可用的广告位列表接口只有这一个标准路径,且只支持 GET,不接受 POST 传参。
常见错误现象:
立即学习“PHP免费学习笔记(深入)”;
- 调用
/ad/positions返回404 Not Found - 用
POST提交参数,返回405 Method Not Allowed - 没加
Content-Type: application/json头(虽然 GET 不需要 body,但部分网关会校验 header)
PHP 示例(用 file_get_contents 最简场景):
$token = $_ENV['KUAISHOU_ACCESS_TOKEN'] ?? '';
$url = 'https://openapi.kuaishou.com/openapi/v1/ads/positions?ad_type=short_video';
$opts = [
'http' => [
'method' => 'GET',
'header' => "Authorization: Bearer {$token}\r\nContent-Type: application/json\r\n"
]
];
$result = file_get_contents($url, false, stream_context_create($opts));
ad_type=short_video 是必传参数,且值区分大小写、不能拼错
快手广告位接口对 ad_type 参数非常严格:必须显式传,值只能是 short_video(全小写、下划线),传 shortvideo、ShortVideo 或漏掉都会返回空数组或 400 Bad Request。
使用场景中要注意:
- 如果你同时要拉信息流和激励视频位,得分别调两次:一次
ad_type=short_video,一次ad_type=reward_video - 参数要 URL 编码,但
short_video本身不含特殊字符,不用额外处理;如果拼接 URL 时用了http_build_query(),确保它没把下划线转义 - 某些 SDK 封装层会默认加
ad_type=all,这种调用一定失败,得手动覆盖
返回的 position_id 是字符串,PHP 里别用 intval() 强转再传给下游
快手返回的广告位 ID(如 "6789012345678901234")是长度超 19 位的字符串,PHP 里用 intval() 或 (int) 强转会变成 9223372036854775807(64 位最大整数),后续填充到前端或发给其他服务就错位了。
性能与兼容性影响:
- MySQL 存储时字段类型必须是
VARCHAR(32)或更长,不能是BIGINT - 如果用
json_decode($json, true),PHP 默认会把纯数字字符串转成 int,得加JSON_BIGINT_AS_STRING标志 - 示例修正写法:
$data = json_decode($result, true, 512, JSON_BIGINT_AS_STRING);
这事看着小,但上线后发现广告请求匹配不上位,查半天才发现 ID 被截断了——这种坑通常出现在联调后期,日志里还看不出异常。



















