Google Indexing API-403“禁止响应”

时间:2018-07-19 15:52:24

标签: php symfony google-api google-api-php-client google-indexing-api

我正在致电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 个答案:

答案 0 :(得分:10)

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

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

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

click the tri dot button, and click manage property owners

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

add google service account email as new owners

答案 1 :(得分:5)

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

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

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

如果错误消息如下所示,则这是相同的问题。

“消息”:“权限被拒绝。无法验证URL所有权。”

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

答案 2 :(得分:2)

请确保您已按照以下说明在Google Search Console中将服务帐户添加为所有者:https://developers.google.com/search/apis/indexing-api/v3/prereqs#verify-site

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

答案 3 :(得分:0)

添加到@Glennstar的评论和@JMs答复中,不再有旧版本链接(也许我从来没有旧版本),但是如果您单击用户所有者'(you)'右侧的3个垂直点并选择“管理财产所有者”,然后在下一页上,单击您的域变体右侧的每个“验证详细信息”链接(example.com,http://www.example.comhttps://www.example.com等或任何您拥有的东西)并添加所有者,即从json粘贴gserviceaccount.com电子邮件地址,然后还会说出当前所有者委派给该电子邮件地址的所有权。

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