【重要】API(Push通知機能)の仕様変更に関するご案内
平素よりlearningBOXをご利用いただき、誠にありがとうございます。
learningBOXでは、Ver2.19のリリースより、APIの仕様を変更いたします。
今回のお知らせは、API連携をご利用のお客様向けの内容です。
APIの変更点について
変更前
変更後
実装方法によっては、通信が失敗する可能性があります
ハードコーディングの場合、無効な通知と判定される可能性があります。
PUSH通知の有効性をチェックする方法
その1:送信内容を取得する。
その2:送信内容からパラメータ「hash」を取り除いて一時保存します。
その3:送信内容のパラメータの順番を変えずに後ろに「secret」を追加してください。
その4:送信内容のパラメータ値を「|」で連結した後、sha256でハッシュ値を取得します。
その5:送信内容から取得したhashと一致しているかをチェックしてください。
PUSH通知有効性チェックのサンプルコード
/**
* PUSH通知有効性チェック
* 通知内容例:
* ------------------------------------------------
* {
* 'param1': 'aaa',
* 'param2': 'bbb',
* 'param3': 'ccc',
* 'hash': 'ae12de'
* }
* ------------------------------------------------
* ※hash以外のパラメータは並び順変更、または増減する可能性があります。
*/
正常に動作する例
$payload = file_get_contents('php://input'); // 通知内容を取得
$payload = json_decode($payload, true); // 通知内容を配列化
$hash = $payload['hash']; // 検証用のハッシュ値を取得
unset($payload['hash']); // 検証用のハッシュ値を送信内容から取り除く
$payload = $payload + ['secret' => 'tatsuno123']; // 通知内容の後ろに通知先のシークレットキーを追加
if($hash === hash('sha256', implode('|', $payload))) {
// 送信内容認証成功
} else {
// 送信内容認証失敗
}
不具合の出る例
$payload = file_get_contents('php://input'); // 通知内容を取得
$payload = json_decode($payload, true); // 通知内容を配列化
$hash = $payload['hash']; // 検証用のハッシュ値を取得
$param1 = $payload['param1']; // 検証用のパラメータ1を取得
$param2 = $payload['param2']; // 検証用のパラメータ2を取得
$param3 = $payload['param3']; // 検証用のパラメータ3を取得
$secret = 'tatsuno123'; // 通知先のシークレットキー
if($hash === hash('sha256', $param1 . '|' . $param2 . '|' . $param3 . '|' . $secret)) {
// 送信内容認証成功
// 通知内容に変更があった場合、認証通らない可能性があります。
} else {
// 送信内容認証失敗
}
ご利用のお客様にはご迷惑をお掛けいたしますが、ご理解ご協力のほどよろしくお願いいたします。