私は gocardless hooks を使用していますが、サンドボックス環境で hmac 署名を検証することに固執しています。
そのため、サンドボックスで Webhook テストを生成すると、送信されたリクエストの本文とヘッダーが返されます。
私が理解している限りでは、リクエストの本文を取得し、秘密鍵を使用してハッシュを生成し、それを webhook 署名ヘッダーのハッシュと比較する必要があります (それほど複雑ではありません)。
だから私は郵便配達員を使って自分のローカル環境でそれを再現し、同じヘッダーと同じ本文を付けていますが、署名は決して一致しません。
これが私が試したものです:
$signature = hash_hmac('sha256',$request->getContent(), 'secret');
私はlaravelフレームワークを使用していることに注意してください。私の最初の考えは、フレームワークがリクエストを内部的に操作している可能性があるので、これを試しました:
$request_data = file_get_contents('php://input');
$signature = hash_hmac('sha256',$request_data, 'secret');
しかし、まだ一致しません。意地悪な新しい行に気づきました。これにより結果が変更される可能性があるため、クリーンアップしました...
$request_data = str_replace(array('.', ' ', "\n", "\t", "\r"), '', $request_data);
しかし、まだ一致しません。また、本体データを utf8 にキャストしようとしましたが、hmac を raw に戻し、base64 でエンコードしようとしましたが、成功しませんでした。
では、ここで何が間違っているのでしょうか? サンドボックス環境で署名が機能しない可能性がありますか? 誰かがそれに対処しましたか?
前もって感謝します!