通过LinkedIn API V2创建图像共享不工作

通过LinkedIn API V2创建图像共享不工作,linkedin,linkedin-api,Linkedin,Linkedin Api,我使用api 2.0版,希望创建一个图像共享 LinkedIn在此处介绍您的图像二进制文件上载过程: 如果您按照说明操作,您将得到一个400 HTTP错误。 我在报头中添加内容类型,并在报头中获得带有X-RestLi-Id的201 HTTP状态。到目前为止还不错 如果我想在LinkedIn()上显示我创建的帖子,我找不到带有图片的帖子 如何修复它?有人有主意吗 PHP代码: $imageRequestData=array( “RegisterUplodRequest”=>数组( “配方”=>数

我使用api 2.0版,希望创建一个图像共享

LinkedIn在此处介绍您的图像二进制文件上载过程:

如果您按照说明操作,您将得到一个400 HTTP错误。 我在报头中添加内容类型,并在报头中获得带有
X-RestLi-Id
的201 HTTP状态。到目前为止还不错

如果我想在LinkedIn()上显示我创建的帖子,我找不到带有图片的帖子

如何修复它?有人有主意吗

PHP代码:

$imageRequestData=array(
“RegisterUplodRequest”=>数组(
“配方”=>数组(
“urn:li:digitalmediaRecipe:feedshare图像”
),
“所有者”=>$urn,//个人urn===urn:li:Person:XXXX
“serviceRelationships”=>数组(
排列(
“relationshipType”=>“所有者”,
“标识符”=>“urn:li:userGeneratedContent”
)
)
)
);
$image\u request=$this->post($v2/assets?action=registerUpload',$imageRequestData);
$headers=array();
$headers[]=“授权:持票人”$此->访问令牌;
$headers[]=“X-Restli-Protocol-Version:2.0.0”;
$headers[]=“内容类型:”。mime内容类型($image\u path)//例:图像/png
$ch=curl_init();
$options=array(
CURLOPT_HEADER=>true,
CURLOPT_CUSTOMREQUEST=>“POST”,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_URL=>$image_请求['message']['value']['uploadMechanism']
['com.linkedin.digitalmedia.upload.MediaUploadHttpRequest']['uploadUrl'],
CURLOPT_HTTPHEADER=>$headers,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_FOLLOWLOCATION=>true,
CURLOPT_POST=>true,
CURLOPT_CONNECTTIMEOUT=>this->CONNECTTIMEOUT,
CURLOPT_TIMEOUT=>this->TIMEOUT,
CURLOPT_POSTFIELDS=>array(“上传文件”=>new CURLFile($image_path))
);
curl_setopt_数组($ch$options);
$response=curl\u exec($ch);
$code=curl\u getinfo($ch,CURLINFO\u HTTP\u code);
卷曲关闭($ch);
$content=array(
'author'=>$urn,//Person urn===urn:li:Person:XXX
“lifecycleState”=>“已发布”,
'specificContent'=>数组(
“com.linkedin.ugc.ShareContent”=>数组(
“ShareCommentation”=>数组(
“text”=>$comment,
),
'shareMediaCategory'=>'IMAGE',
//无-共享不包含任何媒体,仅包含文本。
//文章-共享包含一个URL。
//图像-共享包含一个图像。
“媒体”=>阵列(
“状态”=>“准备就绪”,
“媒体”=>$image\u请求['message']['value']['asset']
)
)
),
“可见性”=>数组(
“com.linkedin.ugc.MemberNetworkVisibility”=>“PUBLIC”
)
);
$postfields=json_encode($content);
$headers=array();
$headers[]=“x-li-format:json”;
$headers[]=“授权:持票人”$此->访问令牌;
$headers[]=“内容类型:application/json”;
$headers[]=“内容长度:”。斯特伦(波斯特菲尔德);
$headers[]=“X-Restli-Protocol-Version:2.0.0”;
$ch=curl_init();
$options=array(
CURLOPT_HEADER=>true,
CURLOPT_CUSTOMREQUEST=>“POST”,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_URL=>'https://api.linkedin.com/v2/ugcPosts',
CURLOPT_HTTPHEADER=>$headers,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_FOLLOWLOCATION=>true,
CURLOPT_POST=>true,
CURLOPT_CONNECTTIMEOUT=>this->CONNECTTIMEOUT,
CURLOPT_TIMEOUT=>this->TIMEOUT,
CURLOPT_POSTFIELDS=>$POSTFIELDS
);
curl_setopt_数组($ch$options);
$response=curl\u exec($ch);

您需要将请求更改为
PUT
,并保留SSL VerifyPeer的默认设置:

$headers=array();
$headers[]=“授权:持票人”$此->访问令牌;
$headers[]=“X-Restli-Protocol-Version:2.0.0”;
$headers[]=“内容类型:多部分/表单数据”;
$ch=curl_init();
$options=array(
CURLOPT_HEADER=>true,
CURLOPT_CUSTOMREQUEST=>PUT',//需要将自定义请求设置为PUT而不是post
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_URL=>$image_请求['message']['value']['uploadMechanism']
['com.linkedin.digitalmedia.upload.MediaUploadHttpRequest']['uploadUrl'],
CURLOPT_HTTPHEADER=>$headers,
//CURLOPT_SSL_VERIFYPEER=>false,//保留默认选项
CURLOPT_FOLLOWLOCATION=>true,
CURLOPT_POST=>true,
CURLOPT_CONNECTTIMEOUT=>this->CONNECTTIMEOUT,
CURLOPT_TIMEOUT=>this->TIMEOUT,
CURLOPT_POSTFIELDS=>array(“上传文件”=>new CURLFile($image_path))
);
curl_setopt_数组($ch$options);
$response=curl\u exec($ch);
$code=curl\u getinfo($ch,CURLINFO\u HTTP\u code);
卷曲关闭($ch);
或者使用http\Client简化上载:

$client=new\GuzzleHttp\client();
$client->request('PUT',
$image\u请求['message']['value']['uploadMechanism']//↵
['com.linkedin.digitalmedia.upload.MediaUploadHttpRequest']['uploadUrl'],
[
“标题”=>[
“授权”=>“承载者”。$this->accessToken
],
'body'=>fopen($image_path,'r'),
]

curl方法似乎对我不起作用,但Guzzle方法确实起作用了,不幸的是,我不能依靠Guzzle来做这件事。我已经有很长一段时间的麻烦了。你的解决方案让我摆脱了这个麻烦,这对我很有用@Nikola Kirincic