В моей функции извлечения токена доступа LinkedIn Oauth2.0.php не отвечает ни один пользовательский контент? - PullRequest
0 голосов
/ 27 мая 2019

HI Мы используем вызов API LinkedIn на нашем веб-сайте, чтобы получить информацию о посетителях нашего веб-сайта, чтобы войти в его профиль через Linkedin.

Функциональность работала нормально, но вдруг она перестала работать, я зарегистрировался.

Мы получаем Access Token Response при вызове, но позже его функция извлечения не работает, значит, не получает никаких значений. Я добавил некоторую отладку для проверки ответа и код значения поля, и прикреплен скриншот отладки

Я пытался протестировать аналогичные поля, отображаемые в приложении

define('SCOPE',        'r_basicprofile r_emailaddress'  ---> 
define('SCOPE',        'r_liteprofile r_emailaddress'

и обновить код вызова до последнего метода

https://www.linkedin.com/uas/oauth2/authorization ->> https://www.linkedin.com/oauth/v2/authorization

https://www.linkedin.com/uas/oauth2/accessToken?  ->>
https://www.linkedin.com/oauth/v2/accessToken

Но все равно ничего не меняется, чем я повторяю изменения в коде, и это код

<code><?php
$config = include(dirname(__FILE__).'/config.php');
// Change these
define('API_KEY',      'XXXXXXXXX');
define('API_SECRET',   'XXXXXXXXX');
//define('REDIRECT_URI', ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on")?'https':'http').'://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']);
define('REDIRECT_URI', ('https://example.com/linkedin/OAuth2.php'));
define('SCOPE',        'r_basicprofile r_emailaddress'                        );

// You'll probably use a database
    session_name('linkedin');
    session_start();


// OAuth 2 Control Flow
if (isset($_GET['error'])) {
    // LinkedIn returned an error
    print $_GET['error'] . ': ' . $_GET['error_description'];
    exit;
} elseif (isset($_GET['code'])) {
    // User authorized your application

        getAccessToken();

} else { 
    if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) {
        // Token has expired, clear the state
    $_SESSION['access_token'] = '';

    }
    if (empty($_SESSION['access_token']) || $_SESSION['access_token'] == '') {
        // Start authorization process
        getAuthorizationCode();
    }
}

echo "Fetching" . "<br>";
// Congratulations! You have a valid token. Now fetch your profile 
$user = fetch('GET', '/v1/people/~:(id,first-name,last-name,headline,email-address,picture-urls::(original),public-profile-url,picture-url,location,industry,site-standard-profile-request,interests,positions,summary,main-address,phone-numbers,skills:(skill))');

$userData = array('linkedin_id'=>'','first-name'=>'','last-name'=>'','picture-url'=>'','email-address'=>'','public_url'=>'','summary'=>'','twitter-account'=>'','headline'=>'','companyname'=>'','designation'=>'');


          foreach($user as $key=>$value)
          {


            if($key=='id')
                $userData['linkedin_id'] = $value;
            if($key=='firstName')
                $userData['first-name'] = $value;
            if($key=='lastName')
                $userData['last-name'] = $value;
            if($key=='pictureUrls')
            {
                $userData['picture-url'] = $value->values[0];
            }
            if($key=='pictureUrl' && $userData['picture-url']=='')
            {
                $userData['picture-url'] = $value;
            }

            if($key=='emailAddress')
                $userData['email-address'] = $value;    
            if($key=='publicProfileUrl'){
                $userData['public_url'] = $value;




                          } 
            if($key=='summary')
                $userData['summary'] = $value;  

            if($key=='twitter-accounts')
            {
                foreach($value as $key=>$val)
                 {
                    if($key=='twitter-account')
                    {
                        $valueTwit = json_encode($val); 
                        $valueTwit = json_decode($valueTwit,true);
                        $userData['twitter-account'] = $userData['twitter-account'].",".$valueTwit['provider-account-name'];
                    }
                 }
                 $userData['twitter-account'] = substr($userData['twitter-account'],1,strlen($userData['twitter-account']));
            }



            if($key=='headline')
                $userData['headline'] = $value;

                        if($key=='positions')
                               {

                                foreach($value as $key1=>$val)
                {

                     if($key1=='values')
                                {

                $company_array = $val[0];
                                 foreach($company_array as $key2=>$val1)
                 {
                                   if($key2=='company')
                                    {
                    foreach($val1 as $key3=>$val3)
                    {
                            if($key3=='name')
                                         {
                            $userData['companyname'] = $val3;
                            }
                    }
                                    }



                                 }
                                }
                                }
                               }

                        if($key=='positions')
                               {

                                foreach($value as $keys1=>$vals)
                {

                     if($keys1=='values')
                                {

                $company_array1 = $vals[0];
                                 foreach($company_array1 as $keys2=>$vals1)
                 {

                                   if($keys2=='title')
                                    {
                                        $userData['designation'] = $vals1;
                                    }


                                 }
                                }
                                }
                               }






          }

          $userRequiredDetails = "";
                   $random = rand();
          $userRequiredDetails.="?oid=".$userData['linkedin_id']."&email=".$userData['email-address']."&random=".$random;     

          $linkedinMenter_array =array('oid'=> $userData['linkedin_id']."<br/>",'first_name'=>$userData['first-name']."<br/>",'last_name'=>$userData['last-name']."<br/>",'image'=>$userData['picture-url']."<br/>",'email'=>$userData['email-address']."<br/>",'public_url'=>$userData['public_url']."<br/>",'summary'=>$userData['summary']."<br/>",'twitter-account'=>$userData['twitter-account']."<br/>",'headline'=>$userData['headline']."<br/>", 'companyname'=>$userData['companyname']."<br/>", 'designation'=>$userData['designation']."<br/>",'questionId'=>$questionId, 'questionURL'=>$questionURL, 'projectId'=>$projectId, 'directoryConsultationId'=>$directoryConsultationId, 'feedbackId' => $feedbackId, 'mentorshipId' => $mentorshipId, 'plan_id' => $plan_id, 'planUserId' => $planUserId, 'sresult' => $sresult, 'projectUserId' => $projectUserId);
           echo "Request token retrieval failed:<br /><br />RESPONSE:<br /><br /><pre>" . print_r($linkedinMenter_array, TRUE) . "


LINKEDIN OBJ:

" . print_r($OBJ_linkedin, TRUE) . "
"; выход; / * для записи данных в файл * / $ file = "../".$userData['linkedin_id'].".txt"; file_put_contents ($ file, $ linkedinMenter_array); echo $ file; выход; // заголовок ( "место: https://example.com/users/signuplinkedin".$userRequiredDetails); function getAuthorizationCode () { $ params = array ('response_type' => 'code', 'client_id' => API_KEY, 'scope' => SCOPE, 'state' => uniqid ('', true), // уникальная длинная строка 'redirect_uri' => REDIRECT_URI, ); // запрос аутентификации $ url = 'https://www.linkedin.com/uas/oauth2/authorization?'. http_build_query ($ PARAMS); // Необходимо идентифицировать запрос при его возврате к нам $ _SESSION ['state'] = $ params ['state']; echo print_r ($ _ SESSION, TRUE). "\ П
"; echo print_r ($ params, TRUE). "\ П
"; echo "Pankaj getAuthorizationCode"; // Перенаправить пользователя для аутентификации заголовок ("Location: $ url"); выход; } function getAccessToken () { $ params = array ('grant_type' => 'authorization_code', 'client_id' => API_KEY, 'client_secret' => API_SECRET, 'code' => $ _GET ['code'], 'redirect_uri' => REDIRECT_URI, ); // Доступ к токену $ url = 'https://www.linkedin.com/uas/oauth2/accessToken?'. http_build_query ($ PARAMS); // Сообщаем потокам сделать запрос POST $ context = stream_context_create ( массив ('http' => массив ('method' => 'POST', ) ) ); // Получить информацию о токене доступа $ response = file_get_contents ($ url, false, $ context); // Нативный объект PHP, пожалуйста $ token = json_decode ($ response); echo print_r ($ token, TRUE). "\ П
"; // Сохраняем токен доступа и время истечения $ _SESSION ['access_token'] = $ token-> access_token; // береги это! $ _SESSION ['expires_in'] = $ token-> expires_in; // относительное время (в секундах) $ _SESSION ['expires_at'] = время () + $ _SESSION ['expires_in']; // абсолютное время эхо "Pankaj getAccessToken". "\ П
"; вернуть истину; } выборка функции ($ method, $ resource, $ body = '') { $ params = array ('oauth2_access_token' => $ _SESSION ['access_token'], 'format' => 'json', ); // Нужно использовать HTTPS $ url = 'https://api.linkedin.com'. $ ресурс. '?' , http_build_query ($ PARAMS); // Сообщаем потокам сделать запрос (GET, POST, PUT или DELETE) $ context = stream_context_create ( массив ('http' => массив ('метод' => метод $, ) ) ); // Фокус покус $ response = file_get_contents ($ url, false, $ context); // Эхо ($ ответ); // Нативный объект PHP, пожалуйста return json_decode ($ response); }

Получение этого ответа в режиме отладки

stdClass Object ( [access_token] => AQX7maxbOfOpday8AEmpHyagkSKQcS26YYwMsocDx0FeIGPVwopJstJ27bqlSYrP754vT_DY6n1HoSr0kniJYY-RvhqvnX9ab4sczmzOYiqKo5p1ISVydiZJ_SiN-on9Hw12zD3tiktfvIPex6iHIi0dVhZ5-8CWWvdTX2Sj_d7YAusr9dJAmWQiNE3Aowe-i5cLlZSE-sOpzudCm3dns-ou2A4hg_NMLe5RAJcCQ2TlrGOiA29-1rZsN1_SJw5r4ZjLsx0HY8yUKmxmB1CnfOfg31y1RwlsDAaG679ILyGFvEqhdVJhcRrNzsHaI3JrDc1MJZTGAkBDCJt6WK9FexvqYHOLpw [expires_in] => 5184000 ) 
Pankaj getAccessToken 
Fetching
Request token retrieval failed:

RESPONSE:

Array
(
    [oid] => 

    [first_name] => 

    [last_name] => 

    [image] => 

    [email] => 

    [public_url] => 

    [summary] => 

    [twitter-account] => 

    [headline] => 

    [companyname] => 

    [designation] => 

    [questionId] => 
    [questionURL] => 
    [projectId] => 
    [directoryConsultationId] => 
    [feedbackId] => 
    [mentorshipId] => 
    [plan_id] => 
    [planUserId] => 
    [sresult] => 
    [projectUserId] => 
)


LINKEDIN OBJ:

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

API LinkedIn v1 устарели, и вы должны запрашивать профиль, отправив запрос GET на https://api.linkedin.com/v2/me.

Кроме того, некоторые пользователи могут отказаться от обмена данными со сторонними приложениями черезAPI-интерфейсы LinkedIn.

0 голосов
/ 28 мая 2019

Используйте приведенный ниже код для получения токена доступа

 $params = array('grant_type' => 'authorization_code',
            'client_id' => $this->api_key,
            'client_secret' => $this->api_secret,
            'code' => $_GET['code'],
            'redirect_uri' => base_url().$this->redirect,
        );
        // Access Token request
        $url = 'https://www.linkedin.com/oauth/v2/accessToken?' . http_build_query($params);
        $data_len = strlen(http_build_query($params));
        // Tell streams to make a POST request
        $context = stream_context_create(
                array('http' =>
                    array('method' => 'POST','header'=> 'Content-Length: 0'
                    )
                )
        );

        // Retrieve access token information
        $response = file_get_contents($url, false, $context);
        $token = json_decode($response);
        return $token->access_token;
...