2017-11-14 13 views
2

Webhook을 받기 위해 PHP 페이지를 설정해야합니다. 이전에는 이러한 작업을 많이 했으므로 문제는 아니지만이 프로젝트에서 사용하고있는 API 내 webhook이 헤더에 제공된 서명을 확인해야합니다. 그 다음 보내드립니다 검증 요청의 일환으로 PHP - 서명 확인이 포함 된 Webhook Receiver 설정

:

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

난은 webhook 키 (예를 들어 'ABC123')를 제작 한,이은 webhook 내가 확인해야합니다에 대한 확인 요청의 일부로 HMACSHA256을 사용하여 webhook 키와 base64로 인코딩 된 페이로드가 헤더의 서명과 일치해야합니다. 이것은 올바르게 서명 된 페이로드입니다. 서명이 해시 된 페이로드와 일치하지 않으면 잘못 서명 된 페이로드입니다.

유효성 확인 수신을 얻으려면 수신 URL이 올바르게 서명 된 모든 페이로드에 대해 200 Ok로 응답해야하며 상태가 다음과 같이 응답해야합니다. 401 올바르지 않은 모든 서명 된 페이로드에 대해 인증되지 않았습니다.

나는 이것에 대해 이동하는 방법에 관해서는이 시점에서 손실 조금 있어요 -이 설정에 대한 자세한 내용은 여기에서 찾을 수 있습니다 :

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

+0

: 해당 해시를 생성하거나 요청 헤더 값을 받고 있습니까? – jeroen

+0

@jeroen이 시점에서 - 요청 헤더에서 값을 가져 와서 해당 해시를 생성합니다. – user982124

답변

3

이 검증으로 전송 된 데이터를 일치 시키려면 헤더에 해시, 당신은 다음과 같은 작업을 수행해야합니다

  1. 페이로드 받기 :
    $payload = file_get_contents("php://input");
  2. 는 페이로드와은 webhook를 사용하여 해시를 생성을 키 :
    $yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
  3. 가 헤더에 제공하는 일에 대하여 당신의 해시를 확인하십시오
    if ($yourHash === $_SERVER['x-xero-signature']) {}

당신이 직접 작동하지 않을 경우 정확한 키의 $_SERVER 배열을 확인해야합니다; 아마 대문자로 시작해야합니다.

편집 : 영업에서 언급 한 바와 같이, 올바른 변수가 $_SERVER['HTTP_X_XERO_SIGNATURE'] 정확하게에 문제가있는 무엇

+1

감사합니다. 정말 도움이되었습니다. 이 포맷을 사용하여 헤더 값을 가져와야했다. $ _SERVER [ 'HTTP_X_XERO_SIGNATURE']' – user982124

+0

@ user982124 의미가 있는데, 나는 'HTTP_' 부분을 잊었다. – jeroen

+1

@ user982124 님의 의견에 맞는 답변을 업데이트했습니다. –