Я работаю над формой, где мне нужно получить данные профиля LinkedIn в полях.
форма находится на нескольких URL, так как у меня есть страница вакансий, где на каждой странице вакансий есть несколько вакансий, есть форма, и мой URL выглядит следующим образом: https://www.xxxxx.com/careers/job1
https://www.xxxxx.com/careers/job2
https://www.xxxxx.com/careers/job3
и у меня есть основнойФорма на https://www.xxxxx.com/careers/
этот URL, а также.Я попробовал какой-нибудь плагин javascript, но обнаружил, что он не работает, и обнаружил, что он не поддерживается сейчас, как указано здесь developer linkedin , затем я попытался сделать это с помощью PHP-скрипта и сделал следующее.
вход через LinkedInкнопка: <a href="{{ linkedinUrl?linkedinUrl:'javascript:;' }}" class="btn linkedin"><span>Use your LinkedIn profile</span></a></p>
Ниже находится мой контроллер, где я извлекаю и устанавливаю данные Linkedin в сеансе для отображения в форме: я вызвал функцию обратного вызова для получения данных Linkedin из API.
public function careers( Request $request ) {
$CustomerToken = new JobApplication();
$session = new Session();
$form = $this->createForm( JobApplicationType::class, $CustomerToken );
if ( ! empty( $_REQUEST['code'] ) ) {
$user = $this->linkedinCallback();
$session = new Session();
$session->set( 'linkedinUserFirstName', $user->firstName );
$session->set( 'linkedinUserLastName', $user->lastName );
$session->set( 'linkedinUserEmail', $user->emailAddress );
}
$linkedinUserFirstName = '';
if ( ! empty( $session->get( 'linkedinUserFirstName' ) ) ) {
$linkedinUserFirstName = $session->get( 'linkedinUserFirstName' );
}
$linkedinUserLastName = '';
if ( ! empty( $session->get( 'linkedinUserLastName' ) ) ) {
$linkedinUserLastName = $session->get( 'linkedinUserLastName' );
}
$linkedinUserEmail = '';
if ( ! empty( $session->get( 'linkedinUserEmail' ) ) ) {
$linkedinUserEmail = $session->get( 'linkedinUserEmail' );
}
session_destroy();
$linkedin['client_id'] = "<client_id>";
$linkedin['client_secret'] = "<client_secret>";
$linkedin['redirect_uri'] = "<redirect_uri>";
$linkedin['csrf_token'] = random_int( 1111111, 9999999 );
$linkedin['scopes'] = "r_basicprofile%20r_emailaddress";
return $this->render( 'pages/careers.html.twig', [
'controller_name' => 'PagesController',
'jobApplicationForm' => $form->createView(),
'linkedinUrl' => 'https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=' . $linkedin['client_id'] . '&redirect_uri=' . $linkedin['redirect_uri'] . '&state=' . $linkedin['csrf_token'] . '&scope=' . $linkedin['scopes'] . '',
'linkedinUserFirstName' => $linkedinUserFirstName,
'linkedinUserLastName' => $linkedinUserLastName,
'linkedinUserEmail' => $linkedinUserEmail,
] );
}
Моя функция обратного вызова, при которой я получаю данные профиля linkedin.
public function linkedinCallback() {
if ( isset( $_REQUEST['code'] ) ) {
$linkedin['client_id'] = "<client_id>";
$linkedin['client_secret'] = "<client_secret>";
$linkedin['redirect_uri'] = "<redirect_uri>";
$code = $_REQUEST['code'];
$url = "https://www.linkedin.com/oauth/v2/accessToken";
$params = [
'client_id' => $linkedin['client_id'],
'client_secret' => $linkedin['client_secret'],
'redirect_uri' => $linkedin['redirect_uri'],
'code' => $code,
'grant_type' => 'authorization_code',
];
$accessToken = $this->curl( $url, http_build_query( $params ) );
$accessToken = json_decode( $accessToken )->access_token;
$url = "https://api.linkedin.com/v1/people/~:(id,firstName,lastName,pictureUrls::(original),headline,publicProfileUrl,location,industry,positions,email-address)?format=json&oauth2_access_token=" . $accessToken;
$user = file_get_contents( $url, false );
return ( json_decode( $user ) );
}
}
Я тоже попробовал hwioauthbundle, но не смог найти его для меня.
У меня 2 проблемы: Первая: Мне нужно всплывающее окно для входа в систему.во-вторых: когда я нажимаю кнопку «мышка», я перехожу на URL-адрес проверки подлинности, чтобы войти в мою учетную запись, и перенаправляет меня на URL-адрес, указанный в приложении для работы с мышью, а также в моем коде со строкой запроса code
и state
, нокогда я обновляю страницу идет до 500 и говорит Notice: Undefined property: stdClass::$access_token
.Кроме того, этот URL не будет работать для конкретной ссылки на вакансию, которая будет иметь прямое выражение, например, для работы 1, работы 2 и т. д. Я пробовал много решений, но пока не добился успеха.
Моя версия Symfony - 4.2