我的代码基于http://gdatatips.blogspot.com/2008/11/2-legged-oauth-in-php.html.
这是我的代码,我想与谷歌文档(文档列表)API工作:
$endpoint = 'https://www.google.com/accounts/OAuthGetRequestToken';
$consumer = new OAuthConsumer(GOOGLE_API_DOCLIST_CONSUMER_KEY, GOOGLE_API_DOCLIST_CONSUMER_SECRET, NULL);
$arrParams = array(
'scope' => 'https://docs.google.com/feeds/'
,'xoauth_requestor_id' => GOOGLE_API_DOCLIST_USER_EMAIL
);
$req = OAuthRequest::from_consumer_and_token($consumer, NULL, "GET", $endpoint, $arrParams);
$req->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);
$curl = new Auth_Curl();
$content = $curl->request($req->to_url());
$docAPI = new GoogleAPI_DocumentList(new Auth_Curl(), $req->to_header());
var_dump($req->to_header());
echo '<br />-- Getting Collections list';
$url = 'https://docs.google.com/feeds/default/private/full/-/folder' . '?xoauth_requestor_id=' . GOOGLE_API_DOCLIST_USER_EMAIL;
$raw = $docAPI->getCollectionList($url);
var_dump($raw);
die();
我经常收到:
Token invalid - AuthSub Token无效。
我做错了什么?
编辑:以下是一些"提示":
- 他们似乎把API端点和基源混在一起了。我已经为端点放置了OAuthGetRequestToken。它似乎产生一个有效的响应。
- 我保留了它,但我不确定xoauth_requestor_id是必需的。
- 文档告诉我们使用空格来分隔授权头中的参数。
更正后的代码:
$endpoint = 'https://docs.google.com/feeds/default/private/full/-/folder';
$consumer = new OAuthConsumer(GOOGLE_API_DOCLIST_CONSUMER_KEY, GOOGLE_API_DOCLIST_CONSUMER_SECRET, NULL);
$arrParams = array(
'xoauth_requestor_id' => GOOGLE_API_DOCLIST_USER_EMAIL
);
$req = OAuthRequest::from_consumer_and_token($consumer, NULL, "GET", $endpoint, $arrParams);
$req->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null);
$docAPI = new GoogleAPI_DocumentList(new Auth_Curl(), $req->to_header());
var_dump($req->to_header());
echo '<br />-- Getting Collections list';
$url = 'https://docs.google.com/feeds/default/private/full/-/folder' . '?xoauth_requestor_id=' . GOOGLE_API_DOCLIST_USER_EMAIL;
$raw = $docAPI->getCollectionList($url);
var_dump($raw);
die();
- API和EndPoint未混合。在OAuth v1.0上,您不要求服务器生成一个令牌以在授权头中使用,授权头是100%在本地生成的。(我认为URL在某些时候被用来渲染授权头)
- 由于不生成access_token,所以不需要定义作用域。
- 确保你有一个商业账户
- 只有企业账户允许您激活2腿认证。