function checkUser() { /** * QQ互联登录,授权成功后会回调此地址 * 必须要用授权的request token换取access token * 访问QQ互联的任何资源都需要access token * 目前access token是长期有效的,除非用户解除与第三方绑定 * 如果第三方发现access token失效,请引导用户重新登录QQ互联,授权,获取access token */ //授权成功后,会返回用户的openid //检查返回的openid是否是合法id if (!is_valid_openid($_REQUEST["openid"], $_REQUEST["timestamp"], $_REQUEST["oauth_signature"])) { return false; } //tips //这里已经获取到了openid,可以处理第三方账户与openid的绑定逻辑 //但是我们建议第三方等到获取accesstoken之后在做绑定逻辑 //用授权的request token换取access token $access_str = get_access_token(QZONE_KEY, QZONE_SECRET, $_REQUEST["oauth_token"], $_SESSION['qzone']["keys"]["oauth_token_secret"], $_REQUEST["oauth_vericode"]); //echo "access_str:$access_str\n"; $result = array(); parse_str($access_str, $result); //error if (isset($result["error_code"])) { return false; } //获取access token成功后也会返回用户的openid //我们强烈建议第三方使用此openid //检查返回的openid是否是合法id if (!is_valid_openid($result["openid"], $result["timestamp"], $result["oauth_signature"])) { return false; } //将access token,openid保存!! //XXX 作为demo,临时存放在session中,网站应该用自己安全的存储系统来存储这些信息 $_SESSION['qzone']['access_token']['oauth_token'] = $result["oauth_token"]; $_SESSION['qzone']['access_token']['oauth_token_secret'] = $result["oauth_token_secret"];
//用授权的request token换取access token $access_str = get_access_token($webdb[QQ_appid], $webdb[QQ_appkey], $_GET["oauth_token"], $secret, $_GET["oauth_vericode"]); //echo "access_str:$access_str\n"; $result = array(); parse_str($access_str, $result); //print_r($result); //error if (isset($result["error_code"])) { showerr('出错了,请不要重复刷新网页' . $result["error_code"]); //echo "error_code = ".$result["error_code"]; //exit; } //获取access token成功后也会返回用户的openid //我们强烈建议第三方使用此openid //检查返回的openid是否是合法id if (!is_valid_openid($result["openid"], $result["timestamp"], $result["oauth_signature"])) { showerr('出错了,超时了!'); //demo对错误简单处理 //echo "@@@invalid openid"; //echo "sig:".$result["oauth_signature"]."\n"; //exit; } //echo 'good!!'; //将access token,openid保存!! //XXX 作为demo,临时存放在session中,网站应该用自己安全的存储系统来存储这些信息 //$_SESSION["token"] = $result["oauth_token"]; //$_SESSION["secret"] = $result["oauth_token_secret"]; //$_SESSION["openid"] = $result["openid"]; set_cookie('token_secret', mymd5($result["oauth_token"] . "\t" . $result["oauth_token_secret"] . "\t" . $result["openid"]), 3600); if ($rs = $db->get_one("SELECT * FROM {$pre}memberdata WHERE `qq_api`='{$result['openid']}'")) { $userDB->login($rs[username], '', 3600, true);
public function get_openid() { /** * Tips: * QQ互联登录,授权成功后会回调注册的callback地址 * 必须要用授权的request token换取access token * 访问QQ互联的任何资源都需要access token * 目前access token是长期有效的,除非用户解除与第三方绑定 * 如果第三方发现access token失效,请引导用户重新登录QQ互联,授权,获取access token */ //print_r($_REQUEST); //用户使用QQ登录,并授权成功后,会返回用户的openid。此时需要检查返回的openid是否是合法id //我们不建议开发者使用该openid,而是使用获取access token之后返回的openid。 if (!is_valid_openid($this->appkey, $_REQUEST["openid"], $_REQUEST["timestamp"], $_REQUEST["oauth_signature"])) { //demo对错误简单处理 echo "###invalid openid\n"; echo "sig:" . $_REQUEST["oauth_signature"] . "\n"; exit; } //tips //这里已经获取到了openid,可以处理第三方账户与openid的绑定逻辑。 //但是我们建议第三方等到获取access token之后在做绑定逻辑 //用授权的request token换取access token $access_str = $this->get_access_token($this->appid, $this->appkey, $_REQUEST["oauth_token"], $_SESSION["secret"], $_REQUEST["oauth_vericode"]); //echo "access_str:$access_str\n"; $result = array(); parse_str($access_str, $result); //print_r($result); //错误处理 if (isset($result["error_code"])) { echo "get access token error<br>"; echo "error msg: {$request_token}<br>"; echo "点击<a href=\"http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91%E5%85%AC%E5%85%B1%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E\" target=_blank>查看错误码</a>"; exit; } //将access token,openid保存起来!!! //在demo演示中,直接保存在全局变量中. //为避免网站存在多个子域名或同一个主域名不同服务器造成的session无法共享问题 //请开发者按照本SDK中comm/session.php中的注释对session.php进行必要的修改,以解决上述2个问题, $_SESSION["token"] = $result["oauth_token"]; $_SESSION["secret"] = $result["oauth_token_secret"]; $_SESSION["openid"] = $result["openid"]; /*echo "<p>现在您已经获取到了用户的关键数据</p>"; echo "<p>openid:".$result['openid']."用户唯一标识</p>"; echo "<p>token:".$result['oauth_token']."具有访问权限的token</p>"; echo "<p>secret:".$result['oauth_token_secret']."密钥</p>"; echo "<p>以上三个参数您应该保存下来,用于访问QQ互联的其他接口,比如:</p>"; echo "<p>点击<a href=\"../user/get_user_info.php\" target=\"_blank\">获取用户信息</a></p>"; echo "<p>接下来您需要处理自己网站的登录逻辑,祝您使用QQ登录愉快</p>";*/ //第三方处理用户绑定逻辑 //将openid与第三方的帐号做关联 }
//构造请求url $url .= $normalized_str . "&" . "oauth_signature=" . rawurlencode($signature); return file_get_contents($url); } /** * Tips: * QQ互联登录,授权成功后会回调注册的callback地址 * 必须要用授权的request token换取access token * 访问QQ互联的任何资源都需要access token * 目前access token是长期有效的,除非用户解除与第三方绑定 * 如果第三方发现access token失效,请引导用户重新登录QQ互联,授权,获取access token */ //print_r($_REQUEST); //用户使用QQ登录,并授权成功后,会返回用户的openid。此时需要检查返回的openid是否是合法id //我们不建议开发者使用该openid,而是使用获取access token之后返回的openid。 if (!is_valid_openid($_REQUEST["openid"], $_REQUEST["timestamp"], $_REQUEST["oauth_signature"])) { //demo对错误简单处理 echo "###invalid openid\n"; echo "sig:" . $_REQUEST["oauth_signature"] . "\n"; exit; } //tips //这里已经获取到了openid,可以处理第三方账户与openid的绑定逻辑。 //但是我们建议第三方等到获取access token之后在做绑定逻辑 //用授权的request token换取access token $access_str = get_access_token($_SESSION["appid"], $_SESSION["appkey"], $_REQUEST["oauth_token"], $_SESSION["secret"], $_REQUEST["oauth_vericode"]); //echo "access_str:$access_str\n"; $result = array(); parse_str($access_str, $result); //错误处理 if (isset($result["error_code"])) {
function checkUser() { /** * QQ互联登录,授权成功后会回调此地址 * 必须要用授权的request token换取access token * 访问QQ互联的任何资源都需要access token * 目前access token是长期有效的,除非用户解除与第三方绑定 * 如果第三方发现access token失效,请引导用户重新登录QQ互联,授权,获取access token */ //授权成功后,会返回用户的openid //检查返回的openid是否是合法id if (!is_valid_openid($_REQUEST["openid"], $_REQUEST["timestamp"], $_REQUEST["oauth_signature"], $this->skey)) { return false; } //tips //这里已经获取到了openid,可以处理第三方账户与openid的绑定逻辑 //但是我们建议第三方等到获取accesstoken之后在做绑定逻辑 //用授权的request token换取access token $access_str = get_access_token($this->akey, $this->skey, $_REQUEST["oauth_token"], $_REQUEST['oauth_token_secret'], $_REQUEST["oauth_vericode"]); //echo "access_str:$access_str\n"; $result = array(); parse_str($access_str, $result); //error if (isset($result["error_code"])) { return false; } //获取access token成功后也会返回用户的openid //我们强烈建议第三方使用此openid //检查返回的openid是否是合法id