Как разместить на странице компании Linkedin через Linkedin API v2 в PHP - PullRequest
0 голосов
/ 16 апреля 2020

Я создал личную учетную запись на 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"
}

}

...