Linkedin OAuth和Zend检索Acces Token返回'HTTP请求中的错误'

时间:2011-07-19 11:08:06

标签: zend-framework oauth linkedin access-token

回答+新问题

我发现下面的代码在LIVE服务器上工作得很好。 LinkedIN阻止了来自localhost的所有请求。

确立了;有人知道如何使用LinkedIN OAuth从localhost测试应用程序吗?因为在实时服务器上这样做很糟糕!

旧问题

我正在尝试将Zend_OAuth连接到LinkedIN。此代码曾经工作,但现在它在我尝试检索访问令牌时在http请求中返回错误。

尝试检查LinkedIN api,但代码似乎仍然有效。尝试了几个脚本但都具有相同的结果。

配置是在我的控制器的preDispatch中设置的

$this->configLinkedin = array(
        'version' => '1.0',
        'siteUrl' =>  'http://'.$_SERVER['HTTP_HOST'].$this->view->baseUrl(false).'/news/index/connectlinkedin', 
        'callbackUrl' => 'http://'.$_SERVER['HTTP_HOST'].$this->view->baseUrl(false).'/news/index/connectlinkedin',
        'requestTokenUrl' => 'https://api.linkedin.com/uas/oauth/requestToken', 
        'userAuthorisationUrl' => 'https://api.linkedin.com/uas/oauth/authorize', 
        'accessTokenUrl' => 'https://api.linkedin.com/uas/oauth/accessToken',
        'consumerKey' => 'XXX',
        'consumerSecret' => 'XXX'
    );

连接到linkedIN的操作中的代码是

$this->consumer = new Zend_Oauth_Consumer($this->configLinkedin);

    if(!empty($_GET) && isset($_SESSION['LINKEDIN_REQUEST_TOKEN']))
    {
        $token = $this->consumer->getAccessToken($_GET, unserialize($_SESSION['LINKEDIN_REQUEST_TOKEN']));
        // Use HTTP Client with built-in OAuth request handling
        $client = $token->getHttpClient($this->configLinkedin);
        // Set LinkedIn URI
        $client->setUri('https://api.linkedin.com/v1/people/~:(id,first-name,last-name,picture-url)');
        // Set Method (GET, POST or PUT)
        $client->setMethod(Zend_Http_Client::GET);
        // Get Request Response
        $response = $client->request();         
        $this->NewsService->TokenSocialMedia(
            $token,
            'linkedin',
            serialize($response->getBody())
        );
        $_SESSION['LINKEDIN_REQUEST_TOKEN'] = null;
        $this->_helper->flashMessenger(array('message' => $this->view->translate('The CMS is successfully connected to your linkedin account'), 'status' => 'success'));
        $this->_helper->redirector('settings#settingSocial', 'index');
    }
    else
    {
        $token = $this->consumer->getRequestToken();
        $_SESSION['LINKEDIN_REQUEST_TOKEN'] = serialize($token);
        $this->consumer->redirect();
    }

我错过了什么或做错了什么?我为Twitter使用了similair设置,效果很好。

更新于2011年9月20日

我发现此规则返回错误:

 $token = $this->consumer->getRequestToken();

我仍然无能为力,阅读linkedin api并没有多大帮助。会让你发布。

2 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,在添加openssl扩展后,它已经解决了

尝试添加到php.ini这一行:

extension=php_openssl.dll

答案 1 :(得分:0)

我遇到了同样的问题,在询问新消费者之前尝试关闭ssl:

        $httpConfig = array(
        'adapter' => 'Zend\Http\Client\Adapter\Socket',
        'sslverifypeer' => false
    );

    $httpClient = new HTTPClient(null, $httpConfig);
    OAuth::setHttpClient($httpClient);