Требуется авторизация oauth2 веб-альбом Google Picasa

У меня проблема с авторизацией в oauth2 Google Picasa API PHP.

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

$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

Решение

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

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

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;

}
-2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]