我正在致电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”
有什么主意,这个错误实际上意味着什么?我已经正确创建了服务帐户,但是无法从我的开发环境中复制成功。
答案 0 :(得分:10)
头痛几天后,这就是答案。打开您的Google搜索控制台。
先决条件:您必须已经拥有一个Google服务帐户
单击三点按钮,然后单击管理财产所有人:
将Google服务帐户电子邮件添加为新所有者:
答案 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.com,https://www.example.com等或任何您拥有的东西)并添加所有者,即从json粘贴gserviceaccount.com电子邮件地址,然后还会说出当前所有者委派给该电子邮件地址的所有权。
一旦该电子邮件地址的状态从搜索控制台页面上的“完全”权限更改为“所有者”,我就可以运行该调用,并且原来的有关无法验证URL所有权的403错误消失了。谢谢大家,没有这个,本来就一无所有。