2013-01-04 1 views
3

상자의 API v2에 연결하려고 시도하면서 새로운 점이 있습니다. 필자는 PHP 클라이언트 라이브러리를 성공적으로 설정했습니다.이 라이브러리는 developers.box.com/auth의 첫 번째 단락에있는 링크 덕분에 발견되었습니다. 나는 Box의 walkthrough를 2 번 이상 읽었으며 그 문제와 관련하여 약 10 만 개의 질문과 대답을 읽었다. 내 문제는 사용자가 Box의 승인 페이지로 리디렉션하고 자격 증명을 입력 한 다음 "허용"을 클릭하면 발생합니다. 결과는 내 redirect_uri 및 내 client_id 및 client_secret을 입력 한 로그인 페이지의 URL에 따라 다릅니다. 1) 내 redirect_uri가 https://mysite.com/login_with_box과 일치하면 사용자가 동일한 URL로 리다이렉트하여 분명히 사용자를 다시 전송합니다. Box의 승인 페이지로; 2) redirect_uri가 https://mysite.com/login_with_box 페이지와 다른 경우 사용자는 30 초 코드가 포함 된 URL 인 redirect_uri로 정상적으로 돌아갑니다. 나는 이것을 알아내는 것에 가깝지만 30 초 이내에 코드를 토큰으로 변환하고 사용자의 폴더, 파일, 정보 또는 그 밖의 것을 표시하는 방법을 알지 못합니다. 많은 관심을 가져 주셔서 감사합니다. 내가 어디에 서 여기 : 처음에 OAuth는 과정을 통해 사용자에게 전송하는 URL에서 다른 무언가로 당신의 리디렉션 URL이 필요한 것처럼사용자가 액세스를 허용 한 후 상자의 '코드'를 '토큰'으로 변환하는 방법

// 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); 
} 

// ... 

답변

1

알아 냈습니다. 문제는 전적으로 내 잘못이었습니다. 여기에 내가 상자에 의해 reccommended는 PHP의 OAuth 라이브러리와 함께 박스 API v2가 엮은 방법은 다음과 같습니다

  1. 는 developers.box.com에 응용 프로그램을 만들고 https://mysite.com/oauth/login_with_box.php 같은에 필요한 redirect_uri로 설정합니다.

  2. 다운로드 www.phpclasses.org/package/7700-PHP-Authorize-and-access-APIs-using-OAuth.html

  3. 에서 PHP의 OAuth 라이브러리는 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 } ?> 
    

나는이 사람을 도움이되기를 바랍니다.

+0

안녕하세요,이 방법으로 파일을 추가하고 제거하는 방법에 대해 궁금한 점이 있으십니까?이 방법을 사용하여 연결을 얻을 수 있었지만 그곳에서 어디로 가야할지 확실하지 않습니다. \ –

+0

안녕하세요 A_Wheel_Monkey, 액세스 토큰을 얻은 후에는 PHP OAuth 라이브러리를 포함하여 다른 곳에서 API를 호출 할 수 있습니다. 예를 들어 위의 코드는 my redirect uri, mysite.com/oauth/login_with_box.php를 강화합니다. 나에게 Box에 액세스 할 수있는 권한을 부여한 사용자는 mysite.com/oauth/login_with_box.php로 돌아가서 "성공!" 메시지 및 mysite.com/oauth/files.php에 대한 링크. Files.php에는 라이브러리가 포함되어 있지만 액세스 토큰에 대한 API를 호출하는 대신 api.box.com/2.0/files/content와 같은 다른 요청에 대한 요청이 이루어집니다. – mcormc

+0

나는이 시점에서 액세스 토큰을 수집하지 않는다는 것을 깨달았는데 액세스 토큰에 대한 API 요청을 보내야했지만, 새로 고침 토큰을 사용하기 위해 oauth 클래스를 편집하는 과정에 있습니다. 새로운 액세스 토큰을 얻으려면 (어떤 핸들을하지 않습니다) 나는 거의 내가 거기에있어 내가 공유 할 것입니다 (oauth 클래스가 큽니다 그래서 내가 할 수있는 최선을 참조하려고합니다) –

1

것 같습니다.

예를 들어 https://mysite.com/login_with_box 사용자를 OAuth 프로세스를 통해 보내고 https://mysite.com/receive_box_oauth_response을 인증 프로세스 후 리디렉션되고 OAuth 응답을 처리하는 상자로 지정할 수 있습니다.

+0

감사합니다. Sean, 실제로 리디렉션 URL은 내 문제와 관련이 있습니다. 나는 곧 나의 해결책을 게시 할 것이다. – mcormc