LinkedIn возвращает 401: неизвестная схема аутентификации при попытке поделиться

Я пытаюсь реализовать обмен на LinkedIn в нашем проекте. Это работает для меня как очарование, однако, для всех моих коллег, это не так. Возвращается 401: Unknown authentication scheme просто для обмена запросами (профильные запросы работают нормально).

Приложение LinkedIn, которое мы используем, принадлежит мне. В целях тестирования другой разработчик попытался создать приложение в своей учетной записи, но проблема осталась: я был единственным, кто мог поделиться.

Мы используем linkedinapi / LinkedIn для бэк-энда. Вот код:

protected function openConnection()
{
$credentials = \Config::get('services.linkedin');

try
{
$this->connection = new \LinkedIn\LinkedIn([
'api_key' => $credentials['client_id'],
'api_secret' => $credentials['client_secret'],
'callback_url' => $credentials['redirect'],
]);

$this->connection->setAccessToken(\Auth::user()->linkedin->token['access_token']);
}
catch (\Exception $e)
{
\Log::error('Failed LinkedIn auth, exception is attached', [$e]);

throw new CouldNotPostException('Please, re-link your LinkedIn account, failed to send your post to LinkedIn.');
}
}

protected function send()
{
$object = [
'content' => [
'title' => $this->post->title,
'description' => \Str::limit($this->post->description, 253),
'submitted-url' => $this->post->shortlink,
'submitted_image_url' => \URL::to($this->post->image),
],
'comment' => $this->content,
'visibility' => [
'code' => 'connections-only'
]
];

try
{
$result = $this->connection->post('/people/~/shares?format=json', $object);

$this->posted($result['updateKey']);
}
catch (\Exception $e)
{
\Log::error('Failed LinkedIn posting, exception is attached', [$e]);

throw new CouldNotPostException('Failed to send your post to LinkedIn, our developers have been notified of this error.');
}
}

UPD: Оказывается, он может публиковать только на моей машине, поэтому что-то не так с конфигурацией на своих машинах. Ищу это.

0

Решение

изучение

Я попросил моего коллегу войти в LinkedIn на моем компьютере, чтобы проверить, не удается ли отправить сообщение для его учетной записи или для его компьютера. Он опубликовал, который показал, что что-то не так с моей конфигурацией, поэтому он работает.

Следующим моим шагом было переустановить все пакеты вендора, включая вышеупомянутые linkedinapi / LinkedIn. После этого пост перестал работать и для меня. После проверки того, как библиотека подписывает запросы, я обнаружил, что она не соответствует тому, как этого требует LinkedIn. Библиотека была в том числе oauth2_access_token параметр в URL, но LinkedIn ожидает Authorization Заголовок HTTP, как указано в их документации:

Получив токен доступа, вы можете начать выполнять аутентифицированные запросы API от имени пользователя. Это достигается путем включения заголовка «Авторизация» в ваш HTTP-вызов API LinkedIn.

Решение

Так что пока я изменил способ подачи запроса. Вместо

$result = $this->connection->post('/people/~/shares?format=json', $object);

Я использую другую функцию, которая позволяет мне включать заголовок вручную:

$result = $this->connection->fetch(
'/people/~/shares?format=json',
$object,
\LinkedIn\LinkedIn::HTTP_METHOD_POST,
[ 'Authorization: Bearer ' . $this->connection->getAccessToken() ]
);

Также я создал запрос на извлечение данных в хранилище.

1

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

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

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