Я создал личную учетную запись на LinkedIn, а затем я создал страницу компании с тем же личным идентификатором. То, что я пытаюсь достичь, это. Я хочу создать автоматический планировщик в php, чтобы я мог публиковать контент на странице компании.
Я создал приложение в разделе разработчиков LinkedIn и также одобрил его. Я показываю, что приложение имеет следующие права доступа
r_emailaddress
r_basicprofile
w_member_social
w_organization_social
rw_organization_admin
Я создал Oauth для linkedin, для которого я получаю токен доступа, после получения токена доступа я получаю свой идентификатор linkedin, затем я пытаюсь разместить контент на linkedin через API.
Когда я делаю запрос на публикацию, он публикует его в личном профиле, а не на странице компании, которой он управляет.
Ниже находится мой файл конфигурации
<?php
define('CLIENT_ID', 'ID_HERE');
define('CLIENT_SECRET', 'SECRET_HERE');
define('REDIRECT_URI', 'call_back_url_here');
define('SCOPES', 'r_emailaddress,r_basicprofile,w_member_social,w_organization_social,rw_organization_admin');
?>
Я использую приведенный ниже код в качестве своего индекса
<?php
require_once 'config.php';
$state = substr(str_shuffle("0123456789abcHGFRlki"), 0, 10);
$url = "https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=".CLIENT_ID."&redirect_uri=".REDIRECT_URI."&scope=".SCOPES."&state=".$state;
?>
<a href="<?php echo $url; ?>">Login with LinkedIn</a>
Ниже приведен мой обратный вызов. php file
<?php
require_once 'config.php';
require_once '../../../vendor/autoload.php';
use GuzzleHttp\Client;
try {
$client = new Client(['base_uri' => 'https://www.linkedin.com']);
$response = $client->request('POST', '/oauth/v2/accessToken', [
'form_params' => [
"grant_type" => "authorization_code",
"code" => $_GET['code'],
"redirect_uri" => REDIRECT_URI,
"client_id" => CLIENT_ID,
"client_secret" => CLIENT_SECRET,
],
]);
$data = json_decode($response->getBody()->getContents(), true);
$access_token = $data['access_token']; // store this token somewhere
echo $access_token;
} catch(Exception $e) {
echo $e->getMessage();
}
?>
Затем я пытаюсь получить идентификатор кода, используя запрос ниже
<?php
require_once 'config.php';
require_once '../../../vendor/autoload.php';
use GuzzleHttp\Client;
$access_token = '';
try {
$client = new Client(['base_uri' => 'https://api.linkedin.com']);
$response = $client->request('GET', '/v2/me', [
'headers' => [
"Authorization" => "Bearer " . $access_token,
],
]);
$data = json_decode($response->getBody()->getContents(), true);
echo $linkedin_profile_id = $data['id']; // store this id somewhere
} catch(Exception $e) {
echo $e->getMessage();
}
?>
И, наконец, я использую приведенную ниже страницу, чтобы разместить контент на linkedin
<?php
require_once '../../../vendor/autoload.php';
use GuzzleHttp\Client;
$link = 'https://www.demo-url.com';
$access_token = '';
// $linkedin_id = 'ubcwiQjr8'; //please note this is demo linkedin ID, but i get some similar ID when i trigger above file
$linkedin_id = '67900000'; //please note this is demo company ID
$body = new \stdClass();
$body->content = new \stdClass();
$body->content->contentEntities[0] = new \stdClass();
$body->text = new \stdClass();
$body->content->contentEntities[0]->thumbnails[0] = new \stdClass();
$body->content->contentEntities[0]->entityLocation = $link;
// $body->content->contentEntities[0]->thumbnails[0]->resolvedUrl = "THUMBNAIL_URL_TO_POST";
$body->content->title = 'Demo title';
$body->owner = 'urn:li:person:'.$linkedin_id;
$body->text->text = 'Somse Dsdfgjjijekdjkjdmo tditle summar1y';
$body_json = json_encode($body, true);
try {
$client = new Client(['base_uri' => 'https://api.linkedin.com']);
$response = $client->request('POST', '/v2/shares', [
'headers' => [
"Authorization" => "Bearer " . $access_token,
"Content-Type" => "application/json",
"x-li-format" => "json"
],
'body' => $body_json,
]);
if ($response->getStatusCode() !== 201) {
echo 'Error: '. $response->getLastBody()->errors[0]->message;
}
echo 'Post is shared on LinkedIn successfully';
} catch(Exception $e) {
echo $e->getMessage(). ' for link '. $link;
}
?>
Код отлично работает, когда я хочу опубликовать в личном профиле, но код не работает для размещение на странице, что это админ. Я почесал голову и сделал все, что мог, я пытался использовать $body->owner = 'urn:li:organization:'.$linkedin_id;
и $body->owner = 'urn:li:company:'.$linkedin_id;
, но не повезло.
Может кто-нибудь дать мне знать, как мне разместить на странице компании? Я застрял здесь на 2 дня, любая помощь / источник будут оценены.
Я использовал этот учебник для ссылки: https://artisansweb.net/share-post-on-linkedin-using-linkedin-api-and-php/
Ошибка, которую я получаю это Client error:
POST https://api.linkedin.com/v2/sharesresulted in a
400 Плохой запрос response: {"message":"com.linkedin.restli.client.RestLiResponseException: Response status 400, serviceErrorMessage: com.linkedin.p (truncated...) for link <some_url>
Ниже приведен код JSON, который я отправляю на вызов API-интерфейса linkedin
{
"content": {
"contentEntities": [
{
"entityLocation": "https://www.some-demo-url.com/cyber-security/how-to-keep-my-phone-and-laptop-safe",
"thumbnails": [
{}
]
}
],
"title": "Demo Title 1"
},
"owner": "urn:li:organization:739472893749", //organization id
"subject": "Some Subject",
"text": {
"text": "In the last article, we discussed in detail about passwords and related concepts. Today, we want to take care of the devices that you use to access the internet 1"
}
}