我已经实现了google api v3.0,但是文档总是告诉我要把“您的授权头放在这里”。
我们应该传递什么值作为授权头????
但他们从来没有提到这个价值从何而来。
从逻辑上讲,我认为它可能是$_session['access_token']值,但是当我尝试这样做时:
curl_setopt($ressource, CURLOPT_HTTPHEADER, array(
"GData-Version: 3.0",
"Authorization: Bearer " . http_build_query(json_decode($_SESSION['access_token']))
));
我得到以下错误:
未知的授权头
错误401
经过大量的搜索,我试图在“oauth”前面加上:
curl_setopt($ressource, CURLOPT_HTTPHEADER, array(
"GData-Version: 3.0",
"Authorization: OAuth " . http_build_query(json_decode($_SESSION['access_token']))
));
它也不会工作,但至少错误看起来更详细:
令牌无效-authsub令牌无效。
错误401
所以,他们为什么要谈论authsub,afaik(我觉得我知道的不多),我使用的是oauth 2.0,而不是authsub。
再次搜索该错误会导致可能的作用域问题(http://www.geoffmcqueen.com/2010/03/14/token-invalid-authsub-token-has-wrong-scope-oauth-google-problem/)。
所以我再检查一下我的范围。
从config.php apiconfig数组:
'services' => array(
/* ... */,
'documentList' => array('scope' => 'https://docs.google.com/feeds/')
)
注意,我自己添加了documentlist范围。
我的代码:
$this->authenticate();
$arrAuth = json_decode($_SESSION['access_token']);
$authenticationHeader = "Bearer " . $arrAuth->access_token
$url = "https://docs.google.com" . "/feeds/default/private/full";
$atomContent = <<<ATOM
<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns="http://www.w3.org/2005/Atom">
<category scheme="http://schemas.google.com/g/2005#kind"
term="http://schemas.google.com/docs/2007#folder"/>
<title>Example Collection</title>
</entry>
ATOM;
$ressource = curl_init();
curl_setopt($ressource, CURLOPT_URL, $url);
curl_setopt($ressource, CURLOPT_HTTPHEADER, array(
"GData-Version: 3.0",
"Authorization: {$authenticationHeader}"
));
curl_setopt($ressource, CURLOPT_TIMEOUT, 5);
curl_setopt($ressource, CURLOPT_POST, 1);
curl_setopt($ressource, CURLOPT_POSTFIELDS, $atomContent);
$httpResponse = curl_exec($ressource);
如果问题对某人来说不明显:
我在这里做错什么了?
谢谢你的意见…我已经挣扎了一段时间了…
最佳答案
我相信http://code.google.com/apis/storage/docs/authentication.html正是你想要的:)