PHPでLINE BOT APIのSignature validationを行う方法

やりたいこと

LINE BOT API Trial Account でコールバックされてくるリクエストが正しいものかどうかをPHPで検証したい。
BOT APIの仕様書にはJavaとRubyの例しか載ってなかった。

やり方

1. SignatureはLINE側からのコールバックリクエストの「HTTP_X_LINE_CHANNELSIGNATURE」ヘッダに入っている。
2. 「Channel Secret」をキーにして、リクエストボディを「HMAC-SHA256」で計算する。
3. 上記2をBASE64エンコードする。
4. 上記1と3が等しければ正しいSignature

hash_hmac()の第3引数(raw_output)はtrueにすること!

ソースコード