Line Login

アプリケーションやBOTへのLineユーザログイン機能をWEBサイトに組み込み処理を行う。
LineDevelopersサイトにチャンネルを登録する。
新規チャネル作成
チャネルの種類 : LINEログイン
プロバイダー  : newprovider
提供する地域 : 日本
所在国・地域  : 日本
チャネルアイコン :
チャネル名 : newchanel
アプリタイプ : ウェブアプリ
メールアドレス  : name@you.example
チャネル基本情報
チャネルID  : xxxxxxxxxx
アプリタイプ : ウェブアプリ
権限 : PROFILE CHAT_MESSAGE OPENID_CONNECT OC_EMAIL
チャネルシークレット : 12a03456b0c456074e157150049ad7c5 乱数
LINEログイン設定
ウェブアプリでLINEログインを利用する
bot/login.php

$callback_url = "https://example.com/bot/callback/";
$state = rand();
$url = sprintf(
 "https://access.line.me/oauth2/v2.1/authorize? response_type=code&client_id=%s&redirect_uri=%s&state=%s&scope=profile openid email"
,$client_id, $callback_url, $state
);
<a href="<?php echo $url; ?>"><img src="img/btn_login_base.png"></a>
Lineのaccess.line.me/oauth2/v2.1/loginにアクセスして認証されればデータがcallbackに返ってくる。

callbackでの処理

bot/callback/index.php

1: アクセストークンからプロファイル取得
$url = "https://api.line.me/oauth2/v2.1/token";
$postData = array(
 "grant_type" => "authorization_code",
 "code" => $_GET["code"],
 "redirect_uri" => "https://example.com/callback.php", //LINE developersコンソールに設定したURL
 "client_id" => "LINE developersコンソールのチャネルID",
 "client_secret" => "LINE developersコンソールのチャネルシークレット"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/oauth2/v2.1/token');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response);
$accessToken = $json->access_token; //アクセストークンを取得
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $accessToken));
curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/profile');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response);
$userInfo= json_decode(json_encode($json), true); //ログインユーザ情報を取得する
$displayName= $userInfo['displayName']; //LINEのニックネーム
$userId= $userInfo['userId']; //LINEのユーザーID
$pictureUrl= $userInfo['displayName']; //プロフィール画像のURL

Previous article

PDFからの文字抽出

Next article

Mobile Detect