У меня проблема с авторизацией в 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.
Пожалуйста, помогите мне.
Используйте следующую функцию вместо 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;
}
Других решений пока нет …