LinkedIn富媒体分享API权限不足错误排查求助
我来帮你搞定这个权限错误!你遇到的Not enough permissions to access media resource问题,核心原因是当前应用权限不支持媒体上传操作,下面是具体的排查和修复步骤:
1. 权限范围缺失是关键
你现有的权限r_basicprofile、r_emailaddress、rw_company_admin、w_share里,w_share是旧版的分享权限,仅能支持纯文本或链接分享,无法覆盖富媒体(图片/视频)上传场景。LinkedIn针对富媒体上传拆分了更细分的权限:
- 如果是个人账号上传媒体并分享,需要添加
w_member_social权限(对应「Share on LinkedIn」产品) - 如果是企业页面上传媒体,需要添加
w_organization_social权限(对应「Organization Social」产品)
2. 更新应用权限并重新授权
按以下步骤操作:
- 登录LinkedIn开发者后台,找到你的应用
- 进入「Permissions & Features」页面(或「Products」标签,取决于后台版本)
- 搜索并添加对应的权限产品:
- 个人分享选「Share on LinkedIn」
- 企业页面管理选「Organization Social」
- 提交权限申请(部分权限需要LinkedIn人工审核,耐心等待通过)
- 权限审核通过后,必须重新走OAuth授权流程,获取包含新权限的access token(旧token不会自动新增权限)
3. 修正API调用的细节问题
你的代码里还有一个小坑:multipart/form-data的边界符前后不一致,会导致请求格式错误。另外手动拼接二进制数据容易出错,建议直接读取文件内容。修正后的代码示例:
<?php $curl = curl_init(); // 定义统一的边界符,避免前后不一致 $boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; curl_setopt_array($curl, array( CURLOPT_URL => "https://api.linkedin.com/media/upload", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "--$boundary\r\n" . "Content-Disposition: form-data; name=\"source\"; filename=\"iphone5.jpeg\"\r\n" . "Content-Type: image/jpeg\r\n\r\n" . file_get_contents("iphone5.jpeg") . "\r\n" . // 直接读取本地文件的二进制内容 "--$boundary--", CURLOPT_HTTPHEADER => array( "authorization: Bearer YOUR_ACCESS_TOKEN", // 替换为新的access token "cache-control: no-cache", "content-type: multipart/form-data; boundary=$boundary" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } ?>
最后验证
等新权限生效并拿到新token后,用修正后的代码重新调用API,应该就能成功上传媒体了。如果还是有问题,可以检查token的权限范围(调用https://api.linkedin.com/v2/me接口,返回的serviceProviders字段会包含当前权限)。
内容的提问来源于stack exchange,提问作者Mehul V.
相关产品推荐
相关产品推荐

