我是新手,试图连接Box的API v2。我成功地建立了一个PHP客户端库,感谢developer.box.com/auth第一段中的链接。我已经完整阅读了Box的演练超过两次以及大约100,000个问题并在这里回答了这个问题。用户重定向到Box的授权页面,输入其凭据并单击“允许”后,我的问题就出现了。结果根据我的redirect_uri和登录页面的url而有所不同,我将我的client_id和client_secret放在一起:1)如果我的redirect_uri与我的https://mysite.com/login_with_box匹配,那么用户显然会重定向到同一个网址,将用户发送回Box的授权页面; 2)如果我的redirect_uri与https://mysite.com/login_with_box页面不同,则用户成功返回我的redirect_uri,其url包含30秒的代码。我知道我已经接近搞清楚这一点,但不知道如何在30秒或更短的时间内将代码转换成代码并使用它来显示用户的文件夹,文件,信息或其他任何内容。非常感谢您的考虑。这就是我的立场:
// mysite.com/client.php:
// ...
case 'Box':
$this->oauth_version = '2.0';
$this->request_token_url = '';
$this->dialog_url = 'https://api.box.com/oauth2/authorize?client_id={CLIENT_ID}&response_type=code&redirect_uri={REDIRECT_URI}&state={STATE}';
$this->append_state_to_redirect_uri = '';
$this->access_token_url = 'https://api.box.com/oauth2/token';
$this->authorization_header = true;
$this->url_parameters = false;
break;
// ...
// mysite.com/login_with_box.php:
// ...
$client->client_id = '[my_client_id]';
$client->client_secret = '[my_client_secret]';
if(($success = $client->Initialize())) {
if(($success = $client->Process())) {
if(strlen($client->access_token)) {
$success = $client->CallAPI(
'https://api.box.com/2.0/users/me',
'GET', array(), array('FailOnAccessError'=>true), $user);
}
}
$success = $client->Finalize($success);
}
// ...
答案 0 :(得分:1)
您似乎需要将重定向网址与最初通过OAuth流程向用户发送的网址不同。
例如,您可以让https://mysite.com/login_with_box
通过OAuth流程向用户发送邮件,https://mysite.com/receive_box_oauth_response
是在身份验证过程之后重定向到的网址,并从框中处理OAuth响应。
答案 1 :(得分:1)
我明白了。问题当然完全是我的错。以下是我如何将Box API v2与Box推荐的PHP OAuth库连接起来:
在developers.box.com上创建一个应用,并将所需的redirect_uri设置为https://mysite.com/oauth/login_with_box.php。
在www.phpclasses.org/package/7700-PHP-Authorize-and-access-APIs-using-OAuth.html
在PHP OAuth库的oauth_client.php中添加如下例所示的内容。
case 'Box':
$this->oauth_version = '2.0';
$this->request_token_url = '';
$this->dialog_url = 'https://api.box.com/oauth2/authorize?response_type=code&client_id={CLIENT_ID}&state={STATE}';
$this->append_state_to_redirect_uri = '';
$this->access_token_url = 'https://api.box.com/oauth2/token';
$this->authorization_header = true;
$this->url_parameters = false;
break;
创建类似login_with_box.php的内容并将其添加到PHP OAuth库中。我的login_with_box.php内容如下。
<?php
require('http.php');
require('oauth_client.php');
$client = new oauth_client_class;
$client->server = 'Box';
$client->redirect_uri = 'https://mysite.com/oauth/login_with_box.php';
$client->client_id = 'xxxxxx_BOX_API_CLIENT_ID_xxxxxx';
$client->client_secret = 'xxxxxx_BOX_API_CLIENT_SECRET_xxxxxx';
if(strlen($client->client_id) == 0 || strlen($client->client_secret) == 0)
die('You need an app to do that.');
if(($success = $client->Initialize())) {
if(($success = $client->Process())) {
if(strlen($client->access_token)) {
$success = $client->CallAPI(
'https://api.box.com/2.0/folders/0',
'GET', array('format'=>'json'), array('FailOnAccessError'=>true), $folder);
}
}
$success = $client->Finalize($success);
}
if($client->exit)
exit;
if($success) {
?>
<!doctype html>
<html>
<head>
<title>Box OAuth client results</title>
</head>
<body>
<?php echo '<h1>You successfully logged in with Box</h1>'; echo '<pre>', HtmlSpecialChars(print_r($folder, 1)), '</pre>'; ?>
</body>
</html>
<?php } else { ?>
<!doctype html>
<html>
<head>
<title>OAuth client error</title>
</head>
<body>
<h1>OAuth client error</h1>
<pre>Error: <?php echo HtmlSpecialChars($client->error); ?></pre>
</body>
</html>
<?php } ?>
我希望这有助于某人。