開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. 【Laravel】Line Message APIのアカウント連携を制作してみた③

【Laravel】Line Message APIのアカウント連携を制作してみた③

こんにちは。
ニシザワです。

Laravelを活用して、Line Message APIのアカウント連携をする方法について続きを書きたいと思います。
前回までの記事はこちらです
【Laravel】Line Message APIのアカウント連携を制作してみた①
【Laravel】Line Message APIのアカウント連携を制作してみた②

公式は こちら
今回は連携解除について書きます。

Api\LoginControllerの実装

ログイン認証の表示と許可を実装します。

連携解除の方法

ApiController

    /**
     * @param Request $request
     * @throws \LINE\LINEBot\Exception\CurlExecutionException
     */
    public function webhook(Request $request){
        \Log::info(print_r($request->all(), true));
        $events = $request->get("events", []);
        $userId = array_get($events, "0.source.userId");
        $text = array_get($events, "0.message.text");
        $replayToken = array_get($events, "0.replyToken");
        if(array_get($events, "0.link.result") === "ok"){
            $this->saveAccount($events);

            $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(config("auth.line-api-key"));
            $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => config("auth.channel-secret")]);

            $textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder("アカウントの連携に成功しました。");
            $response = $bot->replyMessage($replayToken, $textMessageBuilder);

            $lineResponse = $response->getHTTPStatus() . ' ' . $response->getRawBody();
            \Log::info($lineResponse);
            return;
        }
        $user = User::query()->where("uuid",$userId)->first();
        if(is_null($user) || is_null($user->nonce)){
            $this->accountLink($userId, $replayToken);
            return;
        }
        if($text === "link account"){

            $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(config("auth.line-api-key"));
            $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => config("auth.channel-secret")]);

            $textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder('右');
            $response = $bot->replyMessage($replayToken, $textMessageBuilder);

            $lineResponse = $response->getHTTPStatus() . ' ' . $response->getRawBody();
            \Log::info($lineResponse);
        }
        if($text === "disconnect account"){
            $this->unlinkAccount($userId,$replayToken);
        }
    }

    /**
     * アカウント連携解除
     * @param string $uuid
     * @param string $replayToken
     */
    private function unlinkAccount(string $uuid, string $replayToken){
        /** @var User $user */
        $user = User::query()->where("uuid",$uuid)->first();

        $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(config("auth.line-api-key"));
        $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => config("auth.channel-secret")]);
        $replayMessage = "";
        if(is_null($user)){
            $replayMessage = "アカウントの連携はされていません。";
        }
        $user->uuid = null;
        $user->nonce = null;

        if($user->save()){
            $replayMessage = "アカウントの連携を解除しました。";
        }

        $textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($replayMessage);
        $response = $bot->replyMessage($replayToken, $textMessageBuilder);

        $lineResponse = $response->getHTTPStatus() . ' ' . $response->getRawBody();
        \Log::info($lineResponse);
    }
disconnect accountというテキストメッセージが送られてきた場合に unlinkAccountのメソッドでDBに登録してある、uuidとnonceを削除しています。
アカウントリンク解除についてはこちらで完了です。
今度は、連携済みのユーザーにアプリケーションからメッセージを送るようなものを作りたいと思います。
TOPに戻る