2016-01-12 1 views
0

Я пытаюсь использовать google api для покупок (продавцов), и я застрял в этой проблеме.Google API OAuth в php 401 Требуется Войти

Я не очень хорошо знаком с php, но для меня код кажется прекрасным, все, что я хочу сделать, это попытаться достать предметы из моего магазина. Я установил идентификатор клиента и секрет клиента в консоли разработчика в соответствии с предлагаемыми действиями Google, но все же после регистрации я получаю сообщение об ошибке.

Вот код, я использую:

<?php 

/* 
* Uses google API to make an authorized request trough a google dev console project. 
*/ 

require_once __DIR__ . '/../../google-api-php-client-master/vendor/autoload.php'; 
//require_once 'Google/Client.php'; 
//require_once 'Google/Service/ShoppingContent.php'; 
require_once '../Config.php'; 

$redirect_uri = $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //this is used during the auth process 
//$merchantId = $_POST['merchantId']; 
$merchantId = Config::MERCHANT_ID; 
$service; 

$client = Config::getGoogleClient(); 

$client->setRedirectUri($redirect_uri); 
doOAuth($client); 
echo "TOKEN : " + $client->getAccessToken() . " " . $_SESSION['oauth_access_token']; 
//after authentication we can create a service object 
$service = new Google_Service_ShoppingContent($client); 

$products = $service->products->listProducts($merchantId); 
$parameters = array(); 
while (!empty($products->getResources())) { 
    foreach ($products->getResources() as $product) { 
     printProduct($product); 
    } 
    if (!empty($products->getNextPageToken())) { 
     break; 
    } 
    $parameters['pageToken'] = $products->nextPageToken; 
    $products = $service->products->listProducts($merchantId, $parameters); 
} 

printf("\nEnd"); 

//////////////////////// 
//$_SESSION['oauth_access_token'] = null; 
function doOAuth(&$client) { 
    if (isset($_SESSION['oauth_access_token'])) { 
     $client->setAccessToken($_SESSION['oauth_access_token']); 
    } elseif (isset($_GET['code'])) { 
//  $client->setAccessType("offline"); //IMPORTANT 
     $token = $client->authenticate($_GET['code']); 
     $_SESSION['oauth_access_token'] = $token; 
    } else { 
     header('Location: ' . $client->createAuthUrl()); 
     exit; 
    } 
} 

function printProduct($product) { 
    printf("%s %s\n", $product->getId(), $product->getTitle()); 
} 

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

0 Array Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } } ' in C:\Program Files (x86)\Apache Software Foundation\Apache24\htdocs\google-api-php-client-master\src\Google\Http\REST.php:123 Stack trace: #0 C:\Program Files (x86)\Apache Software Foundation\Apache24\htdocs\google-api-php-client-master\src\Google\Http\REST.php(82): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #1 [internal function]: Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #2 C:\Program Files (x86)\Apache Software Foundation\Apache24\htdocs\google-api-php-client-master\src\Google\Task\Runner.php(181): call_user_func_array(Array, Array) #3 C:\Program Files (x86)\Apac in C:\Program Files (x86)\Apache Software Foundation\Apache24\htdocs\google-api-php-client-master\src\Google\Http\REST.php on line 123

Спасибо за любую помощь

EDIT: дополнительная информация я был в состоянии обнаружение этой ошибки внутри объекта $ token

[error] => redirect_uri_mismatch [error_description] => Bad Request

Blockquote

+0

Вы должны будете установить переадресацию URI в консоли API Google. Он должен быть таким же, как и место, где вы пытаетесь получить токены. – dikesh

ответ

0
/** 
* IMPORTANT: this url is used during both two phases of OAuth. 
* If a mistmatch of the redirect uri occours during the two phases, the login 
* fails. Must ignore the code (get) parameter in the second phase. 
**/ 
$redirect_uri = "http://localhost/gshop/action/list.php"; 

старый Ури динамичны и с параметром кода

+0

Так решено? – dikesh

+0

да, спасибо за помощь – Pievis

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

  • Нет связанных вопросов^_^