Linkedin 如何使用“-i——上传文件”;进入PHP?

Linkedin 如何使用“-i——上传文件”;进入PHP?,linkedin,linkedin-api,Linkedin,Linkedin Api,此调用在文档的步骤2中引用 我按照文档通过版本2 API在LinkedIn中创建图像和文本共享。按照文档中的步骤,我成功地完成了每个步骤。但是,LinkedIn中不存在我的帖子,基于API请求返回的ID,直接链接无法查看我的帖子 在调试过程中,我向发出了get请求。这是为了检索在第一步中创建的媒体资产(文档)。它返回了以下状态为“CLIENT_ERROR”的json。但是,如果您查看文档,该状态不是该字段列出的状态之一 { "serviceRelationships": [

此调用在文档的步骤2中引用

我按照文档通过版本2 API在LinkedIn中创建图像和文本共享。按照文档中的步骤,我成功地完成了每个步骤。但是,LinkedIn中不存在我的帖子,基于API请求返回的ID,直接链接无法查看我的帖子

在调试过程中,我向发出了get请求。这是为了检索在第一步中创建的媒体资产(文档)。它返回了以下状态为“CLIENT_ERROR”的json。但是,如果您查看文档,该状态不是该字段列出的状态之一

{
    "serviceRelationships": [
        {
            "identifier": "urn:li:userGeneratedContent",
            "relationshipType": "OWNER"
        }
    ],
    "recipes": [
        {
            "recipe": "urn:li:digitalmediaRecipe:feedshare-image",
            "status": "CLIENT_ERROR"
        }
    ],
    "mediaTypeFamily": "STILLIMAGE",
    "created": 1550875198973,
    "lastModified": 1550875199857,
    "id": "C5622AQFbyxMfU2b9zg",
    "status": "ALLOWED"
}
我能够使用命令行curl成功上传文件。问题似乎出在我的PHP实现上。具体来说,二进制文件的上载工作不正常。下面是我的php代码的简化表示

    $ch = curl_init();

    $headers = [
        'Authorization: Bearer ' . $this->accessToken->access_token,
        'Cache-Control: no-cache',
        'X-RestLi-Protocol-Version: 2.0.0',
        'x-li-format: json',
        'Content-Type: ' . $this->mimetype
    ];

    $data = [
        'file' => curl_file_create($filename, $this->mimetype);
    ];

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_URL, 'https://api.linkedin.com/mediaUpload/C5622AQHSLBWkZeg-gQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJIFvVUxXl7yAAAAWkwjT0kEPKHY5BnAgXETcVQ3AbsxmvaGl6hnuECwA&app=22961836&sync=0&v=beta&ut=2RaKRdHD_OwUE1');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    print_r($result);

我最近也遇到了同样的问题,linkedin的文档对我帮助不大。

首先要了解的是,“curl--upload file”使用PUT请求方法。下面是我使用的虚拟数据

$file = "/storage/media/testimg.jpg";
$uploadurl = "https://api.linkedin.com/mediaUpload/C5622AQHSLBWkZeg-gQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJIFvVUxXl7yAAAAWkwjT0kEPKHY5BnAgXETcVQ3AbsxmvaGl6hnuECwA&app=22961836&sync=0&v=beta&ut=2RaKRdHD_OwUE1";
$accesstoken = "acacdsv13rv31bv13b1cf13cf13rv13rv13vr13tb5dxvghn";
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $uploadurl);
curl_setopt($curl_handle, CURLOPT_PUT, 1);
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "PUT");
$fh_res = fopen($file, 'r');
curl_setopt($curl_handle, CURLOPT_INFILE, $fh_res);
curl_setopt($curl_handle, CURLOPT_INFILESIZE, filesize($file));
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$headers[] = "Authorization: Bearer $accesstoken"; //linkedin says to add 'redacted' instead of access token (that's bullshit)
$headers[] = 'Connection: Keep-Alive';
$headers[] = "X-RestLi-Protocol-Version:2.0.0";
curl_setopt($curl_handle,CURLOPT_HTTPHEADER,$headers);
$rcurl = curl_exec($curl_handle);
curl_close($curl_handle);
如果转储响应
$rcurl
,则只会得到一个空字符串。所以下一步是检查上传的状态,这是他们完全忘记在图片共享文档中提到的,但是可以在这里找到

