Linkedin OAuth и Zend при получении токена доступа возвращают «Ошибка в HTTP-запросе»

Ответ + новый вопрос

Я обнаружил, что приведенный ниже код отлично работает на LIVE-сервере. LinkedIN заблокировал все запросы с локального хоста.

Это установлено; Кто-нибудь знает, как протестировать приложение с локального хоста с помощью LinkedIN OAuth? Потому что делать это на живом сервере — отстой!

Старый вопрос

Я пытаюсь подключиться с помощью Zend_OAuth к LinkedIN. Раньше этот код работал, но теперь он возвращает ошибку в HTTP-запросе, когда я пытаюсь получить токен доступа.

Пытался проверить API LinkedIN, но код все еще кажется действительным. Пробовал несколько скриптов, но все с тем же результатом.

Конфигурация настроена в 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, и она отлично работает.

ОБНОВЛЕНИЕ 20 сентября 211 г.

Я узнал, что это правило возвращает ошибку:

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

Я до сих пор не знаю, почему, и чтение API-интерфейса linkedin немного помогает. Буду держать вас в курсе.


person Rick de Graaf    schedule 19.07.2011    source источник


Ответы (2)


У меня возникла аналогичная проблема, и после добавления расширения openssl она была решена.

попробуйте добавить в php.ini эту строку:

extension=php_openssl.dll
person Szymon Wygnański    schedule 07.03.2012

У меня та же проблема, попробуйте отключить ssl, прежде чем спрашивать нового потребителя:

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

    $httpClient = new HTTPClient(null, $httpConfig);
    OAuth::setHttpClient($httpClient);
person Fernand Ramat    schedule 27.08.2013