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を連携させて通知を送る方法(file_get_contents / curlの2パターン)
PHPとLINEを連携させ、LINEに何らかの通知メッセージを送信したい。以下に ...
-
LINEのURLプレビューを表示させないようPHP側で制御する方法
公開中の特定のページのみLINEのURLプレビューを表示させないよう制御したいと ...