MeetTea需要能够通过Google API来获取用户的用户名和头像,效果就像google.org.cn的排队系统。
那么如何实现呢? 通过几天的学习、研究,下载google的源码,最后了解了原理并制作了一个简单的DEMO。
效果见附件,只有一个简单的test.php,需要自己去申请CONSUMER_KEY和CONSUMER_SECRET,不过申请步骤简单。
OAuth验证第一步:Get a Request Token
这个Request Token是请求一个令牌,来允许程序接入google的服务。
具体做法是发送一个HTTP GET请求到https://www.google.com/accounts/OAuthGetRequestToken
并且在HTTP头里有一个Authorization字段,字段里的内容是OAuth开头,加一个空格,然后是每个参数join一个“,”和空格。
此外google的OAuth还有一个SCOPE参数,这个不是标准OAuth里的。
最后注意端口是443,不然会收到一个302;如果程序有问题会收到一个400。
如果是200,则在返回的HTTP BODY里取得$oauth_token,$oauth_token_secret
保存好这两个值,下两步要用到。
第二步是用户操作部分,需要用户授权应用访问GOOGLE相关服务。也就是redirect到 www.google.com/accounts/OAuthAuthorizeToken?oauth_token=刚才的KEY
获取用户的头像、用户名的scope是http://www-opensocial.googleusercontent.com/api/people/@me
用户允许Access后就会跳转回刚才的页面,并且在URL参数里多了一个参数。
第三步是凭刚才URL里验证的参数发送一个GET请求到https://www.google.com/accounts/OAuthGetAccessToken
获取接入GOOGLE服务的权限,HEADER里仍旧要包含Authorization字段。
得到KEY和SECRET后替换刚才一开始的KEY和SECRET,发送GET请求到 获取用户的头像、用户名的scope,就可以保存下来,用户也无需注册了。
当然,GOOGLE庞大的API还可以帮助你得到用户朋友的EMAIL地址之类的,就看网站的需要了,潜力无限。
豆瓣用的也是OAuth。
==============2009/11/25 update=====================
豆瓣的算法和google的略有不同,主要是在http header里的数据不用rawurlencode
请搜索test.php里
PHP代码
- public function to_header($realm='') {/*{{{*/
- $out ='Authorization: OAuth realm="' . $realm . '"';
- $total = array();
- /*
- $sig = $this->parameters['oauth_signature'];
- unset($this->parameters['oauth_signature']);
- uksort($this->parameters, 'strnatcmp');
- $this->parameters['oauth_signature'] = $sig;
- */
- foreach ($this->parameters as $k => $v) {
- if (substr($k, 0, 5) != "oauth") continue;
- //$out .= OAuthUtil::urlencodeRFC3986($k) . '="' . OAuthUtil::urlencodeRFC3986($v) . '", ';
- $out .= ',' . $k . '="' . $v . '"';
- $str = $k . '=' . $v;
- if ($this->string == null) {
- $this->string = $str;
- } else {
- $this->string .= '&' . $str;
- }
- }