PHP API访问-在oauth2认证后继续


PHP API access - continue after oauth2 authentication

这是一个相当基本的问题。我刚刚开始使用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";

如何使用生成的accesscode继续进行身份验证?具体来说,我如何接受基于web的输入而不是STDIN并继续身份验证?

在web应用程序中,您可能希望使用dbx'WebAuth,而不是dbx'WebAuthNoRedirect。查看SDK中的web文件浏览器示例。