LinkedIn REST API - внутренняя ошибка сервера


Я использую LinkedIn REST API для публикации обновлений на временной шкале пользователей. Через несколько дней я получаю ответ Internal server error от LinkedIn, но код работал и раньше.

PHP:

$postTitle = "hello";
$postDesc = "world ";
$submitted-url = "http://example.com";
$submitted-image-url = "http://images.example.com/img/hello.jpg";
$comment = "foobar";

$postData = array('visibility' => array('code' => 'connections-only'),
'content' => array('title' => $postTitle,'description' => $postDesc,'submitted-url' => $postURL,'submitted-image-url' => $postImage), 'comment' => $postComment);

$ch = curl_init('https://api.linkedin.com/v1/people/~/shares?oauth2_access_token='.$oauthToken.'&format=json'
);

curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array('x-li-format: json', "Content-Type: application/json"),
CURLOPT_POSTFIELDS => json_encode($postData)
));

$response = curl_exec($ch);

Как исправить эту ошибку?

4 6

4 ответа:

Ваш код является недопустимым PHP (возможно, из-за некоторых правок, которые вы сделали перед публикацией?); изменив его на:

$postTitle = "hello";
$postDesc = "world ";
$postURL = "http://example.com";
$postImage = "http://images.example.com/img/hello.jpg";
$postComment = "foobar";

$oauthToken = "<token>";

$postData = array(
    'visibility' => array('code' => 'connections-only'),
    'content' => array(
        'title' => $postTitle,
        'description' => $postDesc,
        'submitted-url' => $postURL,
        'submitted-image-url' => $postImage
    ),
    'comment' => $postComment
);

$ch = curl_init('https://api.linkedin.com/v1/people/~/shares?oauth2_access_token='.$oauthToken.'&format=json');

curl_setopt_array($ch, array(
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_HTTPHEADER => array('x-li-format: json', "Content-Type: application/json"),
    CURLOPT_POSTFIELDS => json_encode($postData)
));

$response = curl_exec($ch);

Работает, если только $oauthToken установлен в допустимый токен. Если предположить, что ваш реальный код верен, остается только одно: срок действия вашего токена OAuth истек, и вам нужно сначала получить новый. Добавив CURLOPT_VERBOSE => TRUE к параметрам cURL, вы узнаете больше об ошибке, возвращаемой LinkedIn.

Вместо этого вы можете использовать LinkedIn PHP SDK (предоставленный сообществом): https://github.com/Happyr/LinkedIn-API-client

Недавно мы столкнулись с аналогичной проблемой с Linkedin API. Наконец-то выяснили исправление, изменив url.

Новый URL: "https://api.linkedin.com/v1/people/~ / акции "

Вместо указания 'oauth2_access_token' в строке запроса, добавьте его в заголовок-укажите:

"авторизация", "предъявитель" + accessToken.

И, наконец, в параметре тело запроса добавьте данные json / xml в post

Вы должны использовать маркер аутентификации в заголовках запросов.

Это рабочий код. Попробовать его.

$postTitle = "hello";
$postDesc = "world ";
$submitted-url = "http://example.com";
$submitted-image-url = "http://images.example.com/img/hello.jpg";
$comment = "foobar";

$oauthToken = "TokenHere";


$postData = array('visibility' => array('code' => 'connections-only'),
'content' => array('title' => $postTitle,'description' => $postDesc,'submitted-url' => $postURL,'submitted-image-url' => $postImage), 'comment' => $postComment);

$ch = curl_init('https://api.linkedin.com/v1/people/~/shares?format=json');


curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array('x-li-format: json', "Content-Type: application/json", "Bearer: ".$oauthToken.""),
CURLOPT_POSTFIELDS => json_encode($postData)
));

$response = curl_exec($ch);