Php 使用oauth 2.0 google+;应用程序编程接口
我正在尝试在我的网站上使用oauth 2.0作为google+api,我一直得到:Php 使用oauth 2.0 google+;应用程序编程接口,php,curl,google-api,google-plus,Php,Curl,Google Api,Google Plus,我正在尝试在我的网站上使用oauth 2.0作为google+api,我一直得到: { "error": { "errors": [{ "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "locati
{
"error": {
"errors": [{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}],
"code": 401,
"message": "Invalid Credentials"
}
}
问题是,我不知道为什么会这样。我有一个来自谷歌的有效访问令牌,但谷歌告诉be它是无效的。我知道令牌没有过期,因为json数据是在获取访问令牌后10秒内从google发出的请求。以下是我正在使用的流程:
cUrl
从google请求带有请求代码的访问令牌readFile
从google获取json响应请帮忙?我以前遇到过这个问题,但我在推特上遇到过 对于OAuth,实际上我们和twitter通信两次,第一次是获取请求令牌,第二次是授权发送已经签名的第一个令牌。
也许你只克服了第一个问题。你试过谷歌API客户端吗?有一些入门级的应用程序,你可以用来让球滚动
您不应该共享未经更改的访问令牌-有人可以使用该令牌来模拟您(实际上是为授予该令牌的人) 最好将Auth令牌作为头传递,如:
curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"
不确定这是否必要,但您的错误消息似乎表明头中存在身份验证错误,因此您可能提供的授权头与您需要的授权头不匹配。下面是一个使用PHP扩展的解决方案。将按照您定义的方式对请求进行签名。在本例中,在导入脚本的配置文件json对象中
$oauth = new OAuth($this->config->consumer_key, $this->config->consumer_secret, $this->config->signature_method, $this->config->auth_type);
$oauth->setVersion($this->config->version);
$oauth->setToken($accessToken->oauth_token, $accessToken->oauth_token_secret);
$params = array(
'fields' => 'displayName,emails,id,image,name',
'pp' => 1
);
$oauth->fetch('https://www.googleapis.com/plus/v1/people/me', $params, OAUTH_HTTP_METHOD_GET);
// extract response
$json = Zend_Json::decode($oauth->getLastResponse(), Zend_Json::TYPE_OBJECT);
几个小时以来,我一直收到相同的401“无效凭据”错误。然后我注意到我在数据库中的VARCHAR(50)字段中存储了我的access_令牌。它切断了访问令牌的一部分。我增加了列的长度。固定的
仔细检查数据库中存储access\u令牌和refresh\u令牌的字段长度 我认为
me
API被破坏了。当我尝试请求具有真实用户ID的URI时,问题就消失了。我的意思是:https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}
我的问题是GET/POST请求的标题“Authorization”:
谷歌文档说:授权:/*OAuth 2.0令牌在这里*/
但正确的是:Authorization:OAuth/*OAuth 2.0令牌*/
对!!在您的令牌密钥前包含“誓言”
如果您使用的是cURL(PHP),请使用:
删除token.json文件,然后再次尝试请求。可能需要发布更多代码以获得有用的反馈。如果您100%确定您的令牌是有效的,我将首先关注您提交凭据的代码部分。也许您的令牌与它的输入方式不完全相同,并且您正在使自己无效…?当最佳解决方案是下载提供商创建的客户端时,存在一个严重的问题。我之所以这样说,是因为在许多情况下,在构建更大、更动态的应用程序时,集成上述客户机并不是一种选择。如果能找到一个真正触及问题核心的解决方案,让人们了解实际发生的情况,并能在未来更好、更有效地处理问题,那将是一件好事。谢谢。非常有帮助-我没有意识到你也必须在头中包含“OAuth”值。
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));