Выполнение запроса к API LinkedIn приводит к 401

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

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

<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"

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

2

Решение

Для тех, кто читает это и хотел бы использовать 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

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, который прокомментировал выше. Мне не хватало этой информации. Если он / она хочет оставить ответ, я с радостью приму его, но только в том случае, если я включу свое решение для любого, кто столкнется с проблемой, которая у меня была.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]