使用Dailymotion API遇授权异常,请求排查PHP代码问题
排查Dailymotion API授权错误:DailymotionAuthRequiredException
从你给出的错误栈和代码来看,这个DailymotionAuthRequiredException本质是授权流程没有成功获取到有效访问令牌,导致后续调用uploadFile时触发了权限校验失败。下面是几个关键的排查点和修复方案:
1. 确认密码授权模式已在开发者后台启用
Dailymotion的GRANT_TYPE_PASSWORD(资源所有者密码凭证授权)并不是默认开启的。你需要登录Dailymotion开发者控制台,找到你的应用,在“Settings”或“Authorization”标签下,确认Password Grant选项已经被勾选启用。如果没开,这个授权模式根本无法生成令牌,自然会触发授权失败的错误。
2. 修复代码中未定义的变量
你的代码里调用video.create时用到了$title和$description,但这两个变量在前面没有定义赋值。虽然这不是当前授权错误的直接原因,但后续执行到这一步肯定会报错,建议先补上:
$title = "我的测试视频"; $description = "这是通过API上传的测试视频";
3. 添加异常捕获,获取更详细的错误信息
当前代码没有任何异常处理逻辑,很难定位授权失败的具体原因(比如用户名密码错误、权限范围不匹配、API密钥错误等)。建议把核心逻辑包裹在try-catch块里,捕获DailymotionException来获取具体错误:
<?php include("Dailymotion.php"); $apiKey = "xxxxxxxxxxxxxxx"; $apiSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"; $user = "my username"; $pwd = "my password"; $filepath = "Test.mp4"; // 补上未定义的变量 $title = "测试视频标题"; $description = "测试视频描述"; try { $api = new Dailymotion(); // 执行授权 $api->setGrantType( Dailymotion::GRANT_TYPE_PASSWORD, $apiKey, $apiSecret, array('manage_videos', 'write','delete'), array('username' => $user, 'password' => $pwd) ); // 上传文件 $url = $api->uploadFile($filepath); // 创建视频 $result = $api->call('video.create', array( 'url' => $url, 'title' => $title, 'description' => $description, 'private' => 'false', 'published' => 'true', )); echo "视频上传成功,ID:" . $result['id']; } catch (DailymotionAuthRequiredException $e) { echo "授权错误:" . $e->getMessage(); } catch (DailymotionException $e) { echo "API调用错误:" . $e->getMessage(); } ?>
4. 校验核心参数的正确性
- 确认
$user是你的Dailymotion用户名(不是邮箱),$pwd是正确的密码,注意大小写和特殊字符; - 检查
$apiKey和$apiSecret是否从开发者后台完整复制,没有多余的空格或拼写错误; - 权限范围
array('manage_videos', 'write','delete')是正确的,这些权限足够完成上传和创建视频的操作。
如果做完以上排查还是报错,通过catch块打印的错误信息应该能帮你定位更具体的问题(比如“invalid credentials”就是用户名密码错了,“unauthorized grant type”就是密码授权没开)。
内容的提问来源于stack exchange,提问作者Scott McGee
相关产品推荐
相关产品推荐

