使用 LinkedIn API 发布文章时如何修复未知的取消引用类型 ARRAY

How to fix Unknown dereferenced type ARRAY when posting an article using LinkedIn API

我正在设置 post 到 LinkedIn 的功能,具体取决于用户想要什么 post。这些选项目前只是文本或带有 link 的文本。仅发布文本没有问题,但是当我尝试添加 link 时,我收到来自 LinkedIn 的不明确错误。

我用来将请求传递给 cURL 的代码是:

$Header[] = 'Content-Type: application/json';
$Header[] = 'x-li-format: json';
$Header[] = 'X-Restli-Protocol-Version: 2.0.0';
$Header[] = 'Authorization: Bearer <ACCESS TOKEN>';
$Header[] = 'Content-Length: ' . strlen(json_encode($FieldsArray));
$Curl = curl_init('https://api.linkedin.com/v2/ugcPosts');
curl_setopt($Curl, CURLOPT_POST, true);
curl_setopt($Curl, CURLOPT_HTTPHEADER, $Header);
curl_setopt($Curl, CURLOPT_POSTFIELDS, json_encode($FieldsArray));
curl_setopt($Curl, CURLOPT_RETURNTRANSFER, true);
$Response = curl_exec($Curl);
curl_close($Curl);                     

$FieldsArray 为以下数组。

array(4) {
  ["specificContent"]=>
  array(1) {
    ["com.linkedin.ugc.ShareContent"]=>
    array(3) {
      ["media"]=>
      array(2) {
        ["status"]=>
        string(5) "READY"
        ["originalUrl"]=>
        string(24) "<URL>"
      }
      ["shareCommentary"]=>
      array(1) {
        ["text"]=>
        string(4) "test"
      }
      ["shareMediaCategory"]=>
      string(7) "ARTICLE"
    }
  }
  ["author"]=>
  string(28) "urn:li:organization:<ORGANIZATION ID>"
  ["lifecycleState"]=>
  string(9) "PUBLISHED"
  ["visibility"]=>
  array(1) {
    ["com.linkedin.ugc.MemberNetworkVisibility"]=>
    string(11) "PUBLIC"
  }
}

使用不带 URL 和 shareMediaCategory:None returns 的类似数组:

object(stdClass)#15 (1) { ["id"]=> string(32) "urn:li:share:<SHARE ID>" }

我希望与上面的数组类似,但响应是:

Unknown dereferenced type ARRAY for DataMap's schema { "type" : "array", "items" : { "type" : "record", "name" : "ShareMedia", "namespace" : "com.linkedin.ugc", "doc" : "Media that has been shared.", "fields" : [ { "name" : "title", "type" : { "type" : "record", "name" : "AttributedText", "namespace" : "com.linkedin.common", "doc" : "A text with attributes within it", "fields" : [...

如有任何帮助,我们将不胜感激。

谢谢。

由于 JSON 请求对象中的媒体格式不正确,我收到了此错误。但是,我相信在您的情况下,您错误地指定了媒体资产。请参阅以下 API 文档以上传图片并获取用于发布的 digitalMediaAsset ID:https://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin#create-an-image-share

在 PHP 之前 json_encoding 请求,以下格式适合我。

$postStatus['specificContent']['com.linkedin.ugc.ShareContent']['shareMediaCategory'] = 'IMAGE';
$postStatus['specificContent']['com.linkedin.ugc.ShareContent']['media'][] = $media;

其中$media本身就是一个数组:

Array
(
    [status] => READY
    [media] => urn:li:digitalmediaAsset:abc123
)

注意:在您提出请求之前,数字媒体资产可能未完全上传。您可以使用资产 API 检查图像的状态:https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/vector-asset-api