Google Merchant Connect подключается с помощью PHP Curl

  • Автор темы Дима Александров
  • 30
  • Обновлено
  • 15, May 2024
  • #1
Я пытаюсь подключиться к продавцу Google с помощью php Curl. Я продолжаю получать сообщение об ошибке со статусом": "НЕ АУТЕНТИФИКАЦИЯ" Я могу нормально подключиться к API https://developers.google.com/shopping-content/reference/rest/v2/products/

и запустите примеры оттуда. Я также могу запускать тесты из https://developers.google.com/oauthplayground/

Я нашел это, но продолжаю получать неаутентифицированную ошибку
 $merchantid = xxxxxxxxx; //this is a 9 digit code found in top left of Merchant Center

$email = '[email protected]'; //this is the email address assigned to the service account

$privatekey = "-----BEGIN PRIVATE KEY-----\nXXXXXapprox 6 lines long key from json fileXXXXXX\n-----END PRIVATE KEY-----\n"; //this is the long key that you download within the json file at the end of the service account setup

$header = json_encode(['alg' => 'RS256', 'typ' => 'JWT']);

$base64UrlHeader = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header));

$iat = strtotime("now");

$exp = strtotime("+1 hour");

$currenttime = date("H:i:s");

$claimset = json_encode(['iss' => $email,

'scope' => '[URL='https://lumtu.com/yti/bUGGUbnRodHRwczovL2dvb2dsZWFwaXMuY29tL2F1dGgvY29ud92Y']https://www.googleapis.com/auth/content[/URL]',

'aud' => '[URL='https://lumtu.com/yti/Zs22sZW5odHRwczovL2dvb2dsZWFwaXMuY29tL29hdXRoMi92NC90b9CN']https://www.googleapis.com/oauth2/v4/token[/URL]',

'exp' => $exp,

'iat' => $iat]);

$base64UrlClaimSet = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($claimset));

$binary_signature = "";

$algo = "SHA256";

openssl_sign($base64UrlHeader.".".$base64UrlClaimSet, $binary_signature, $privatekey, $algo);

$jwtSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($binary_signature));

$jwt = $base64UrlHeader . "." . $base64UrlClaimSet . "." . $jwtSignature;

$url = "[URL='https://lumtu.com/yti/Zs22sZW5odHRwczovL2dvb2dsZWFwaXMuY29tL29hdXRoMi92NC90b9CN']https://www.googleapis.com/oauth2/v4/token[/URL]";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=".$jwt);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch);

$accesstoken = substr($data, strpos($data, 'access_token') + 16);

$arr = explode('"',trim($accesstoken));

$accesstoken = $arr[0];

$url = "[URL='https://lumtu.com/yti/MY33YMi9odHRwczovL3Nob3BwaW5nY29udGVudC5nb29nbGVhcGlzLmNvbS9jb250ZW50L5WZ']https://shoppingcontent.googleapis.com/content/v2/".$merchantid."/products[/URL]";

$header = array(

'Authorization: Bearer '.$accesstoken

);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch);

echo "<br/><br/>data: ".$data;
PHP: любые предложения или указатели в правильном направлении будут очень признательны.

Дима Александров


Рег
16 Jan, 2013

Тем
1

Постов
3

Баллов
13
  • 21, May 2024
  • #2
Я не работал конкретно с Google Merchant API, но работал с другими подобными API. Я думаю, что это не удалось, потому что сначала вам нужно отправить другой запрос в Google, который вернет токен авторизации для следующего запроса. Это делается в фоновом режиме. Затем этот токен необходимо отправить в Google вместе с перенаправлением клиента для совершения платежа. Я думаю, что вы пропускаете фоновый шаг, поэтому вы получаете ошибку авторизации из-за отсутствия токена.
 

Schizo


Рег
06 Aug, 2012

Тем
1

Постов
5

Баллов
15
  • 09, Jun 2024
  • #3
В итоге я просто установил виртуальный сервер композитора и библиотеку кода Google и таким же образом загрузил все остальное. Затем скопировал файлы на сам сервер. Для справки, если кому интересно - github.com/googleads/googleads-shopping-samples/tree/master/php и https://github.com/googleads/googleads-shopping-samples/tree/master/php

а что касается аписа - console.cloud.google.com/apis/credentials/key/ и console.cloud.google.com/apis/credentials?project=NAME ВАШЕГО ПРОЕКТА.

Кажется, работает очень хорошо.

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

Avreley


Рег
27 Nov, 2013

Тем
1

Постов
2

Баллов
12
  • 13, Jun 2024
  • #4
другие примечания: если я использую oauthplayground и получаю токен доступа, я могу скопировать его прямо в файл ниже, и он будет работать нормально.

Проблема в том, что срок действия токена истекает через 3000 секунд. Я думаю, но не уверен, что существует либо постоянный токен доступа, срок действия которого не истекает, либо я могу каким-то образом использовать учетные данные API, как я полагаю.

Мне нужно встроенное постоянное решение или что-то в этом роде, где мне нужно только добавлять новый токен каждый год, что-то вроде настроек API ebays. Я не думаю, что это что-то нарушает.

Но я разместил эту вакансию на другом сайте, если кому-то интересно.
 

6erclub


Рег
27 Feb, 2014

Тем
1

Постов
2

Баллов
12
Тем
49554
Комментарии
57426
Опыт
552966

Интересно