2017-11-14 12 views
2

Webhookを受け取るためのPHPページをセットアップする必要があります。過去にこれらの多くを行っていたので問題はありませんが、このプロジェクトで使用しているAPI私のwebhookはヘッダーで提供されている署名を検証する必要があります。PHP - 署名検証付きWebhook Receiverの設定

検証要求の一環として、それは次のように送信されます:

HEADER: 
"x-xero-signature" : HASH_VALUE 
PAYLOAD: 
{ 
    "events": [], 
    "lastEventSequence": 0, 
    "firstEventSequence": 0, 
    "entropy": "S0m3r4N0m3t3xt" 
} 

私はウェブフックキー(例えば「ABC123」)を作成しました、そしてこのウェブフックの検証要求の一部として、私は確認する必要がありますwebhookキーとbase64でエンコードされたHMACSHA256を使ってハッシュされたペイロードはヘッダーのシグネチャと一致する必要があります。これは正しく署名されたペイロードです。シグネチャがハッシュされたペイロードと一致しない場合は、署名されたペイロードが正しくありません。

検証を受け取る意図を得るには、受信URLが正しく署名されたすべてのペイロードに対して200 Okと応答し、ステータスが401であると応答しなければなりません。401不正確に署名されたすべてのペイロードに対して承認されていません。

私はこれについて移動する方法として、この時点で失われたビットだ - このセットアップの詳細はここで見つけることができます:

https://developer.xero.com/documentation/getting-started/webhooks

+0

:対応するハッシュを生成したり、リクエストヘッダから値を取得しますか? – jeroen

+0

@jeroenこの時点で - 要求ヘッダーから値を取得し、対応するハッシュを生成する – user982124

答えて

3

が検証して送信され-内のデータを一致させるにはヘッダー内のハッシュは、次のことを行う必要があります。

  1. は、ペイロードを取得:
    $payload = file_get_contents("php://input");
  2. は、ペイロードを使用してハッシュし、あなたのウェブフックを生成しますキー:
    $yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
  3. は、ヘッダ内に提供された1つに対してあなたのハッシュをチェックしてください:
    if ($yourHash === $_SERVER['x-xero-signature']) {}

あなたは、これは直接動作しない場合は、正しいキーの$_SERVER配列を確認する必要があります。それはおそらくすべて大文字で始まるでしょう。

編集: OPで述べたように、正しい変数である$_SERVER['HTTP_X_XERO_SIGNATURE']正確にあなたが持つ問題持っている何

+1

ありがとう - これは本当に私を助けました。 '$ _SERVER ['HTTP_X_XERO_SIGNATURE']' – user982124

+0

@ user982124これは理にかなっていて、 'HTTP_'部分を忘れていました。 – jeroen

+1

@ user982124のコメントと一致するように答えを更新しました。 –

関連する問題