1

私は 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 でエンコードしようとしましたが、成功しませんでした。

では、ここで何が間違っているのでしょうか? サンドボックス環境で署名が機能しない可能性がありますか? 誰かがそれに対処しましたか?

前もって感謝します!

4

2 に答える 2

2

最後に、私は問題を発見しました.goocardlessのサンドボックスパネルでは、リクエストが縮小されていないことが示されているため、長さが異なります.縮小するだけでテストできます! 署名が一致するようになりました。

于 2016-07-31T13:12:05.230 に答える