You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.7 KiB
99 lines
2.7 KiB
<?php
|
|
declare (strict_types = 1);
|
|
|
|
namespace asc\line;
|
|
|
|
use think\facade\Db;
|
|
use GuzzleHttp\Client;
|
|
|
|
class LineLogin
|
|
{
|
|
private $channelId;
|
|
private $channelSecret;
|
|
|
|
public function __construct($channelId, $channelSecret)
|
|
{
|
|
$this->channelId = $channelId;
|
|
$this->channelSecret = $channelSecret;
|
|
}
|
|
|
|
public function getLoginUrl($site_code)
|
|
{
|
|
$url = 'https://access.line.me/oauth2/v2.1/authorize?';
|
|
$url .= 'response_type=code';
|
|
$url .= '&client_id='.$this->channelId;
|
|
$url .= '&redirect_uri=https://'.$_SERVER['HTTP_HOST'].'/login/linecallback/vip/'.$site_code;
|
|
$url .= '&state='.$_SERVER['REQUEST_URI'];
|
|
$url .= '&bot_prompt=aggressive';
|
|
$url .= '&scope=openid%20profile';
|
|
|
|
return $url;
|
|
}
|
|
|
|
public function getLineToken($code)
|
|
{
|
|
$client = new Client();
|
|
|
|
$response = $client->request('POST', 'https://api.line.me/oauth2/v2.1/token', [
|
|
'form_params' => [
|
|
'grant_type' => 'authorization_code',
|
|
'code' => $code,
|
|
'redirect_uri' => 'https://c3d3-220-129-67-224.jp.ngrok.io/m/login',
|
|
'client_id' => $this->channelId,
|
|
'client_secret' => $this->channelSecret
|
|
]
|
|
]);
|
|
|
|
return json_decode($response->getBody()->getContents(), true);
|
|
}
|
|
|
|
public function getUserProfile($token)
|
|
{
|
|
$client = new Client();
|
|
$headers = [
|
|
'Authorization' => 'Bearer ' . $token,
|
|
'Accept' => 'application/json',
|
|
];
|
|
$response = $client->request('GET', 'https://api.line.me/v2/profile', [
|
|
'headers' => $headers
|
|
]);
|
|
return json_decode($response->getBody()->getContents(), true);
|
|
}
|
|
|
|
public function verifyToken($token)
|
|
{
|
|
$client = new Client();
|
|
$response = $client->request('GET', 'https://api.line.me/oauth2/v2.1/verify', [
|
|
'query' => [
|
|
'access_token' => $token
|
|
]
|
|
]);
|
|
return json_decode($response->getBody()->getContents(), true);
|
|
}
|
|
|
|
/**
|
|
* 驗證 id token
|
|
*/
|
|
public static function verifyIdToken($client_id, $id_token)
|
|
{
|
|
try{
|
|
$client = new Client();
|
|
$response = $client->request('POST', 'https://api.line.me/oauth2/v2.1/verify', [
|
|
'form_params' => [
|
|
'id_token' => $id_token,
|
|
'client_id'=> $client_id
|
|
]
|
|
]);
|
|
|
|
$body = $response->getBody()->getContents();
|
|
|
|
return json_decode($body, true);
|
|
|
|
} catch (\Exception $e) {
|
|
// print_r($e);
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|