我正在使用gocardless鉤子,並且我一直在使用沙盒環境驗證hmac簽名。gocardless PHP 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中對其進行編碼......但沒有成功。
那麼在這裏會出現什麼問題呢?也許簽名不能在沙箱環境中工作?有沒有人處理過它?
提前致謝!
能否請你澄清你的unminified意思驗證網絡掛接簽名的例子嗎?也許一個例子可能會有用。 – guival
我正在複製粘貼無紙化webhook發送對象郵遞員,並將其發送到我的端點模擬接收webhooks,在GC面板測試webhook響應顯示(爲更好的閱讀目的),並簽名不匹配,因爲長度將不同,他們發送縮小的請求意味着沒有空格! –
明白了,謝謝。我以爲你的意思是還有換行符或這樣的事情。它有助於瞭解儘管應該沒有空白。 – guival