<?php
function do_post($url, $data=null)
{
	/*
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
	if($data){
    curl_setopt($ch, CURLOPT_POST, TRUE); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
	}
    curl_setopt($ch, CURLOPT_URL, $url);
    $ret = curl_exec($ch);

    curl_close($ch);
	*/
	//echo $url;
	$http = new http($url);
	$http->setSsl(true);
	$http->createCurl();
	$ret = $http->responseText();
	//echo $ret;
    return $ret;
}

	function qq_login($appid, $scope, $callback)
	{
		$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
		$login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" 
			. $appid . "&redirect_uri=" . urlencode($callback)
			. "&state=" . $_SESSION['state']
			. "&scope=".$scope;
		header("Location:$login_url");
	}

	function qq_callback()
	{
		if($_REQUEST['state'] == $_SESSION['state']) //csrf
		{
			$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
				. "client_id=" . $_SESSION["appid"]. "&redirect_uri=" . urlencode($_SESSION["callback"])
				. "&client_secret=" . $_SESSION["appkey"]. "&code=" . $_REQUEST["code"];
			$response = do_post($token_url);
			if (strpos($response, "callback") !== false)
			{
				$lpos = strpos($response, "(");
				$rpos = strrpos($response, ")");
				$response  = substr($response, $lpos + 1, $rpos - $lpos -1);
				$msg = json_decode($response);
				if (isset($msg->error))
				{
					echo "<h3>error:</h3>" . $msg->error;
					echo "<h3>msg  :</h3>" . $msg->error_description;
					exit;
				}
			}

			$params = array();
			parse_str($response, $params);
			$_SESSION["access_token"] = $params["access_token"];
		}
		else 
		{
			echo("The state does not match. You may be a victim of CSRF.");
		}
	}

	function get_openid()
	{
		$graph_url = "https://graph.qq.com/oauth2.0/me?access_token=" 
			. $_SESSION['access_token'];
		$str  = do_post($graph_url);
		if (strpos($str, "callback") !== false)
		{
			$lpos = strpos($str, "(");
			$rpos = strrpos($str, ")");
			$str  = substr($str, $lpos + 1, $rpos - $lpos -1);
		}
		$user = json_decode($str);
		if (isset($user->error))
		{
			echo "<h3>error:</h3>" . $user->error;
			echo "<h3>msg  :</h3>" . $user->error_description;
			exit;
		}
		$_SESSION["openid"] = $user->openid;
	}

function get_user_info()
{
	$get_user_info = "https://graph.qq.com/user/get_user_info?"
		. "access_token=" . $_SESSION['access_token']
		. "&oauth_consumer_key=" . $_SESSION["appid"]
		. "&openid=" . $_SESSION["openid"]
		. "&format=json";

	$info = do_post($get_user_info);
	$arr = json_decode($info, true);

	return $arr;
}


?>