使用Oauth2 access_token在PHP中发布网络更新到LinkedIn

时间:2013-03-31 10:07:57

标签: php oauth-2.0 linkedin

LinkedIn REST API的许多代码示例和工具都假设您已使用Oauth1来识别并因此获得了成员令牌和成员密钥。

现在,LinkedIn提供的示例代码:http://developer.linkedin.com/documents/code-samples 能够获得Oauth2 access_token。

获得access_token后,您可以使用代码示例中提供的获取功能进行查询并获取成员的详细信息

function fetch($method, $resource, $body = '') {


 $params = array('oauth2_access_token' => $_SESSION['access_token'],
                    'format' => 'json',
              );

    // Need to use HTTPS
    $url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params);
    // Tell streams to make a (GET, POST, PUT, or DELETE) request
    $context = stream_context_create(
                    array('http' =>
                        array('method' => $method,
                        )
                    )
                );


    // Hocus Pocus
    $response = file_get_contents($url, false, $context);

    // Native PHP object, please
    return json_decode($response);
}

好的,很好,这完美无缺。但是prodived fetch函数假定body是NULL。 但是要使用/v1/people/~/person-activities发布网络更新,您需要在正文中传递一些XML。我尝试了很多方法,发现了几十个使用Oauth 1.0成员令牌和成员秘密的例子。但是我没有找到任何解决方案,当你只有一个Oauth2 access_token时。所以问题是: 此获取函数需要进行哪些更改才能在查询中传递XML正文?

1 个答案:

答案 0 :(得分:3)

最后,我找到了答案。

function GetXMLTemplate(){
   string = '<?xml version="1.0" encoding="UTF-8"?><activity locale="en_US">
   <content-type>linkedin-html</content-type>
   <body>xml_content</body>
   </activity>';
   return $string;
 }

 public function PostActivity($message) {   
    $details = $this->GetLinkedInDetails(); //own function returning basic details in Stdobject
    $url = 'https://api.linkedin.com/v1/people/~/
       person-activities?oauth2_access_token='.$this->access_token;
    // build your message
    $txt = '<a href="'.$details->siteStandardProfileRequest->url.'">'.$details->firstName.
           ' '.$details->lastName.'</a> '.$message;
    //the below str_replace is only required because the activity contains a <a> tag
    //if you don't have one, just keep the htmlspecialchars
    $txt = str_replace("&","&amp;",htmlspecialchars($txt,ENT_QUOTES,'UTF-8'));
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,str_replace('xml_content',$txt,$this->GetXMLTemplate()));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));
    $response = curl_exec($ch);
    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    print_r($response);
    echo $http_status;
}