Google API服务器到服务器身份验证PHP

时间:2019-03-01 16:23:21

标签: php google-api google-api-php-client service-accounts google-shopping-api

这个问题使我转弯-我已按照此页面上的说明创建了一个google服务帐户

https://developers.google.com/shopping-content/v2/quickstart

我有我的.json文件

我已经从git下载了google api库,并编写了以下PHP

require_once 'vendor/autoload.php';

putenv('GOOGLE_APPLICATION_CREDENTIALS=content-api-key.json');

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/content');

$httpClient = $client->authorize();
$response = $httpClient->get('https://www.googleapis.com/content/v2/********/accounts');

print_r($response);

我在哪里替换*****是我的商人ID。

无论我怎么尝试,我都无法连接并出现以下错误。

GuzzleHttp\Psr7\Response Object
(
    [reasonPhrase:GuzzleHttp\Psr7\Response:private] => Unauthorized
    [statusCode:GuzzleHttp\Psr7\Response:private] => 401
    [headers:GuzzleHttp\Psr7\Response:private] => Array
        (
            [Vary] => Array
                (
                    [0] => X-Origin
                    [1] => Origin,Accept-Encoding
                )

            [WWW-Authenticate] => Array
                (
                    [0] => Bearer realm="https://accounts.google.com/", error=invalid_token
                )

这是我的不得已。我有用于域范围委派的帐户设置。

有帮助吗?

乔恩

1 个答案:

答案 0 :(得分:0)

  

未经授权

意味着您要进行身份验证的帐户无权执行您尝试执行的操作。

服务帐户

您需要记住的是,服务帐户不是您。也不是在开发者控制台上创建它的帐户。服务帐户是虚拟用户,具有其在驱动器帐户日历帐户,您可以与Merchant Account

共享它的访问权限

服务帐户授权

确保已遵循Service accounts来设置服务帐户访问权限。

  

在商家帐户中添加一个新用户,获取服务帐户的电子邮件地址并添加。

     
      
  1. 将新服务帐户作为用户添加到您的Merchant Center帐户。如果您是第三方开发人员,则需要让您的客户为您执行此步骤。
  2.   
  3. 转到您的Merchant Center帐户。
  4.   
  5. 转到Merchant Center帐户设置中的“用户”列表。
  6.   
  7. 单击+按钮,然后使用服务帐户ID作为新用户的电子邮件地址。
  8.   
  9. 如果您之前没有记下服务帐户ID,请转到“服务帐户”管理页面并选择您创建的项目。
  10.   
  11. 指定用户访问权限和电子邮件通知,请注意,使用帐户服务需要管理员访问权限。添加服务帐户用户页面屏幕截图。
  12.   
  13. 单击“取消”左侧的蓝色框。您将返回到用户列表,并且应该使用所选的用户角色列出服务帐户ID。
  14.   
  15. 对要添加的所有其他服务帐户重复该过程。
  16.   
  17. 通过转到“用户”选项卡查看现有服务帐户的用户。这些用户的电子邮件地址以“ gserviceaccount.com”结尾。
  18.