Java 的 JSAPI LinkedIn OAuth10a 请求(基于 PHP 版本)

JSAPI LinkedIn OAuth10a request with Java (based on a PHP version)

我正在尝试使用 API.

访问 LinkedIn 个人资料上的数据

起初我在 PHP 中关注 https://developer-programs.linkedin.com/documents/exchange-jsapi-tokens-rest-api-oauth-tokens 上的 LinkedIn JSPAI Doc。所以我开始使用 Scribe 将代码从 PHP 翻译成 Java。

然后,我在 Github 上找到了这个例子,它看起来像我所做的:https://github.com/fernandezpablo85/TokenExchangeSample/blob/master/src/main/java/com/linkedin/oauth/ExchangeService.java

在授权和 cookie 交换之后,我最终得到了这个字符串:

oauth_token=75--4ff2c506-37e2-4b77-927f-c28c5f511762&oauth_token_secret=c73110b2-0dce-43bd-8537-8c8fb4fd5290&oauth_expires_in=5183975&oauth_authorization_expires_in=5183975

在 PHP 中,列出的代码有助于获取用户数据,如 $url 中所述:

// go to town, fetch the user's profile
$url = 'http://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline)';
$oauth->fetch($url, array(), OAUTH_HTTP_METHOD_GET, array('x-li-format' => 'json')); // JSON!
$profile = json_decode($oauth->getLastResponse());
print "$profile->firstName $profile->lastName is $profile->headline.";

所以代码有效并且 returns 数据。在 Java 版本中,我想知道如何使用返回的令牌。

我试过用过https://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline)?oauth_token=75--7ff2c506-57e2-4b77-927f-c28c5f551762&oauth_token_secret=c73330b2-0dce-48bd-8537-8c8fb4fd5290&oauth_expires_in=5183975&oauth_authorization_expires_in=5183975

但是不行。

我找到了解决方案:获得 Oauth10a 密钥后,您应该通过指定 json 格式在新请求中使用它们。

     OAuthService service = new ServiceBuilder()
                .apiKey(APIKEY)
                .apiSecret(SECRETKEY)
                .provider(LinkedInApi.class)
                .build();

    OAuthRequest oAuthRequestData = new OAuthRequest(Verb.GET, DATAENDPOINT);
    oAuthRequestData.addHeader("x-li-format", "json");
    Token accessToken = new Token(oauth_token, oauth_token_secret);
    service.signRequest(accessToken, oAuthRequestData);
    Response oAuthResponse = oAuthRequestData.send();
    System.outt.println(oAuthResponse.getBody());