使用初始映像寄存器调用中的资产变量,检查上载的状态,直到状态检查返回
AVAILABLE

$asset = "urn:li:digitalmediaAsset:C4asdfvqqrv3";
$a = explode("digitalmediaAsset:", $asset);            
$statuscheck =  make a GET curl call to the url: "/assets/" . $a[1]         
$uploadstat = $statuscheck['recipes'][0]['status'];
do{
    $statuscheck =  make a GET curl call to the url: "/assets/" . $a[1];
    $uploadstat = $statuscheck['recipes'][0]['status'];
}while($uploadstat != 'AVAILABLE');

返回
AVAILABLE
后,现在可以继续创建图像共享的下一步。希望这有帮助

我最近也遇到了同样的问题,linkedin的文档没有太大帮助。

首先要了解的是,“curl--upload file”使用PUT请求方法。下面是我使用的虚拟数据

$file = "/storage/media/testimg.jpg";
$uploadurl = "https://api.linkedin.com/mediaUpload/C5622AQHSLBWkZeg-gQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJIFvVUxXl7yAAAAWkwjT0kEPKHY5BnAgXETcVQ3AbsxmvaGl6hnuECwA&app=22961836&sync=0&v=beta&ut=2RaKRdHD_OwUE1";
$accesstoken = "acacdsv13rv31bv13b1cf13cf13rv13rv13vr13tb5dxvghn";
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $uploadurl);
curl_setopt($curl_handle, CURLOPT_PUT, 1);
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "PUT");
$fh_res = fopen($file, 'r');
curl_setopt($curl_handle, CURLOPT_INFILE, $fh_res);
curl_setopt($curl_handle, CURLOPT_INFILESIZE, filesize($file));
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$headers[] = "Authorization: Bearer $accesstoken"; //linkedin says to add 'redacted' instead of access token (that's bullshit)
$headers[] = 'Connection: Keep-Alive';
$headers[] = "X-RestLi-Protocol-Version:2.0.0";
curl_setopt($curl_handle,CURLOPT_HTTPHEADER,$headers);
$rcurl = curl_exec($curl_handle);
curl_close($curl_handle);
如果转储响应
$rcurl
,则只会得到一个空字符串。所以下一步是检查上传的状态,这是他们完全忘记在图片共享文档中提到的,但是可以在这里找到

使用初始映像寄存器调用中的资产变量,检查上载的状态,直到状态检查返回
AVAILABLE

$asset = "urn:li:digitalmediaAsset:C4asdfvqqrv3";
$a = explode("digitalmediaAsset:", $asset);            
$statuscheck =  make a GET curl call to the url: "/assets/" . $a[1]         
$uploadstat = $statuscheck['recipes'][0]['status'];
do{
    $statuscheck =  make a GET curl call to the url: "/assets/" . $a[1];
    $uploadstat = $statuscheck['recipes'][0]['status'];
}while($uploadstat != 'AVAILABLE');

返回
AVAILABLE
后,现在可以继续创建图像共享的下一步。希望这有帮助

请向linkedin.zendesk.com提交一份记录单,包括所有这些信息,以及随您的每个请求一起收到的响应标题。@ChristopherRou已完成。谢谢。这可能是的一个副本,但它是特定于php的,所以我认为它是distinct@JonathanReissmueller,我的问题与您完全相同,但在java中,您找到解决方案了吗?遗憾的是,没有。我联系了开发人员支持,他们基本上说“用您的语言实现它是您的问题。”由于问题是将其转换为您选择的语言,但我认为我找到的解决方案对您没有用处。请向linkedin.zendesk.com提交一份票据,包括所有这些信息,以及您每个请求收到的响应标题。@Christophen Rou已完成。谢谢。这可能是的一个副本,但它是特定于php的,所以我认为它是distinct@JonathanReissmueller,我的问题与您完全相同,但在java中,您找到解决方案了吗?遗憾的是,没有。我联系了开发人员支持,他们基本上说“用您的语言实现它是您的问题。”由于问题是将其转换为您选择的语言,尽管我认为我找到的解决方案对您没有用处。