Я пытаюсь создать модуль, в котором я мог бы автоматически публиковать на своей странице организации Linkedin всякий раз, когда я создаю контент. Я могу опубликовать обычный текстовый контент, однако, если я пытаюсь загрузить изображение, я получаю сообщение об ошибке
Ошибка сервера: POST https://api.linkedin.com/v2/ugcPosts
привело к ответу 500 Server Error
: {"message": «Внутренняя ошибка сервера», «статус»: 500}
Я использую приведенный ниже фрагмент кода
$text = 'Posting Via Linkedin v2 API'."\n\n".'#some #hash #tag';
$body = json_encode(
[
'author' => 'urn:li:organization:'.LINKEDIN_COMPANY_ID,
'lifecycleState' => 'PUBLISHED',
'specificContent' => [
'com.linkedin.ugc.ShareContent' => [
'media' => [
'media' => 'urn:li:digitalmediaAsset:C5622AQHPNf2EmHoEyQ',
'status' => 'READY',
],
'shareCommentary' => [
'text' => $text
],
'shareMediaCategory' => 'URN_REFERENCE'
]
],
'visibility' => [
'com.linkedin.ugc.MemberNetworkVisibility' => 'PUBLIC'
],
], true
);
try
{
$client1 = new Client(['base_uri' => 'https://api.linkedin.com']);
$response = $client1->request('POST', '/v2/ugcPosts', [
'headers' => [
"Authorization" => "Bearer ".LINKEDIN_ACCESS_TOKEN,
"Content-Type" => "application/json",
"x-li-format" => "json",
"X-Restli-Protocol-Version" => "2.0.0",
],
'body' => $body,
]
);
if($response->getStatusCode() == 201)
echo $response->getheaders()['X-RestLi-Id'][0];
elseif($response->getStatusCode() !== 201)
echo 'Error: '. $response->getLastBody()->errors[0]->message;
}
catch(Exception $e)
{ echo $e->getMessage(); }
Я использую приведенные ниже области, когда я завершил аутентификацию
define ('LINKEDIN_SCOPES', 'r_emailaddress, r_basicprofile, w_member_social, w_organization_social, rw_organization_admin');
Я использую приведенный ниже код для загрузки изображения на сервер, который отлично работает, когда я получаю цифровой идентификатор актива в ответ, который я вставил в код выше
function curl($url, $parameters, $content_type, $post = true)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($post) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
}
curl_setopt($ch, CURLOPT_POST, $post);
$headers = [];
$headers[] = "Content-Type: {$content_type}";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
return $result;
}
$prepareUrl = "https://api.linkedin.com/v2/assets?action=registerUpload&oauth2_access_token=".LINKEDIN_ACCESS_TOKEN;
$prepareRequest = [
"registerUploadRequest" => [
"recipes" => [
"urn:li:digitalmediaRecipe:feedshare-image"
],
'owner' => 'urn:li:organization:'.LINKEDIN_COMPANY_ID,
"serviceRelationships" => [
[
"relationshipType" => "OWNER",
"identifier" => "urn:li:userGeneratedContent"
],
],
],
];
$prepareReponse = curl($prepareUrl,json_encode($prepareRequest), "application/json");
$uploadURL = json_decode($prepareReponse)->value->uploadMechanism->{"com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest"}->uploadUrl;
echo $asset_id = json_decode($prepareReponse)->value->asset;
$client =new Client();
$client->request('PUT', $uploadURL, [
'headers' => [ 'Authorization' => 'Bearer ' . LINKEDIN_ACCESS_TOKEN],
'body' => fopen('../assets/images/authors/default.png', 'r')
]);
Я не могу понять, что происходит не так? если я могу опубликовать обычную текстовую строку, а также если я могу загрузить изображение и получить digitalassetID, то почему оно не публикуется на странице моей организации?