3

私はこれが初めてで、Box の API v2 を接続しようとしています。developers.box.com/auth の最初の段落にあるリンクのおかげで、PHP クライアント ライブラリを正常にセットアップできました。私は Box のウォークスルーを 2 回以上読み、この問題に関して約 100,000 件の質問と回答がここに寄せられました。ユーザーが Box の認証ページにリダイレクトし、資格情報を入力して [許可] をクリックすると、問題が発生します。結果は、 redirect_uriと、client_id と client_secret を配置したログイン ページの URL によって異なります、ユーザーを Box の認証ページに送り返します。2) 私の redirect_uri がhttps://mysiteと異なる場合。ページ、その後、ユーザーは正常にリダイレクト 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

私はそれを考え出した。もちろん、問題は完全に私のせいでした。Box が推奨する PHP OAuth ライブラリに Box API v2 を接続する方法は次のとおりです。

  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 に答える