2016-01-10 14 views
5

quickstartガイドに従って、スケジューラと呼ばれるクラスに分割することにしました。私は認証コードの作業中ですが、 "Error 400(OAuth 2 Error)Error Invalid Request Error required parameter:redirect_uri"という問題が発生しています。GoogleクライアントAPI - 欠落している必要なパラメータ:redirect_uri

class scheduler{ 

//The Google Client object 
private $googleClient; 

//the Google Calendar Service ojbect 
private $calendarService; 

/* 
* Google Calendar Setup 
* 
* This creates a Google Client object so that you may create a Google Calendar object. 
* 
*/ 
function __construct(){ 
    //set the application name 
    define("APPLICATION_NAME", "Web client 1"); 
    // 
    define("CREDENTIALS_PATH", "~/scheduler/credentials.json"); 
    // 
    define("CLIENT_SECRET_PATH", __DIR__ . "/scheduler/client_secret.json"); 
    // 
    define("SCOPES", implode(" ", array(Google_Service_Calendar::CALENDAR_READONLY))); 

    /*if(php_sapi_name() != "cli"){ 
     throw new Exception("This application must be run on the command line");  
    }*/ 

    //create the google client 
    $this->googleClient = new Google_Client(); 

    //setup the client 
    $this->googleClient->setApplicationName(APPLICATION_NAME); 
    $this->googleClient->setDeveloperKey("AIzaSyBmJLvNdMYuFhVpWalkUdyStrEBoVEayYM"); 
    $this->googleClient->setScopes(SCOPES); 
    $this->googleClient->setAuthConfigFile(CLIENT_SECRET_PATH); 
    $this->googleClient->setAccessType("offline"); 

    //get the credentials file path 
    $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH); 

    //if the file exists 
    if(file_exists($credentialsPath)){ 

     //get the credentials from the file 
     $accessToken = file_get_contents($credentialsPath); 

    }//if it does not 
    else{ 

     //request the authorization url 
     $authURL = $this->googleClient->createAuthUrl(); 
     //print the authorization ulr 
     echo "<a href=\"$authURL\">Press Me</a><br /><br />"; 

     //prompt the user to enter the auth code 
     print("Enter authentication code: "); 

     // 
     $authCode = trim(fgets(STDIN)); 

     //exchange authorization for an access token 
     $accessToken = $this->googleClient->authenticate($authCode); 

     //store credentials to disk 
     if(!file_exists(dirname($credentialsPath))){ 
      mkdir(dirname($credentialsPath), 0700, true); 
     } 

     //put the contents into the credential files 
     file_put_contents($credentialsPath, $accessToken); 
    } 

    $this->googleClient->setAccessToken($accessToken); 

    //refresh token if its expired 
    if($this->googleClient->isAccessTokenExpired()){ 
     $this->googleClient->refreshToken($client->getRefreshToken()); 

     file_put_contents($credentialsPath, $this->googleClient->getAccessToken()); 
    } 
} 

解決策が見つからなかった原因がわかりました。私のGoogleデベロッパーコンソールでは、 "http://localhost/"をAuthorized redirect URIsセクションに入れてみました。これは私にこのエラーを与える "申し訳ありませんが、問題があります。情報を入力し、それを確認して、もう一度やり直してください。ローカルホストサーバーのリダイレクトURIを受け入れるようにGoogle Developer Consoleを設定する方法はありますか?

+0

手伝って喜んで誰? –

答えて

3

私はそれを動作させました。私がしなければならなかったことは、Google Developer Consoleに戻り、作成したプロジェクトを削除することでした。その後、新しいプロジェクトを作成するとき、私は自分のlocalhostのURLを保存することができました。発生していた問題は、私が現時点では不可能と言っていたリダイレクトURLに自分のlocalhost URLを追加しようとしたときでした。作成ボタンを押す前にリダイレクトURLを設定すると、それは正常に受け入れられます。

+1

あなたのソリューションを投稿していただきありがとうございます - 私は既存のプロジェクトを編集し、承認されたリダイレクトURIを追加することができました... –

+0

開発者は問題ありません。喜んで助けてください。 –

+4

これは、ダウンロードしたクライアントシークレットjsonファイルも更新する必要があるためです。したがって、uriなしで資格情報を作成してjsonをダウンロードすると、jsonには 'redirect_uris'プロパティがありません。その後、ダッシュボードに追加して追加する場合は、クライアントシークレットjsonを再ダウンロードしてプロジェクトに追加する必要があります。 –