勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでLINEログイン後「ユーザー名」「ユーザーID」「プロフィール画像URL」「メッセージ」を取得する方法

   2024/02/21  PHP

<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

  関連記事

PHPとLINEを連携させて通知を送る方法(file_get_contents / curlの2パターン)

PHPとLINEを連携させ、LINEに何らかの通知メッセージを送信したい。以下に ...

LINEのURLプレビューを表示させないようPHP側で制御する方法

公開中の特定のページのみLINEのURLプレビューを表示させないよう制御したいと ...