7

我正在调用 google indexing API 来发布招聘信息:

private $client;
private $httpClient;

public function initClient($kernel)
{
    $this->client = new \Google_Client();
    $this->client->setAuthConfig(JSON_KEY_HERE);
    $this->client->addScope('https://www.googleapis.com/auth/indexing');
    $this->httpClient = $this->client->authorize();
}

public function sendJob()
{
    $endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
    $content = "{
                    \"url\": \"URL_HERE\",
                    \"type\": \"URL_UPDATED\"
                }";

    $response = $this->httpClient->post($endpoint, array('body' => $content));
}

调用 API 时,给出的响应是 '403 - Forbidden' 。

任何想法这个错误实际上意味着什么?我已经正确创建了服务帐户,但无法从我的开发环境中复制成功。

4

4 回答 4

11

经过几天的头痛,这里是答案。打开您的 Google 搜索控制台。

先决条件:您必须已经有一个谷歌服务帐户

单击三点按钮,然后单击管理财产所有者:

单击三点按钮,然后单击管理财产所有者

将 google 服务帐户电子邮件添加为新所有者:

将 google 服务帐户电子邮件添加为新所有者

于 2020-02-12T09:05:23.497 回答
10

“确保您已将服务帐户添加为 Google Search Console 中的所有者”

是的。使用以下代码片段检查正文响应以获取更详细的错误消息。

    var body = result.Content.ReadAsStringAsync().Result;

如果错误消息如下所示,那么这是同一个问题。

"message": "权限被拒绝。无法验证 URL 所有权。"

值得注意 的是:缺少新版本的搜索控制台。左侧菜单的底部是“转到旧版本”链接。单击此按钮,然后从齿轮菜单(右上角)中选择“验证详细信息”。接下来,单击“验证详细信息”链接(说真的!)。在这里,您最终会在页面底部看到经过验证的所有者列表。您可以在此处添加新所有者,使用您的服务帐户的电子邮件地址(地址也可以在您的 json 密钥文件中找到)。

于 2018-11-08T01:51:16.480 回答
5

添加到@Glennstar 的评论和@JMs 回复中不再有旧版本链接(也许我从来没有旧版本)但是如果您单击用户所有者“(您)”右侧的 3 个垂直点并选择“管理属性”所有者,然后在下一页单击您的域变体右侧的每个“验证详细信息”链接(example.com、http ://www.example.com、https://www.example.com或其他你有)并添加所有者,即从 json 中粘贴 gserviceaccount.com 电子邮件地址,然后它会说当前所有者也委托给该电子邮件地址的所有权。

一旦该电子邮件地址的状态在搜索控制台页面上从“完全”权限更改为“所有者”,我就可以正常运行呼叫,并且有关无法验证 URL 所有权的原始 403 错误消失了。谢谢大家,如果没有这个就一无所知了。

于 2019-04-23T09:09:39.707 回答
3

确保您已将服务帐户添加为 Google Search Console 中的所有者,如下所述:https ://developers.google.com/search/apis/indexing-api/v3/prereqs#verify-site 。

我的问题是我们在 Search Console 中有多个域条目(有和没有 www,有和没有 https);在将服务帐户作为所有者添加到所有 4 个条目后,它正在工作。

于 2018-08-02T15:26:13.107 回答