PHP API访问 - 在oauth2身份验证后继续

时间:2015-10-18 16:19:04

标签: php api dropbox

这是一个基本问题。我刚刚开始使用API​​调用。我正在尝试使用Dropbox API。

我的应用程序包含以下代码:

<?php
require_once "dropbox-sdk/Dropbox/autoload.php";
use \Dropbox as dbx;
$appInfo = dbx\AppInfo::loadFromJsonFile("app-info.json");
$webAuth = new dbx\WebAuthNoRedirect($appInfo, "CharmsBox/1.0");
$authorizeUrl = $webAuth->start();
print "<p>Authorize the App <a href=\"".$authorizeUrl."\">now</a></p>";
print '
<p class="ui-widget">Auth Key: <input id="authkey">
<a id="btnAuth" class="btn btn-primary btn-large" href="#" tabindex="2">
<span class="glyphicon glyphicon-flash" aria-hidden="true"></span>Authenticate
</a>                              
</p>';  
?>

在另一个标签中,我输入用于验证的用户名和密码。 Dropbox提供身份验证代码。我现在应该使用此代码生成用户ID和访问令牌,如下所示:

list($accessToken, $userId) = $webAuth->finish($authCode);
echo "Authorization complete.\n";
echo "- User ID: $userId\n";
echo "- Access Token: $accessToken\n";

但是由于我的php代码已经完成执行,我无法运行上面的代码。我尝试在另一个PHP脚本中使用以下内容,并使用GET请求:

require_once "dropbox-sdk/Dropbox/autoload.php";
use \Dropbox as dbx;
$appInfo = dbx\AppInfo::loadFromJsonFile("app-info.json");
$webAuth = new dbx\WebAuthNoRedirect($appInfo, "CharmsBox/1.0");
if (isset($_GET['authcode'])) {  
    list($accessToken, $userId) = $webAuth->finish($authCode);
    echo "Authorization complete.\n";
    echo "- User ID: $userId\n";
    echo "- Access Token: $accessToken\n";
    return;
} else {
  print "Unauthenticated call of script!";
  return;
}

然而,这给了我以下错误代码:

Fatal error: Uncaught exception 'InvalidArgumentException' with message ''code' must not be null' in /var/www/virtual/mydomain/split/htdocs/dropbox-sdk/Dropbox/Checker.php

Dropbox的原始示例脚本如下所示:

echo "1. Go to: $authorizeUrl\n";
echo "2. Click \"Allow\" (you might have to log in first).\n";
echo "3. Copy the authorization code.\n";
echo "Enter the authorization code here: ";
$authCode = \trim(\fgets(STDIN));
list($accessToken, $userId) = $webAuth->finish($authCode);
echo "Authorization complete.\n";
echo "- User ID: $userId\n";
echo "- Access Token: $accessToken\n";

如何使用生成的访问代码继续身份验证?具体来说,我如何接受基于Web的输入而不是STDIN并继续身份验证?

1 个答案:

答案 0 :(得分:0)

在网络应用中,您可能希望使用dbx\WebAuth,而不是dbx\WebAuthNoRedirect。查看SDK中的web file browser example