3

我是新手,试图连接 Box 的 API v2。我成功地设置了一个 PHP 客户端库,感谢 developer.box.com/auth 上第一段中的链接。我已经完整阅读了 Box 的演练两次以上,以及关于此事的大约 100,000 个问题和回复。我的问题发生在用户重定向到 Box 的授权页面、输入他的凭据并单击“允许”后。结果根据我的 redirect_uri 和我放置 client_id 和 client_secret 的登录页面的 url 而有所不同: 1) 如果我的 redirect_uri 与我的https://mysite.com/login_with_box匹配,则用户显然会重定向到同一个 url ,然后将用户返回到 Box 的授权页面;和 2) 如果我的 redirect_uri 与https://mysite 不同。页面,然后用户成功返回到我的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);
}

// ...
4

2 回答 2

1

看起来您需要重定向 URL 与最初通过 OAuth 流程向用户发送的 URL 不同。

例如,您可以https://mysite.com/login_with_box通过 OAuth 流程发送用户,并https://mysite.com/receive_box_oauth_response成为在 auth 流程之后重定向到的 URL,并处理来自 box 的 OAuth 响应。

于 2013-01-05T23:13:15.760 回答
1

我想到了。当然,问题完全是我的错。下面是我如何将 Box API v2 与 Box 推荐的 PHP OAuth 库连接起来:

  1. 在developers.box.com 上创建一个应用程序并将所需的redirect_uri 设置为类似https://mysite.com/oauth/login_with_box.php的内容。

  2. 在以下位置下载 PHP OAuth 库www.phpclasses.org/package/7700-PHP-Authorize-and-access-APIs-using-OAuth.html

  3. 在 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;
    
  4. 创建类似 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 } ?>
    

我希望这对某人有所帮助。

于 2013-01-08T19:31:43.443 回答