【Laravel】Line Message APIのアカウント連携を制作してみた③
こんにちは。
ニシザワです。
Laravelを活用して、Line Message APIのアカウント連携をする方法について続きを書きたいと思います。
前回までの記事はこちらです
【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を削除しています。アカウントリンク解除についてはこちらで完了です。
今度は、連携済みのユーザーにアプリケーションからメッセージを送るようなものを作りたいと思います。