setAccessToken($accessToken); $this->linkedIn = $linkedIn; $this->companyPageId = $companyPageId; } public function canPublish(Message $message): bool { $canPublish = !empty(array_intersect($message->getNetworksToPublishOn(), [Enum::ANY, Enum::LINKEDIN])); return $canPublish; } public function publish(Message $message): bool { if (!$this->canPublish($message)) { throw new MessageNotIntendedForPublisher(Enum::LINKEDIN); } try { $publishShareEndpoint = 'v1/companies/'.$this->companyPageId.'/shares'; $options = ['json' => $this->prepareShareOptions($message)]; $share = $this->linkedIn->post($publishShareEndpoint, $options); return isset($share['updateKey']) ? !empty($share['updateKey']) : false; } catch (\Exception $e) { throw new FailureWhenPublishingMessage($e); } } private function prepareShareOptions(Message $message): array { $share = []; $share['comment'] = $message->getMessage(); $share['visibility']['code'] = 'anyone'; if (filter_var($message->getLink(), FILTER_VALIDATE_URL) !== false) { $share['content']['submitted-url'] = $message->getLink(); } if (filter_var($message->getPictureLink(), FILTER_VALIDATE_URL) !== false) { $share['content']['submitted-image-url'] = $message->getPictureLink(); } if (!empty($message->getCaption())) { $share['content']['title'] = $message->getCaption(); } if (!empty($message->getDescription())) { $share['content']['description'] = $message->getDescription(); } return $share; } }