Неверный токен доступа LinkedIn API

Я работаю с linkedin API. Я следовал инструкциям, данным на https://developer.linkedin.com/docs/oauth2 — поэтому я получил код и обменял его на токен доступа. Все хорошо.

Теперь, когда я пытаюсь нажать API, например, чтобы опубликовать обновление, «Шаг 4 — Создание аутентифицированных запросов», я всегда получаю сообщение об ошибке, возвращающее API, говорящее о том, что мой токен доступа недействителен.

Мои параметры заголовка, отправленные в API:

array(5) {
[0]=>
string(22) "Connection: Keep-Alive"[1]=>
string(137) "Authorization: Bearer AQS888888888888888888888888888888-Ab2HY"[2]=>
string(30) "Content-Type: application/json"[3]=>
string(17) "x-li-format: json"[4]=>
string(19) "Content-Length: 171"}

Ответ API всегда дает мне это:

string(134) "{
"errorCode": 0,
"message": "Invalid access token.",
"requestId": "IRBXBZ1X5V",
"status": 401,
"timestamp": 1468498680913
}"

Мой отладчик из curl_getinfo() возвращает эти данные:

array(22) {
["url"]=>
string(29) "https://api.linkedin.com/v1/?"["content_type"]=>
string(30) "application/json;charset=UTF-8"["http_code"]=>
int(401)
["header_size"]=>
int(495)
["request_size"]=>
int(466)
["filetime"]=>
int(-1)
["ssl_verify_result"]=>
int(0)
["redirect_count"]=>
int(0)
["total_time"]=>
float(0.275796)
["namelookup_time"]=>
float(0.003589)
["connect_time"]=>
float(0.00685)
["pretransfer_time"]=>
float(0.055621)
["size_upload"]=>
float(171)
["size_download"]=>
float(134)
["speed_download"]=>
float(485)
["speed_upload"]=>
float(620)
["download_content_length"]=>
float(134)
["upload_content_length"]=>
float(171)
["starttransfer_time"]=>
float(0.275764)
["redirect_time"]=>
float(0)
["certinfo"]=>
array(0) {
}
["redirect_url"]=>
string(0) ""}

Я публикую и ожидаю ответ в формате JSON, а не в формате XML.

Увидеть https://developer.linkedin.com/docs/share-on-linkedin за документами я следую

Я уверен, что токен доступа верен, я подозреваю, что неправильно передаю его в заголовке «Авторизация: Носитель», или URL моей конечной точки не совсем корректен, я тоже попробовал это:

https://api.linkedin.com/v1/people/~/shares?format=json

а также

https://api.linkedin.com/v2/people/~/shares?format=json

Есть идеи? ПРИМЕЧАНИЕ. Я удалил большую часть токена доступа, не просите меня его опубликовать!

2

Решение

ОК, это странно. Мои токены доступа были возвращены (что я предположил, было правильно). После большого количества царапин на голове я решил перепроверить все, используя консоль API на apigee.com. Я проверил токен доступа и угадаю, что он вдвое длиннее всех токенов, которые я получил от Linkedin Oauth2 … Странно.

Поэтому я жестко запрограммировал этот новый токен доступа в мою систему — бум! Все работает (почему я когда-либо сомневаюсь в своем коде!)
Итак, я проверяю все, почему мой код доступа усекается? БД — Хорошо. Код — хорошо. Очень странно.
Я решил снова нажать на auth api, чтобы получить новый токен доступа (что-то, что я должен был сделать уже около 100 раз!) Привет, Престо! У меня теперь длинный код доступа.

Я понятия не имею, в чем проблема, но мой код сейчас работает.

Извините, что сказал вам об этом, но ваша документация оставляет желать лучшего, когда вы меняете спецификацию API, вам также необходимо обновить свои документы. У меня было много проблем, связанных с API. Кроме того, если вы собираетесь перевести свой отдел поддержки в Stackoverflow, хорошие практики требуют, чтобы вы отслеживали запросы.
Для всех, кто интересуется, библиотеки, перечисленные Linkedin, не работают после изменений, сделанных весной 2016 года. Основная проблема заключается в том, что все области были ограничены.

3

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

У меня была такая же проблема, и ответ был в этом:
Длина токенов доступа составляет ~ 500 символов. Мы рекомендуем, чтобы вы планировали, чтобы ваш стек приложений обрабатывал токены длиной не менее 1000 символов, чтобы соответствовать текущим и любым будущим планам расширения. Это относится как к токенам доступа, так и к токенам обновления.

В моем случае я использую Symfony 3.4 и Doctrine 2 в качестве ORM, у меня был этот фрагмент кода в аннотациях:

/**
* @var string
*
* @ORM\Column(name="access_token", type="string", length=255)
*/
private $accessToken;

Как видите, я не хранил токен полного доступа в базе данных для выполнения аутентифицированных запросов, поэтому изменил приведенный выше код:

  /**
* @var text
*
* @ORM\Column(name="access_token", type="text")
*/
private $accessToken;

И все начало работать как шарм ….. Я надеюсь, что это помогает !!!!!

0

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