实施Google API示例时,不能超过OAuth 2.0

时间:2018-07-19 18:11:08

标签: php oauth-2.0 google-api google-oauth google-oauth2

我正在尝试使用PlaylistItems: insert YouTube Data API sample通过PHP通过编程将YouTube视频添加到播放列表中。

我将示例托管在https://[mydomain].com/custom/yt/insert.php上,并在该目录中运行提供的composer命令以按照说明安装api客户端。

我在API控制台中将OAuth重定向地址设置为https://[mydomain].com/custom/yt/insert.php,并下载了secrets.json文件并将其托管在同一目录中。

enter image description here

Screen shot showing API settings

当我在浏览器中运行insert.php脚本时,我将进入以下页面:

Open the following link in your browser: https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=194988007367-cnn3jdo0c4j6njsvorpcv1s5jdhej6iu.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fdjpanaflex.com%2Fcustom%2Fyt%2Finsert.php&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&approval_prompt=auto Enter verification code:

没有提供验证码,但是当我访问该网址时,我会进入身份验证过程,并且似乎可以成功完成该操作。

但是,未执行将视频添加到播放列表的API调用:

playlistItemsInsert($service,
array('snippet.playlistId' => '[PLAYLIST ID OMITTED]',
       'snippet.resourceId.kind' => 'youtube#video',
       'snippet.resourceId.videoId' => '[VIDEO ID OMITTED]',
       'snippet.position' => ''),
'snippet', 
array('onBehalfOfContentOwner' => ''));

相反,我返回到页面,提示我完成授权过程。

为什么没有进行我的API调用?是否没有存储我的OAuth 2.0身份验证?如果是这样,我该如何纠正呢?

1 个答案:

答案 0 :(得分:1)

事实证明,Google的示例旨在从CLI运行,而我基于浏览器的实现并未提供提示用户输入getClient()函数中一行所要求的输入的方法来自STDIN的输入。

由于auth代码是作为$authUrl变量中的参数提供的,该变量在首次运行脚本时会显示在屏幕上,因此我能够通过替换来解决我的问题

$authCode = trim(fgets(STDIN));

具有:

$authCode = $_GET['code'];