LINE Login – LINE 提供的免費登入機制 (程式碼範例):



技術實作說明:請點此前往官方技術文件

以下為技術細節,可由技術人員觀看囉~

首先你需要一個登入畫面,放上一個LINE LOGIN的按鈕,類似這樣:

如果需要取得用戶的EMAIL, scope需要加上email:

<div class="login-page">
    
  <div class="form">
      <img src="line_login.png" alt="LINE LOGIN" height="44" width="279">
        
        <button onclick="LineAuth()" class="button2">前往用LINE登入</button>
        
  </div>

</div>
   
    <script>
        function LineAuth() {
            var URL = 'https://access.line.me/oauth2/v2.1/authorize?';
            URL += 'response_type=code';
            URL += '&client_id=xxxxxxxx';
            URL += '&redirect_uri=https://www.xxxxx.com.tw/response.php';
            URL += '&state=xxxxxxx';
            URL += '&scope=profile%20openid%20email';
            window.location.href = URL;
        }
    </script>

我們需要另一個畫面,是用戶從LINE那邊登入成功後導回的頁面,假設是:response.php

簡易流程是這樣的:

//顯示警告訊息並導向
function js_go($msg="", $url="") {
    echo "<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">n";
     echo "<script language=javascript>n";
     if ($msg) echo "alert("".$msg."");n";
     if ($url)
        echo "location.href='".$url."';n";
     else
        echo "location.href='".$_SERVER['PHP_SELF']."';n";
     echo "</script>n";
     exit;
 }

$code = $_GET['code'];
if(!empty($code)){
    
            $state = $_GET['state'];
            if($state!='xxxxxxx'){
                js_go("error occured: state is wrong!", "https://www.xxxx.com.tw/);
                exit;
            }

            $service_url = 'https://api.line.me/oauth2/v2.1/token';
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,$service_url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS,
                        "grant_type=authorization_code&code=$code&redirect_uri=https://www.xxxxx.com.tw/response.php&client_id=xxxxxx&client_secret=xxxxxxxxxxxxxx");
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
            
            // receive server response ...
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            
            $server_output = curl_exec($ch);
            $decoded = json_decode($server_output);
            
            curl_close ($ch);
            
            if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') {
                js_go("error occured:".$decoded->response->errormessage, "https://www.xxxx.com.tw/);
                exit;
            }
            
           
            $decode_jwt = (json_decode(base64_decode(str_replace('_', '/', str_replace('-','+',explode('.', $decoded->id_token)[1])))));
            
 
            $login_user_email = $decode_jwt->email;  //取得登入用戶的電子郵件
            $_SESSION['login_user_email'] = $login_user_email;  //可先寫入session,之後可寫入會員資料庫...


        if(!empty($decoded->access_token)){

            $url = "https://api.line.me/v2/profile";
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            
            $headers = array(
               "Accept: application/json",
               "Authorization: Bearer {$decoded->access_token}",
            );
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
            //for debug only!
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            
            $resp = curl_exec($curl);
            $decoded2 = json_decode($resp);
            curl_close($curl);
		    
                    js_go("{$decoded2->displayName}您好,您已經登入!", "https://www.xxxx.com.tw");
                    exit;
   		
        }else{
            js_go("error occured:access_token gone!請再試一次!", "https://www.xxxxx.com.tw/);
            exit;
        }

}else{
    js_go("很遺憾您未能同意登入!請再試一次!", "https://www.xxxxx.com.tw/);
    exit;
}

邀請您至LINE Bank開戶
開戶送LINE POINTS 300點,領了沒?前往LINE Bank開戶,綁定LINE與LINE Pay立即得!再享不限通路刷卡立即回饋3%起、行動銀行跨轉每月88次免手續費等優惠。

-> 開立口袋帳戶,享2.2%優惠利率
-> 刷卡筆筆3%
-> 綁LINE Pay刷卡3.5%
-> 指定通路週週首筆刷卡最高18.5%(限時限量)

手機點選下面網址立即開戶,送您LINE POINTS 300點:
https://line.me/R/fin/bk/1612609319-qJbaOpWn/mgm-event/invitation?mgm=101000133257

或用手機掃描此QR CODE立即開戶,送您LINE POINTS 300點(用此QR CODE開戶才有喔 ^^):


前往討論區 這篇文章的網址 (可分享到FB、PTT、Mobile01):

用LINE分享給朋友:

這篇文章的QR CODE:(用手機掃我)

延伸閱讀:北部新冠快篩站預約與等候結果

延伸閱讀:疫情嚴重時少出門必備工具

延伸閱讀:口罩有縫隙! 美國CDC教你knot and tuck改良自己的口罩

延伸閱讀:居家工作 網路攝影機 幫忙看門/看小孩

延伸閱讀:「公費疫苗可選廠牌」哪種廠牌好? 要投保疫苗險嗎?

延伸閱讀:WFH在家工作 急需傳真不用跑便利商店

延伸閱讀:WFH在家工作時時關心疫情 – 小米盒子(追劇看新聞)

延伸閱讀:勞工紓困貸款 貸了有何影響?

延伸閱讀:打不到新冠肺炎(COVID-19)疫苗? 先打肺炎鏈球菌疫苗?

延伸閱讀:COVID-19新冠肺炎 居家快篩試劑,保護自己保護家人

延伸閱讀:必須在長輩手機上設定的 緊急聯絡人與緊急醫療資訊 (快樂缺氧怎麼辦?!) 

延伸閱讀:打不到新冠肺炎(COVID-19)疫苗? 先打肺炎鏈球菌疫苗?

延伸閱讀:必須在長輩手機上設定的 緊急聯絡人與緊急醫療資訊 (快樂缺氧怎麼辦?!) 

延伸閱讀:打了新冠肺炎(COVID-19)疫苗 副作用 (親身經歷)