2015-01-21 3 views
2

Я пытаюсь сделать API в профиль пользователей LinkedIn, используя PHP. Я успешно зарегистрировал свое приложение, и я отметил свой API и секретный ключ, а также перечисляю свой URL-адрес перенаправления.Выполнение запроса API-интерфейса LinkedIn в 401

Пользователь начинает с этой страницы: index.php. Эта страница содержит ссылку на диалоговом окне LinkedIn:

<a href="https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=<?php echo $api_key ?>&state=<?php echo $state ?>&redirect_uri=<?php echo $redirect_uri ?>">Apply Now</a> 

При нажатии на эту ссылку я входе в LinkedIn, используя свои данные, и я успешно перенаправлен application_form.php. Отсюда я хотел бы сейчас, чтобы получить пользователи Анкетные данные:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://www.linkedin.com/v1/people/~"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
var_dump($output); 

Однако приведенные выше результаты кода в этом выводимого:

"401 Unknown authentication scheme" 

После делать немного исследований, я думаю, это может быть потому, что я до сих пор не получили токена доступа на данный момент? Кто-нибудь может подумать, что я должен сделать, чтобы исправить это?

+0

Я не знаю, еще ли вы приобрели токен доступа, но вы, конечно, не используете _using_ один в своем запросе cURL. – CBroe

+0

@CBroe У меня есть 'access_token', я вижу его в URL-адресе' code = MY_ACCESS_TOKEN'. Наверное, я не уверен, как я могу использовать его в своем запросе cURL. – Javacadabra

+0

В их документации есть много образцов кода PHP, поэтому я предлагаю вам взглянуть туда. – CBroe

ответ

1

Для тех, кто это читает и хотел бы использовать LinkedIn Profile API, решение моей проблемы состояло в том, что у меня не было действительного Access Token, когда я попытался сделать первый запрос.

Первое, что я сделал, это создать ссылку, которая направит пользователя на LinkedIn аутентификационное окно.

Затем пользователь решил бы утвердить или отклонить запрос приложений для доступа к их профилю. Независимо от их выбора, они перенаправляются на мой redirect url.

Оттуда у меня теперь есть access code, который я могу использовать для запроса access token и поэтому совершать звонки api.

if (isset($_GET['error'])) { 
    echo $_GET['error'] . ': ' . $_GET['error_description']; 
} elseif (isset($_GET['code'])) { 
    getAccessToken(); 
    //$user = fetch('GET', '/v1/people/~:(firstName,lastName)');//get name 
    //$user = fetch('GET', '/v1/people/~:(phone-numbers)');//get phone numbers 
    $user = fetch('GET', '/v1/people/~:(location:(name))');//get country 
    var_dump($user); 
} 

getAccessToken() метод, который я использовал на основе кода на сайте LinkedIn Developers

https://developer.linkedin.com/documents/code-samples

function getAccessToken() { 
    $params = array(
     'grant_type' => 'authorization_code', 
     'client_id' => 'MY API KEY', 
     'client_secret' => 'MY SECRET KEY', 
     'code' => $_GET['code'], 
     'redirect_uri' => 'MY REDIRECT URL', 
    ); 
    // 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; 
} 

Тогда метод fetch(), а также от LinkedIn API

function fetch($method, $resource, $body = '') { 
    $opts = array(
     'http' => array(
      'method' => $method, 
      'header' => "Authorization: Bearer " . 
      $_SESSION['access_token'] . "\r\n" . 
      "x-li-format: json\r\n" 
     ) 
    ); 
    $url = 'https://api.linkedin.com' . $resource; 
    if (count($params)) { 
     $url .= '?' . http_build_query($params); 
    } 
    $context = stream_context_create($opts); 
    $response = file_get_contents($url, false, $context); 
    return json_decode($response); 
} 

Делая вышеизложенное, я не было проблем с запросом на API. Справедливости ради Cbroe, который комментировал выше. Мне не хватало этой информации. Если он/она захочет оставить ответ, я с радостью соглашусь, но просто хочу, чтобы я включил свое решение для всех, кто сталкивался с проблемой, которую я имел.

Смежные вопросы