概要
以前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('アカウント連携を行いました。'));
}
}