2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[LIFF] PHPとAjaxとMySQLを使った会員証アプリをつくる

Last updated at Posted at 2022-12-29

社内でLIFFを使ったミニアプリを開発することに(なりそう)なので、ひとまず会員バーコードの表示機能を試作しました。以下備忘録。

全体図

全体図
こんな感じでLINEのuserIdと紐づけた会員データベースの会員NoをAjax経由で取ってきて
その会員Noを1次元バーコードに生成する。

LIFFにてuserIdを取得する

  • LINE Developersページへログインして、Messaging APIでログイン用チャネルを作成してLIFFのIDを発行(中略)

  • 表示するページをエンドポイントに設定

  • 表示するページにてLIFFのIDを指定すればgetProfile()にてuserIdが取得できる

index.html
    <script charset="utf-8" src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script>
    <script>        
        const liffId = '****'
        liff.init({
            liffId: liffId,
            withLoginOnExternalBrowser: true,
        }).then(() => {
            getProfile()
        }).catch((err) => {
            alert(err)
        })

        function getProfile(){
            liff.getProfile()
            .then((profile) => {
                post_Ajax({"userId": profile.userId},"ajax_get.php");
            })
            .catch((err) => {
                alert(err)
            });
        }
    </script>      

Ajaxの準備

上記で取得できたuserIdをJSON形式でセットし、phpへ送る

index.html
    <script> 
        /* 中略 */
        post_Ajax({"userId": profile.userId},"ajax_get.php");
        /* 中略 */

        function post_Ajax(data,url){
            var json = JSON.stringify(data);
            var xhr = new XMLHttpRequest();
            xhr.open("POST", url);
            xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
            xhr.send(json);
            xhr.onreadystatechange = function() {
                try {
                    if ((xhr.readyState == 4)&&(xhr.status == 200)) {
                        /* 通信が成功すればここに返り値が入ってくる */
                    }
                } catch (e) {
                    alert("内部エラーが発生し実行できませんでした。\n\n" + e.message)
                }
            };
        }
    </script>  

データが送られてきたphpではmySQLと接続しuserIdを混ぜ込んで情報を取得&返す

ajax_get.php
<?php
    header('Content-Type: text/html; charset=UTF-8');

    $cn252 = new mysqli("db_adress", "db_id", "db_password", "db_nm");
    if ($cn252->connect_error) {
        echo $cn252->connect_error;
        exit();
    }
    $cn252->set_charset("utf8");

    $request = json_decode(file_get_contents("php://input"), true);
    $userId = $request['userId'];
    $cnt = 0;

    $sql = "-------";
    $rs = $cn252->query($sql);

    while ($item = $rs->fetch_array()) {
      $bc = $item['card_no'];
      ++$cnt;
    }
    
    $result = array(
      "bc" => $bc,      
      "cnt" => $cnt
    );

    header("Content-Type: application/json; charset=UTF-8");
    echo json_encode($result);
?>

返ってきた値をバーコード表示させる

バーコードを表示させるために以下のプラグインをダウンロード
https://barcode-coder.com/en/barcode-jquery-plugin-201.html

下記ではid=barcodeのdivにバーコードを表示させる

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <script type="text/javascript" src="./jquery-barcode.js"></script>
</head>
<body>       
    <div id="barcode"></div> 
    /* 中略 */
    <script> 
        function post_Ajax(data,url){
            var json = JSON.stringify(data);
            var xhr = new XMLHttpRequest();
            xhr.open("POST", url);
            xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
            xhr.send(json);
            xhr.onreadystatechange = function() {
                try {
                    if ((xhr.readyState == 4)&&(xhr.status == 200)) {
                        var result = JSON.parse(xhr.response);
                        $("#barcode").barcode(result.bc, "code128",{barWidth:3, barHeight:100});
                    }
                } catch (e) {
                    alert("内部エラーが発生し実行できませんでした。\n\n" + e.message)
                }
            };
        }
    </script>  

適当に画面を作ってみる

あくまで試作なので適当に。(デザインの勉強せねば。)

IMG_0208.PNG

まとめ

非常に簡単な関数でLINEのユーザー情報が取って来ることが可能。
scanCodeV2()など他の関数を使って様々な応用が出来るかと思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?