我正在尝试使用PHP中的Google Client V3运行Google Drive API。我有我的locahost站点设置的凭据,已经下载了JSON并使用这些凭据加载客户端,并且在我的本地站点上一切正常。
当我将它移动到实际网站并为我们在实际网站上使用的项目下载JSON时,我会一直获得redirect_uri_mismatch。我已经检查了这个项目的控制台,并且正确设置了重定向uri。我有以下重定向uri
https://www.awesomestories.com/Google/getClient
https://awesomestories.com/Google/getClient
https://www.awesomestories.com/Google/getClient/
https://awesomestories.com/Google/getClient
我意识到这是过度杀戮但我想确保每个可能的版本都设置为消除这个问题。 Google提示正在发生,当代码返回时,我尝试将代码参数加载到Google客户端:
$resp = $client->authenticate($_GET['code']);
我得到以下回复
array(3) {
["error"]=>
string(21) "redirect_uri_mismatch"
["error_description"]=>
string(11) "Bad Request"
["error_uri"]=>
string(0) ""
}
重定向到的网址是
https://www.awesomestories.com/Google/getClient
哪个与控制台中设置的匹配。我们也在网站上使用相同项目的凭据,尽管我们只是使用与此项目相关联的API密钥而不是GoogleClient正在使用的Oauth2凭据。因此,对于此项目,这是我们第一次使用在Google控制台中设置的Oauth2凭据。我只是无法弄清楚为什么身份验证在测试站点上成功但在实际站点上没有成功。
另一件奇怪的事情是客户端的初始化如下所示:
$client = new Google_Client();
$client->setAuthConfigFile(SYSTEM_PATH.'/shared/php/google-api-php-client/client-prod.json');
$client->setAccessType('offline');
$client->setApprovalPrompt("force");
$client->setPrompt("consent");
在我的本地网站上,当Google提示授权屏幕出现时,它会要求允许离线访问,但在实际网站上它永远不会要求允许离线访问。
如果有人能指出我出了什么问题,我会非常感激。
答案 0 :(得分:0)
所以我不知道为什么会这样,但确实如此。我从与我相关联的项目中删除了我的控制台中的所有重定向uris,运行了我的代码并在提示屏幕上得到了重定向错配uri错误,我按照预期重新添加重定向uris,从显示的错误消息中复制一个提示然后运行我的代码,调用成功。奇怪的是,我从错误消息中复制的重定向与之前的重定向相同,因为我复制了我删除的那些并进行了比较,所以我不知道为什么这样做。此外,在我使用重定向uri设置Google客户端之前,提示屏幕完好无损,只有在尝试加载从Google提示屏幕发回的授权代码时才会显示uri不匹配错误。我在客户端上重定向uri设置错误之前已经运行了Google提示,并且此错误出现在提示屏幕中,所以我不肯定这里发生了什么,但它现在正在运行。