I do the same in the Codeigniter.
Here is procedure to get Auth User Profile.
Create a library for Linkedin
defined('BASEPATH') OR exit('No direct script access allowed'); /** * CodeIgniter Linked API Class * * * @package CodeIgniter * @subpackage Libraries * @category Libraries * @author Muhamamd Hafeez */ class Linkedin { function __construct(){ } public function getAuthorizationCode() { $params = array('response_type' => 'code', 'client_id' => API_KEY, 'scope' => SCOPE, 'state' => uniqid('', true), // unique long string 'redirect_uri' => REDIRECT_URI, ); // Authentication request $url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params); // Needed to identify request when it returns to us $_SESSION['state'] = $params['state']; // Redirect user to authenticate header("Location: $url"); exit; } public function getAccessToken() { $params = array('grant_type' => 'authorization_code', 'client_id' => API_KEY, 'client_secret' => API_SECRET, 'code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI, ); // Access Token request $url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params); // Tell streams to make a POST request $context = stream_context_create( array('http' => array('method' => 'POST', ) ) ); // Retrieve access token information $response = file_get_contents($url, false, $context); // Native PHP object, please $token = json_decode($response); // Store access token and expiration time $_SESSION['access_token'] = $token->access_token; // guard this! $_SESSION['expires_in'] = $token->expires_in; // relative time (in seconds) $_SESSION['expires_at'] = time() + $_SESSION['expires_in']; // absolute time return true; } public function fetch($method, $resource, $body = '') { $params = array('oauth2_access_token' => $_SESSION['access_token'], 'format' => 'json', ); // Need to use HTTPS $url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params); // Tell streams to make a (GET, POST, PUT, or DELETE) request $context = stream_context_create( array('http' => array('method' => $method, ) ) ); // Hocus Pocus $response = file_get_contents($url, false, $context); // Native PHP object, please return json_decode($response); } } /* End of file Linked.php */ /* Location: ./application/libraries/linkedin.php */
Put all your Constants stuff in confin/constants.php
define('API_KEY', 'Put Yoour API_KEY here'); define('API_SECRET', 'Put Yoour API_SECRET here'); define('REDIRECT_URI', 'Put Yoour REDIRECT_URI here'); define('SCOPE', 'r_fullprofile r_emailaddress rw_nus r_contactinfo r_network');
Now the Controller
class Profile extends CI_Controller { function __construct() { parent:: __construct(); $this->load->library('linkedin'); // load library session_name('linkedin'); session_start(); } // linkedin login script function profile() { // OAuth 2 Control Flow if (isset($_GET['error'])) { // LinkedIn returned an error // load any error view here exit; } elseif (isset($_GET['code'])) { // User authorized your application if ($_SESSION['state'] == $_GET['state']) { // Get token so you can make API calls $this->linkedin->getAccessToken(); } else { // CSRF attack? Or did you mix up your states? exit; } } else { if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) { // Token has expired, clear the state $_SESSION = array(); } if (empty($_SESSION['access_token'])) { // Start authorization process $this->linkedin->getAuthorizationCode(); } } // define the array of profile fields $profile_fileds = array( 'id', 'firstName', 'maiden-name', 'lastName', 'picture-url', 'email-address', 'location:(country:(code))', 'industry', 'summary', 'specialties', 'interests', 'public-profile-url', 'last-modified-timestamp', 'num-recommenders', 'date-of-birth', ); $profileData = $this->linkedin->fetch('GET', '/v1/people/~:(' . implode(',', $profile_fileds) . ')'); if ($profileData) { // save profile or do whatever you want } else { // linked return an empty array of profile data } } }