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){
 ~
}

Follow me!

前の記事

Bootstrap BootBox

次の記事

LINEメッセージ