LINEログイン
認証コード取得
$channelId = ‘XXXXXXXXX’;
$redirectUri = urlencode(‘https://~/loginRedirect’);
$state = mt_rand();
認証APIにはバージョンがあり、パスやパラメータが異なるので注意
この最初の認証コード取得APIのバージョンを後のアクセストークン取得APIでも使用する必要がある
$url = “https://access.line.me/oauth2/v2.1/authorize“;
$url .= “?response_type=code”;
$url .= “&client_id=${channelId}”;
$url .= “&redirect_uri=${redirectUri}”;
$url .= “&state=${state}”;
$url .= “&scope=profile“; scopeはprofile/profile%20openid/profile%20openid%20email/openid/openid%20emailを指定
$url .= “&bot_prompt=aggresive“; またはbot_prompt=normal
$this->redirect($url);
※メソッド名またはphpファイル名
public function loginRedirect(){
認証コード取得
$code = $this->request->getQuery(‘code’);
$state = $this->request->getQuery(‘state’);
アクセストークン取得
認証コードが必要→「アクセストークン取得」参照
LINEユーザープロフィール取得
アクセストークンが必要→「LINEユーザープロフィール取得」参照
LINEでのアカウントID、ユーザ名等を取得できる
メッセージ送信
送信対象者のLINEアカウントIDが必要→「LINEメッセージ」参照
}
アクセストークン取得
$data = [
’grant_type’ => ‘authorization_code’,
「認証コード取得」参照
’code’ => $code,
’client_id’ => ‘XXXXXXXXX’,
’client_secret’ => ‘XXXXXXXXXXXXXXXXXX’,
LINEログインのリダイレクトURIと同じ。urlencodeすると何故かエラーになる
’redirect_uri’ => ‘https://~/loginRedirect’,
];
try{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [‘Content-Type: application/x-www-form-urlencoded’],
CURLOPT_URL => ‘https://api.line.me/oauth2/v2.1/token‘,
CURLOPT_CUSTOMREQUEST => ‘POST’,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response);
if(isset($json->error)){
~
exit;
}
return $json->access_token;
}catch(Exception $e){
~
}
LINEユーザープロフィール取得
try{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [“Authorization: Bearer ${accessToken}”],
CURLOPT_URL => ‘https://api.line.me/v2/profile‘,
CURLOPT_CUSTOMREQUEST => ‘GET’,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response);
if(isset($json->error)){
~
}
LINEアカウントID
$userId = $json->userId
return $json;
}catch(Exception $e){
~
}