2

我有一个 MVC Web 应用程序,可以更新电子商务网站上的产品。现在我们注册了谷歌商家中心,我的目标是同时更新产品。我正在使用 Google.Apis.ShoppingContent.v2_1 API。

这是我的 API 凭证 API 凭证

这是我的 API 服务帐户 API 凭证 2

我已经为用户使用了谷歌帐户电子邮件地址以及服务帐户电子邮件,但结果相同。

我有以下

    static string[] Scopes = { ShoppingContentService.Scope.Content};
    static string P12Secret =  @"~\Content\XXXXXX-5cab03fb904a.p12";
    static string userName = "serviceaccount@gserviceaccount.com";
    static public async Task RunTest2()
        {
            var certificate = new X509Certificate2(P12Secret, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
            var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(userName)
            {
                Scopes = Scopes
            }.FromCertificate(certificate));

            var service = new ShoppingContentService(new BaseClientService.Initializer
            {
                ApplicationName = ApplicationName,
                HttpClientInitializer = credential
            });

            try
            {
                var result = await service.Products.List("My MerchantID").ExecuteAsync();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }

当我执行 var result = await service.Products.List("My MerchantID").ExecuteAsync(); 我得到错误

e.Message = "Google.Apis.Requests.RequestError\n用户无法访问帐户 123456789 [401]\r\n错误 [\r\n\tMessage[用户无法访问帐户 123456789] 位置[-] 原因[auth/account_access_denied] 域[content.ContentErrorDomain]\r\n]\r\n"

4

1 回答 1

1

文献资料

服务帐户是特殊的 Google 帐户,应用程序可以使用这些帐户通过 OAuth 2.0 以编程方式访问 Google API。服务帐户使用不需要人工授权的 OAuth 2.0 流。相反,它使用只有您的应用程序可以访问的密钥文件。本指南讨论如何使用服务帐户访问 Content API for Shopping。

服务帐户需要预先授权。如果不是,则它无权访问任何数据。

用户无法访问帐户 123456789

意味着它没有访问权限,您忘记授予它访问权限。按照所有步骤检查以下部分的文档查找。

在此处输入图像描述

于 2019-05-27T07:28:56.710 回答