/** * Overrides the Facebook API request methods, so we can use vUrl * * @param String $url the URL to make the request to * @param Array $params the parameters to use for the POST body * @param CurlHandler $ch optional initialized curl handle * @return String the response text */ protected function makeRequest($url, $params, $ch = null) { // try Facebook's cURL implementation (including the new bundled certificates) if (function_exists('curl_init')) { try { $result = parent::makeRequest($url, $params, $ch); } catch (Exception $e) { $result = false; } if ($result) { return $result; } } // use vB_vURL implmentation global $vbulletin; $opts = self::$CURL_OPTS; require_once DIR . '/includes/class_vurl.php'; $vurl = new vB_vURL($vbulletin); $vurl->set_option(VURL_URL, $url); $vurl->set_option(VURL_CONNECTTIMEOUT, $opts[CURLOPT_CONNECTTIMEOUT]); $vurl->set_option(VURL_TIMEOUT, $opts[CURLOPT_TIMEOUT]); $vurl->set_option(VURL_POST, 1); // If we want to use more advanced features such as uploading pictures // to facebook, we may need to remove http_build_query and refactor // vB_vURL to accept an array of POST data and send the multipart/form-data // Content-Type header. $vurl->set_option(VURL_POSTFIELDS, http_build_query($params, '', '&')); $vurl->set_option(VURL_RETURNTRANSFER, $opts[CURLOPT_RETURNTRANSFER]); $vurl->set_option(VURL_CLOSECONNECTION, $opts[CURLOPT_RETURNTRANSFER]); $vurl->set_option(VURL_USERAGENT, $opts[CURLOPT_USERAGENT]); $result = $vurl->exec(); // TODO: add some error checking here // particularly check if $vurl->fetch_error() returns VURL_ERROR_SSL, meaning the server // does not have access to TLS/SSL with which to communicate with facebook return $result; }
/** * Login con facebook * */ public function loginFacebook() { try { $obj = new \Facebook($this->facebook_id, $this->facebook_secret, $this->callback_url); $token = $obj->callback(); if (!$token) { $this->last_error = "oauth-facebook-access-denied"; return false; } $this->tokens['facebook']['token'] = $token; //print_R($token); //echo 'facebook_access_token: ' . $token; //guardar los tokens en la base datos si se quieren usar mas adelante! //con los tokens podems acceder a la info del user, hay que recrear el objecto con los tokens privados $res = json_decode($obj->makeRequest($token, "https://graph.facebook.com/me", "GET")); if ($res->error) { $this->last_error = $res->error->message; return false; } //ver todos los datos disponibles: //print_r($res);die; $this->user_data['name'] = $res->name; if ($res->username) { $this->user_data['username'] = $res->username; } if ($res->email) { $this->user_data['email'] = $res->email; } if ($res->website) { $this->user_data['website'] = $res->website; } //ojo, pueden ser varias lineas con varias webs if ($res->about) { $this->user_data['about'] = $res->about; } if ($res->location->name) { $this->user_data['location'] = $res->location->name; } if ($res->id) { $this->user_data['profile_image_url'] = "http://graph.facebook.com/" . $res->id . "/picture?type=large"; } //facebook link if ($res->link) { $this->user_data['facebook'] = $res->link; } return true; } catch (Exception $e) { $this->last_error = $e->getMessage() . " 1/ " . get_class($e); return false; } return true; }