PHPでLINEログイン後「ユーザー名」「ユーザーID」「プロフィール画像URL」「メッセージ」を取得する方法
2024/02/21
<a>タグのリンクからページ遷移するとLINEログインし、その後に「ユーザー名」「ユーザーID」「プロフィール画像URL」「メッセージ」を取得するという機能をPHPで実装したい。調べたところLINE Developersの「LINEログイン」というAPIで実装できる模様。以下に実装方法をメモ。
LINE Developers側の準備
LINE Business IDでログイン
以下よりLINE Business IDでログインする。
https://account.line.biz/login
IDを取得していない場合はアカウントを作成する。尚、通常のLINE IDを所持している場合はそのIDでBusiness IDを作成することができる。
新規チャネルの作成
以下より新規チャネルを作成する。
https://developers.line.biz/console/channel/new?type=line-login
登録の際は必須項目のみ入力しておけば問題無し。尚、登録後に「LINEログイン設定」から「コールバックURL」を設定しておくこと。
また「チャネル基本設定」に「チャネルID」と「チャネルシークレット」が表示されるのでこちらをメモしておく。
ソースコード
<a>タグ設置ページ
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Line ログインテスト</title>
</head>
<body>
<a href="https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=【チャネルID】&redirect_uri=【コールバックURL】&state=<?php echo md5(uniqid());?>&scope=profile%20openid">test</a>
</body>
</html>
「state」部分は適当な乱数でOK。scope部分はリファレンスを参照。
callback.php
<?php
//アクセストークン取得
$url = "https://api.line.me/oauth2/v2.1/token";
$postData = array(
"grant_type" => "authorization_code",
"code" => $_GET["code"],
"redirect_uri" => "【コールバックURL】",
"client_id" => "【チャネルID】",
"client_secret" => "【チャネルシークレット】",
);
$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);
var_dump($json);
出力例は以下の通り。
object(stdClass)#2 (4) {
["userId"]=>
string(33) "ユーザーID"
["displayName"]=>
string(12) "ユーザー名"
["statusMessage"]=>
string(24) "メッセージ(登録している場合のみ取得できる)"
["pictureUrl"]=>
string(134) "プロフィール画像URL(登録している場合のみ取得できる)"
}
メッセージ及びプロフィール画像はLINEアカウント側で登録していない場合は取得できない点に注意。
関連記事
-
-
PHPからLINEのMessaging APIにリクエストし通知を送る方法
LINEから「2025/3/31にLINE Notifyのサービスが終了する」と ...
-
-
PHPとLINEを連携させて通知を送る方法(file_get_contents / curlの2パターン)
PHPとLINEを連携させ、LINEに何らかの通知メッセージを送信したい。以下に ...
-
-
LINEのURLプレビューを表示させないようPHP側で制御する方法
公開中の特定のページのみLINEのURLプレビューを表示させないよう制御したいと ...
