当前位置: 首页 > 知识库问答 >
问题:

为什么LinkedIn API上共享返回400个坏请求?

郏经纬
2023-03-14

我试图通过LinkedIn API上的共享发布一个LinkedIn共享更新,使用PHP库LinkedIn-Client API。我已经成功地授权了该用户,并从该用户那里返回了访问令牌。我将该令牌与这个共享API调用一起使用。下面是我的代码:

$linkedInOAuth = new Happyr\LinkedIn\LinkedIn(LINKEDIN_APP_ID, LINKEDIN_APP_SECRET);

if ($accessToken) { // assume that it is retrieved from session
    $linkedInOAuth->setAccessToken($accessToken);

    $postParams = array(
        "content" => array(
            'description' => "I'm so exciting to share a post using API."
        ),
        "visibility" => array(
            "code" => "connnections-only"
        )
    );

    $result = $linkedInOAuth->api(
        "v1/people/~/shares",
        array("format" => "json"),
        "POST",
        $postParams
    );
}

LinkedIn-Client API在内部使用Guzzle处理HTTP请求。我试图直接使用guzzlehttp,而不使用happyr\linkedin\linkedin->api(),但是错误相同,没有成功。

if ($accessToken) {
    $url = 'https://api.linkedin.com/v1/people/~/shares?format=json&oauth2_access_token=' . $accessToken;

    $client = new GuzzleHttp\Client();

    $response = $client->post($url, array(
        'headers' => array(
            'Content-Type' => 'application/json',
            'x-li-format'  => 'json'
        ),
        'json' => array(
            'comment' => 'Check out developer.linkedin.com!',
            'content' => array(
                'description' => 'I\'m so exciting to share a post using API.'
            ),
            'visibility' => array(
                'code' => 'connections-only'
            )
        )
    ));
}

致命错误:未捕获的异常“GUZZLEHTTP\exception\ClientException”,带有消息“Client error response[url]https://api.linkedin.com/v1/people/~/shares?format=json&oauth2_access_token=xxxxx[status code]400[reason Phrace]Bad Request”在\vendor\guzzle\src\exception\requestException.php:89堆栈跟踪guzzleHTTP\guzzle\src\event\emitter.php(109):guzzleHTTP\subscriber\httperror->oncomplete(Object(GuzzleHTTP\event\completeEvent),'complete')#2\vendor\guzzleHTTP\guzzle\src\requestFSM.php(91):guzzleHTTP\event\completeEvent.php,'complete')

我复制并使用了LinkedIn API页面上共享的xml和json示例。这一次,错误更改为内部服务器错误。

if ($accessToken) {
    $format = 'xml';
    $url = 'https://api.linkedin.com/v1/people/~/shares?format='.$format.'&oauth2_access_token=' . $connect->accessToken;
    $postParams = array(
        "xml" => "
            <share>
                <comment>Check out developer.linkedin.com!</comment>
                <content>
                    <title>LinkedIn Developer Resources</title>
                    <description>Leverage LinkedIn's APIs to maximize engagement</description>
                    <submitted-url>https://developer.linkedin.com</submitted-url>
                    <submitted-image-url>https://example.com/logo.png</submitted-image-url>
                </content>
                <visibility>
                    <code>anyone</code>
                </visibility>
            </share>",
        "json" => array(
            "comment" => "Check out developer.linkedin.com!",
            "content" => array(
                "title" => "LinkedIn Developers Resources",
                "description" => "Leverage LinkedIn's APIs to maximize engagement",
                "submitted-url" => "https://developer.linkedin.com",
                "submitted-image-url" => "https://example.com/logo.png"
            ),
            "visibility" => array(
                "code" => "anyone"
            )
        )
    );

    $client = new GuzzleHttp\Client();

    if ($format === 'xml') {
        $response = $client->post($url, array(
            'body' => $postParams['xml']
        ));
    } else {
        $response = $client->post($url, array(
            'headers' => array(
                'Content-Type' => 'application/json',
                'x-li-format'  => 'json'
            ),
            'json' => $postParams['json']
        ));
    }
}

致命错误:未捕获的异常“GUZZLEHTTP\exception\ServerException”,消息为“服务器错误响应[url]https://api.linkedin.com/v1/people/~/shares?format=json&oauth2_access_token=xxxx[状态代码]500[原因短语]内部服务器错误”

共有1个答案

汲昊空
2023-03-14

