8
6

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 3 years have passed since last update.

LINEとWebアプリのユーザー連携やってみた

Last updated at Posted at 2020-01-24

概要

以前LINEMessagingApiを使って簡単なBOTを作成したので、今回はLINEアカウントとWebアプリケーション側のユーザーを連携してみる

前回の記事
https://qiita.com/johnny1204/items/62a5df0217b9f0bc0dc6

ドキュメント

ドキュメントが公開されているので、こちらに書かれた通りに実装していきます。

連携トークンを要求する

ユーザーがBOTを友達登録した際のフォローイベントを感知して
https://api.line.me/v2/bot/user/{userId}/linkToken
にリクエストする。

$signature = $this->request->headers->get(HTTPHeader::LINE_SIGNATURE);
$events = $bot->parseEventRequest($request->getContent(), $signature);
foreach ($events as $event) {
    if($event instanceof FollowEvent) {
        //連携トークンを要求する
    }
}

Webアプリケーション側のログインページへ飛ばす

TemplateメッセージのURIアクションを使って、メッセージ内のリンククリックでWebアプリ側のログインページに飛ぶようにします。
その際連携トークンも一緒に送ります。

https://×××.××××.×××××/login?linkToken={token}

Webアプリケーション側でログインさせてtokenと関連づける

ログインIDが特定できたら、ランダム値を発行してLINE側で発行されたtokenと紐づけておきます。
なおランダム値の要件ついては、

予測が難しく一度しか使用できない文字列であること。セキュリティ上問題があるため、自社サービスのユーザーIDなどの予測可能な値は使わないでください。

長さは10文字以上255文字以下であること

と公式ドキュメントに書かれております。

LINE側に戻す

下記エンドポイントにLINE側で発行されたtokenとWebアプリケーション側で発行したランダム値を送付
https://access.line.me/dialog/bot/accountLink?linkToken={token}&nonce={nonce}

LINE側で連携完了のメッセージを返す

アカウントリンクイベントを感知して、それっぽいメッセージを返す

$signature = $this->request->headers->get(HTTPHeader::LINE_SIGNATURE);
$events = $bot->parseEventRequest($request->getContent(), $signature);
foreach ($events as $event) {
    if($event instanceof AccountLinkEvent) {
        return $bot->replyMessage($bot->getReplyToken(), new TextMessageBuilder('アカウント連携を行いました。'));
    }
}
8
6
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
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?