appid = $config['app_id']; $this->appkey = $config['app_key']; $this->access_token = $access_token; $this->scope = 'get_user_info, add_share'; } /** * 获取授权地址 * * @param unknown $info * @param unknown $url * @return mixed */ public function redirect($callback_url) { return $this->login_url($callback_url, $this->scope); } /** * 回调用户数据 * * @param unknown $info * @param unknown $url * @param unknown $code * @return boolean */ public function callback($callback_url, $code) { $result = $this->access_token($callback_url, $code); if (isset($result['access_token']) && $result['access_token'] != '') { $this->access_token = $result['access_token']; $openid = $this->get_openid(); // 获取用户信息 $userinfo = $this->get_user_info($openid); if($userinfo['gender'] == '男'){ $userinfo['gender'] = 1; }elseif ($userinfo['gender'] == '女'){ $userinfo['gender'] = 2; }else { $userinfo['gender'] = 0; } $data = array( 'openid' => basename(__FILE__, '.php') . '_' . $openid, 'name' => $this->get_user_name($userinfo), 'sex' => $userinfo['gender'], 'avatar' => $userinfo['figureurl_qq_2'] ? $userinfo['figureurl_qq_2'] : $userinfo['figureurl_qq_1'] ); return $data; } else { // echo "授权失败"; return false; } } /** * 生成授权网址 * * @param unknown $callback_url * @param string $scope * @return string */ public function login_url($callback_url, $scope = '') { $params = array( 'client_id' => $this->appid, 'redirect_uri' => $callback_url, 'response_type' => 'code', 'scope' => $scope ); return 'https://graph.qq.com/oauth2.0/authorize?' . http_build_query($params, '', '&'); } /** * 获取access token * * @param unknown $callback_url * @param unknown $code * @return multitype: */ public function access_token($callback_url, $code) { $params = array( 'grant_type' => 'authorization_code', 'client_id' => $this->appid, 'client_secret' => $this->appkey, 'code' => $code, 'state' => '', 'redirect_uri' => $callback_url ); $url = 'https://graph.qq.com/oauth2.0/token?' . http_build_query($params, '', '&'); $result_str = $this->http($url); $json_r = array(); if ($result_str != '') parse_str($result_str, $json_r); return $json_r; } /** * 获取登录用户的openid * * @return Ambigous <> */ public function get_openid() { $params = array( 'access_token' => $this->access_token ); $url = 'https://graph.qq.com/oauth2.0/me?' . http_build_query($params, '', '&'); $result_str = $this->http($url); $json_r = array(); if ($result_str != '') { preg_match('/callback\(\s+(.*?)\s+\)/i', $result_str, $result_a); $json_r = json_decode($result_a[1], true); } return $json_r['openid']; } /** * 根据openid获取用户信息 * * @param unknown $openid * @return Ambigous */ public function get_user_info($openid) { $params = array( 'openid' => $openid ); return $this->api('user/get_user_info', $params); } /** * 获取用户名 * * @param unknown $user_info * @return Ambigous */ public function get_user_name($userinfo) { return $userinfo['nickname']; } /** * 发布分享 * * @param unknown $openid * @param unknown $title * @param unknown $url * @param unknown $site * @param unknown $fromurl * @param string $images * @param string $summary * @return Ambigous */ public function add_share($openid, $title, $url, $site, $fromurl, $images = '', $summary = '') { $params = array( 'openid' => $openid, 'title' => $title, 'url' => $url, 'site' => $site, 'fromurl' => $fromurl, 'images' => $images, 'summary' => $summary ); return $this->api('share/add_share', $params, 'POST'); } /** * 调用接口 * * @param unknown $url * @param unknown $params * @param string $method * @return Ambigous * //示例:根据openid获取用户信息 * $result=$qq->api('user/get_user_info', array('openid'=>$openid), 'GET'); */ public function api($url, $params = array(), $method = 'GET') { $url = $this->api_url . $url; $params['access_token'] = $this->access_token; $params['oauth_consumer_key'] = $this->appid; $params['format'] = 'json'; if ($method == 'GET') { $query_url = $url . '?' . http_build_query($params, '', '&'); $result_str = $this->http($query_url); } else { $query = http_build_query($params, '', '&'); $result_str = $this->http($url, $query, 'POST'); } $result = array(); if ($result_str != '') $result = json_decode($result_str, true); return $result; } /** * 提交请求 * * @param unknown $url * @param string $postfields * @param string $method * @param unknown $headers * @return mixed */ private function http($url, $postfields = '', $method = 'GET', $headers = array()) { $ci = curl_init(); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ci, CURLOPT_TIMEOUT, 30); if ($method == 'POST') { curl_setopt($ci, CURLOPT_POST, TRUE); if ($postfields != '') curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); } $headers[] = 'User-Agent: ECTouch.cn'; curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); curl_setopt($ci, CURLOPT_URL, $url); $response = curl_exec($ci); curl_close($ci); return $response; } }