根据happyr\linkedin-api-client的Github问题,在0.5.0中进行了一些更新,它解决了我的问题。然而,LinkedIn关于其Share API的文档并不清楚。必须注意以下信息:

  • 注释字段是共享更新内容。名称comment会引起混乱。
  • 使用字段注释,URL在共享更新内容中是可选的。
  • content字段表示您共享的URL内容的快照。为了更清楚地描述,它反映了开放的图元标记;
    • content.title重写
    • content.description重写
    • content.title重写
    • content.submited-url重写
    • content.submited-image-url重写

    下面是使用happyr\linkedin-api-client的API的正确用法。

    $linkedInOAuth = new Happyr\LinkedIn\LinkedIn(LINKEDIN_APP_ID, LINKEDIN_APP_SECRET);
    // retrieve $accessToken from db or session
    $linkedInOAuth->setAccessToken($accessToken);
    
    $postParams = array(
        'json' => array(
            "comment" => "PHPLucidFrame - The simple, lightweight and flexible web application development framework http://phplucidframe.sithukyaw.com",
            "visibility" => array(
                "code" => "anyone"
            )
        )
    );
    
    $result = $linkedInOAuth->post('v1/people/~/shares', $postParams);
    
    $linkedInOAuth = new Happyr\LinkedIn\LinkedIn(LINKEDIN_APP_ID, LINKEDIN_APP_SECRET);
    // retrieve $accessToken from db or session
    $linkedInOAuth->setAccessToken($accessToken);
    
    $postParams = array(
        'json' => array(
            "content" => array(
                "title" => "PHPLucidFrame",
                "description" => "The simple, lightweight and flexible web application development framework",
                "submitted-url" => "http://phplucidframe.sithukyaw.com"
            ),
            "visibility" => array(
                "code" => "anyone"
            )
        )
    );
    
    $result = $linkedInOAuth->post('v1/people/~/shares', $postParams);
    

    下面是使用GuzzleHTTP的API的正确用法。

    // retrieve $accessToken from db or session
    $url = 'https://api.linkedin.com/v1/people/~/shares?format=json&oauth2_access_token=' . $accessToken;
    $client = new GuzzleHttp\Client();
    $response = $client->post($url, array(
        "json" => array(
            "comment" => "PHPLucidFrame - The simple, lightweight and flexible web application development framework http://phplucidframe.sithukyaw.com",
            "visibility" => array(
                "code" => "anyone"
            )
        )
    ));
    
    // retrieve $accessToken from db or session
    $url = 'https://api.linkedin.com/v1/people/~/shares?format=json&oauth2_access_token=' . $accessToken;
    $client = new GuzzleHttp\Client();
    $response = $client->post($url, array(
        "json" => array(
            "content" => array(
                "title" => "PHPLucidFrame",
                "description" => "The simple, lightweight and flexible web application development framework",
                "submitted-url" => "http://phplucidframe.sithukyaw.com"
            ),
            "visibility" => array(
                "code" => "anyone"
            )
        )
    ));
    

    字段commentcontent也可以一起使用。

 类似资料:
  • 我们有一个公司范围的Nexus 3服务器 拥有我们自己的文物和 用作Maven Central和其他回购的代理。 开发人员使用两个存储库: maven针对所有已发布/稳定的工件发布版本策略“Release”和 版本策略为“快照”的所有快照工件的maven快照 这两个存储库都用于Gradle构建: 现在,当Gradle试图解决快照依赖关系时,它会询问releases存储库,Nexus会用 而构建失败

  • 当我添加ACDailyLine时,两个post方法的请求都变为4oo错误 为什么当我只放ACDailyH post方法时,一切正常,返回201请求。当我为AcDailyLine添加时,两者都返回400个错误请求。请帮忙,提前谢谢:) 在这里,当我调试该行时

  • 问题内容: 以下是ajax请求。 这就是delete.php 运行代码后,它将成功删除文件,但不会显示任何消息。 我也尝试将ajax请求更改为: 仍然不显示该消息。所以我想在delete.php文件中出了点问题。请帮忙。 问题答案: 进行jquery + ajax + php的最佳方法如下: jQuery的: PHP:

  • 问题内容: 我有一台运行Java servlet的Tomcat服务器。我正在尝试使一个servlet返回给定的加密ID的存储文件。 编号:100 加密的ID:+ e4 / E5cR / aM = 网址编码的ID:%2Be4%2FE5cR%2FaM%3D 结果URL:http:// localhost / file / demo /%2Be4%2FE5cR%2FaM%3D 当我尝试访问该链接时,我什

  • 我有一个运行Java servlets的Tomcat服务器。我正在尝试制作一个返回存储文件的 servlet,给定它们的加密 ID。 编号: 100 加密ID:e4/E5cR/aM= URL编码的ID: +e4/E5cR/aM= 生成的网址:http://localhost/file/demo/+e4/E5cR/aM= 当我试图访问那个链接时,我甚至没有进入我的servlet的代码——服务器返回这

  • 我正在尝试配置一个基于extjs作为前端和Spring作为后端的小应用程序。因此,为了从extjs与服务器通信,我们需要在存储区配置代理编写器。我的代理配置如下所示: 这是Spring控制器中的@Request estMmap: Tomcat每次回答“400错误请求”时都会使用描述“客户端发送的请求语法不正确”。 所以,但是如果我将代理类型更改为ajax并请求映射以获取POST请求,一切都可以正常