2015-04-16 16 views
6

Używam LinkedIn REST API do publikowania aktualizacji na osi czasu użytkowników. Od kilku dni otrzymuję odpowiedź Internal server error od LinkedIn, ale kod pracował wcześniej.REST API LinkedIn - wewnętrzny błąd serwera

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); 

Jak naprawić ten błąd?

Odpowiedz

4

Twój kod jest nieprawidłowy PHP (być może z powodu pewnych zmian wprowadzonych przed wysłaniem?); modyfikując go:

$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); 

robót jeśli tylko $oauthToken jest ustawiony na prawidłowy znak. Zakładając, że Twój prawdziwy kod jest poprawny, jedyną możliwą możliwością jest to, że Twój token OAuth wygasł i musisz najpierw uzyskać nowy token. Dodając CURLOPT_VERBOSE => TRUE do opcji cURL, dowiesz się więcej o błędzie, który zwraca LinkedIn.

+0

prostu próbowałem kod z prawidłowym tokenem i dostał ten sam "błąd serwisowy wewnętrzny": 'odpowiedzi: { "ERRORCODE": 0, "message": "Błąd usługi wewnętrzne", "requestId":„J6PAQ9 "," status ": 500," timestamp ": 1429742} Jakieś pomysły? – Tom

2

Możesz rozważa pomocą LinkedIn PHP SDK (dostarczony przez społeczność) zamiast: https://github.com/Happyr/LinkedIn-API-client

+0

Czy są jakieś ograniczenia dotyczące interfejsu API LinkedIn, o których muszę wiedzieć? (Limity czasu, maksymalne rozmiary adresów URL obrazów ...) – Tom

1

Mamy do czynienia podobny problem z Linkedin API niedawno. W końcu odkryłem poprawkę, zmieniając adres URL.

New URL: "https://api.linkedin.com/v1/people/~/shares"

Zamiast określać 'oauth2_access_token' w ciągu kwerendy, go dodać w nagłówku - określają:

"zezwolenie", "okaziciela" + accessToken.

I wreszcie w parametrze ciała żądanie, dodać dane json/xml odpowiedzieć

1

trzeba użyć uwierzytelnianie token w żądaniu nagłówków.

To działa kod. Spróbuj.

$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); 
Powiązane problemy