一斉送信

no image

LINE BOT API 実は友達追加時にもCallbackされてた & 署名確認をしよう。

前回こんな記事を書きました。 田村ゆかりさん公式サイトの通知を LINE BOT API で作ってみた。 #yukarin この記事では友達追加をしてもらった際にメッセージを送ってもらって mid(ユーザーID)を保存するという処理だったのですが、友人が 「友達追加時にもCallbackされるからメッセージ送らなくてもmid保存できるよ」と教えてもらいました。   試しに中身を覗いてみた [crayon-5b2a6fb9943f4777243330/] 注目するのは “opType”: 4 です。 友達追加時は 4 ブロック時は 8 が返ってきます。 LINE Developers にも記載されてました…。   友達追加時に、midを保存。 ブロック時にmidを削除といったことが可能ですね。 ということでPHPで友達追加時に相手のmidを保存するコードは以下に。 [crayon-5b2a6fb994408931463665/] この一々保存するの面倒なので一斉送信できるAPIを公開してくだしゃい   ふとコードを書き直してる時にセキュリティやばくね?ってなって思ってた時に署名とかこないの?って思ったら署名乗ってくるみたいですね…。 Qiitaとか9割方、署名確認してないです。   LINEからのアクセスか検証する LINEからのアクセスの場合、ヘッダーに X-LINE-CHANNELSIGNATURE があり これをbase64デコードしたもの + LINEきたらjsonの内容を LINE BUSINESS CENTER で確認できる ChannelSecret をキーとしたHMAC方式SHA256アルゴリズムのハッシュ値が 合致すればOKということです。 [crayon-5b2a6fb99440d820220158/]   ちなみに nginx だとPHPの getallheaders 関数が使えないので [crayon-5b2a6fb994410164608861/] よく見るこんなのを使います。