2014-12-11 3 views
1

Используя код ниже, я успешно получил токен и используя этот токен, также получаю детали пользователей, но когда я пытаюсь опубликовать/вставить момент в стене пользователя, я вижу следующее сообщение об ошибке(401) Неавторизованный при попытке вставить момент с помощью API Google+

Fatal error: Uncaught exception 'Google_Service_Exception' с сообщением 'Error calling POST https:--www.googleapis.com/plus/v1/people/me/moments/vault: (401) Unauthorized' in $_SESSION['access_token_gp']

Я получил маркер пользователя, если пользователь Войти с помощью моего сайта в странице входа прошу ниже разрешения

$client->addScope("email"); 
$client->addScope("https://www.googleapis.com/auth/plus.stream.write"); 
$client->addScope("https://www.googleapis.com/auth/plus.login"); 

Если я print_r ($ tokenInfo); вы увидите всю область действия, которую я задаю во время входа в систему.

Полный код:

session_start(); 
require_once realpath(dirname(__FILE__) . '/google-api-php-client-master/autoload.php'); 

$client_id = 'my_client_id'; 
$client_secret = 'my_secret_key'; 
$redirect_uri = 'my_redirect_url'; 

// code to post in google plus start here // 
$client = new Google_Client(); 
$client->setClientId($client_id); 
$client->setClientSecret($client_secret); 
$client->setRedirectUri($redirect_uri); 

if (isset($_SESSION['access_token_gp'])) { 
    // Verify the token 
    $token = json_decode($_SESSION['access_token_gp']); 
    $reqUrl = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$token->access_token; 
    $req = new Google_Http_Request($reqUrl); 
    $tokenInfo = get_object_vars(json_decode($client->getAuth()->authenticatedRequest($req)->getResponseBody())); 
    if($tokenInfo['expires_in'] <= 0){ 
     $client->authenticate($_SESSION['access_token_gp']); 
     $_SESSION['access_token_gp'] = $client->getAccessToken(); 
    } else { 
     $client->setAccessToken($_SESSION['access_token_gp']); 
    } 

    $plusservicemoment = new Google_Service_Plus_Moment(); 
    $plusservicemoment->setType("http://schemas.google.com/AddActivity"); 

    $plusService = new Google_Service_Plus($client); 

    $item_scope = new Google_Service_Plus_ItemScope(); 
    $item_scope->setId($tokenInfo['user_id']); 
    $item_scope->setType("http://schemas.google.com/AddActivity"); 
    $item_scope->setName("The madexme Platform"); 
    $item_scope->setDescription("A page that describes just how madexme is work!"); 
    //$item_scope->setImage("full image path here"); 
    $plusservicemoment->setTarget($item_scope); 
    $result = $plusService->moments->insert('me','vault',$plusservicemoment); 
    //print_r($result); 
} 
// code to post in google plus end here // 
+0

Вы знаете, что публикация момента не будет размещена на стене пользователей в Google+ правильно? – DaImTo

+0

да, мне просто нужно, чтобы на моем сайте было какое-то сообщение в учетной записи пользователя, например, функция совместного доступа в google + –

ответ

1

Убедитесь, что последняя версия клиента экспромты из GitHub. Что-то не так с вашим соединением Oauth2. Этот код частично преобразован из моего учебника Google Google Calendar API. У меня нет возможности проверить его прямо сейчас. Но это должно быть близко. Я провешу его сегодня вечером.

<?php  
require_once 'Google/Client.php'; 
require_once 'Google/Service/Plus.php'; 

session_start(); 
$client = new Google_Client(); 
$client->setApplicationName("Client_Library_Examples"); 
$client->setDeveloperKey("AIzaSyBBH88dIQPjcl5nIG-n1mmuQ12J7HThDBE"); 
$client->setClientId('2046123799103-i6cjd1hkjntu5bkdkjj5cdnpcu4iju8p.apps.googleusercontent.com'); 
$client->setClientSecret('6s4YOx3upyJhtwnetovfK40e'); 
$client->setRedirectUri('http://localhost/google-api-php-client-samples/Calendar/oauth2Pure.php'); 
$client->setAccessType('offline'); // Gets us our refreshtoken 

$client->setScopes(array(https://www.googleapis.com/auth/plus.login')); 


//For loging out. 
if (isset($_GET['logout'])) { 
    unset($_SESSION['token']); 
} 


// Step 2: The user accepted your access now you need to exchange it. 
if (isset($_GET['code'])) { 

    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
    $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 

// Step 1: The user has not authenticated we give them a link to login  
if (!isset($_SESSION['token'])) { 

    $authUrl = $client->createAuthUrl(); 

    print "<a class='login' href='$authUrl'>Connect Me!</a>"; 
}  
// Step 3: We have access we can now create our service 
if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
    print "<a class='logout' href='".$_SERVER['PHP_SELF']."?logout=1'>LogOut</a><br>"; 

    $service = new Google_Service_Plus($client);  

    $moment = new Google_Moment(); 
    $moment->setType('http://schemas.google.com/AddActivity'); 
    $itemScope = new Google_ItemScope(); 
    $itemScope->setUrl('https://developers.google.com/+/plugins/snippet/examples/thing'); 
    $moment->setTarget($itemScope); 
    $plus->moments->insert('me', 'vault', $moment); 
?> 

Снова я надеюсь, вы понимаете, что это не будет отображаться на странице + странице пользователя.

+0

спасибо за ваш ответ. Я тестирую ваш данный пример, но в новом классе Google_Moment() Google google + api не существует, поэтому я заменяю его новый класс и он показывает ** Ошибка при вызове POST https://www.googleapis.com/plus/v1/people/me/moments/vault?key=my_API_key_here: (403) Доступ не настроен ** –

+0

да, вы собираетесь необходимо проверить документацию и посмотреть библиотеку клиентов. Убедитесь, что в консоли разработчика включен API Google+. что даст вам доступ к не настроенной ошибке. У меня нет возможности проверить это до более позднего времени. – DaImTo

+1

. Загрузите библиотеку google здесь. Https://github.com/google/google-api-php-client –

Смежные вопросы