2015-06-04 3 views
0

У меня проблема с авторизацией в oauth2 google picasa API PHP.Требуется авторизация oauth2 веб-альбом google picasa

Я создал следующий код:

$fields_param_string="code=".$_GET["code"]."& 
client_id=XXXXXXXXXX.apps.googleusercontent.com& 
client_secret=rY5sYxXXXXXXXXX& 
redirect_uri=".urlencode("http://www.EXAMPLE.pl/upload.php"). 
"&grant_type=authorization_code"; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_param_string); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: application/x-www-form-urlencoded")); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$response = curl_exec($ch); 

Тогда я получаю правильный ответ (я заменил некоторые данные не взломать его):

"access_token": "ya29.iXXXXXXXXXXXXXX", 
"token_type": "Bearer", 
"expires_in": 3600, 
"id_token": 
"eyJhbXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 

Затем я запустить следующие действия для создания альбом галерея:

$json = json_decode($response, true); 
$url="https://picasaweb.google.com/data/feed/api/user/default"; 

$myvars="<entry xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gphoto='http://schemas.google.com/photos/2007'> 
      <title type='text'>".$wierszAD["THE_NAME_OF_ALBUM"]."</title> 
      <summary type='text'>".$wierszAD[""]."</summary> 
      <gphoto:location>Poland</gphoto:location> 
      <gphoto:access>private</gphoto:access> 
      <gphoto:timestamp>1152255600000</gphoto:timestamp> 
      <media:group> 
       <media:keywords>".$albumName_url."</media:keywords> 
      </media:group> 
      <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album'></category> 
    </entry>"; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $myvars); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: 
application/atom+xml")); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$response = curl_exec($ch);  

curl_close($ch);  

к сожалению, я получаю ошибку:

Authorization required 

Если я заменяю следующий код в:

$url="https://picasaweb.google.com/data/feed/api/user 
    /[email protected]/full?access_token=".$json["access_token"]; 

Я получаю следующее сообщение об ошибке:

Token invalid - AuthSub token has wrong scope 

Так что я не знаю, как разрешить во время работы URL, которые позволяют мне создать альбом picasa.

Пожалуйста, помогите мне.

+0

Я решил это, предоставив правильную область для Picasa, которая является 'https: // picasaweb.google.com/data', хотя и использует API Google. Я не знаю, чтобы установить это через запросы cURL. –

+0

Можете написать полный ответ ниже. – Huey

ответ

-2

Используйте следующую функцию вместо локонов

==================================

Refer Above given library for connecting with google 


    function googleConnect() 
    { 

     require_once ('lib/Google/autoload.php'); 

     $client = new Google_Client(); 

      ---Set your google crdentials here--- 

     $client->setClientId(CLIENT_ID); 

     $client->setClientSecret(CLIENT_SECRET); 

     $client->setRedirectUri(GOOGLE_REDIRECT_URI); 

     ---You can set access type offline so that you--- 
     ---use user information when he is offline --- 

     $client->setAccessType('offline'); 

     $client->setApprovalPrompt('force'); 

     ---Add your scope here-- 

     $client->addScope("openid email"); 

     $client->addScope("https://picasaweb.google.com/data/"); 

     $client->addScope("https://www.googleapis.com/auth/userinfo.profile"); 

    return $client; 



    } 

------------------------------------------------------------------------ 

    ----get code and get acesss token--- 

if (isset($_GET['code'])) 
{ 


    $client->authenticate($_GET['code']); 

    $_SESSION['access_token'] = $client->getAccessToken(); 

    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 

    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 


} 

------------------------------------------------------------------------ 


if (isset($_SESSION['access_token']) && $_SESSION['access_token']) 

{ 

    $client->setAccessToken($_SESSION['access_token']); 

} 

else 

{ 

    $authUrl = $client->createAuthUrl(); 

} 

------------------------------------------------------------------------ 
if ($client->getAccessToken()) 

{ 

    $token = $_SESSION['access_token'] = $client->getAccessToken(); 

$token = json_decode($token); $token = $token->access_token; 

} 
+1

Можете добавить пояснения. Также ** [пожалуйста, отформатируйте свой код] (http://stackoverflow.com/help/formatting) **. – Huey

+0

добавлено описание и формат кода. – shalini