Fri Jan 09 2026
...
ืขืืืื ืืืืืช Webhook
ืื ืืืฉ
ืืขืืจ ืืืืชื ืืืืืช ืืืืจื ืงืฉื ืืืชืจ ืฉื Webhooks ืืืฉืืืื ืืคืืืคืืจืืืช ืืืจืืช. ืจืืื ื ืืื ืืืจ ืืืืื ืืฉื ืืืฆืขื ืืืืืื ืื ืืกืคืื ืื ืืจืฉืื, ืื ืืืืจืื ื ืืืขื ื ืืืกืื ืขื ืื ืื ืื ืฉืืื ืืืืชื ืืืื ืืืืืื ืื ืืืืืื ืืื ืขื ืคื ืืืืจื.
ืืชื ืืืืช ืงืืืืช
ืืขืืจ, ืืืขืจืืช ืืืืชื ืืขืืืจื ืืช ืืคืชื ื-API ืฉืื ืืืืขื ืื ืืฆืืคืชื ืืื ืืืืช ืืืชื. ืื ืื ืืืจืช ืขื ืงืื ืฉืืืื 401 ืืืคืชื API ืื ืืืงื, ืืืขืจืืช ืื ืืืืชื ืืืคืฉืจืช ืืืืจื.
ืืชื ืืืืช ืืืฉื
ืืขืช, ืืืขืจืืช ืื ืชืขืืืจ ืืคืชื API ืขืืืจ ืชืฆืืจืืช webhook ืืืฉืืช. ืืืงืื ืืืช, ืขืืืจ ืืื ืืืจืฆืืืช ืืืฉืืช ืืงืืืืืช ื ืืืืช ืืชืืื HMAC ืืชืืื. ืืืชืื ืฉืชืืืจ ืืืืช ืืชืืื ืื, ืืืชืื ืืจืืช ืืืืืื ืื ืืจืฉืช ืฉืื.
ืชืฆืืจืืช ืงืืืืืช ืืืฉืืื ืืืขืืืจ ืืช ืืคืชื ื-API - ืืขืช ืชืืื ืืืงืฉ ืืืืืช ืืช ืื ืืืืฆืขืืช ืืจืืืก ืชืืืื.
ืืืืืช ืืชืืืช HMAC
FastComments ืืขืช ืฉืืืืช ืืช ืืืืชืจืืช ืืืืืช ืขื ืื ืืงืฉืช webhook:
| ืืืชืจืช | ืชืืืืจ |
|---|---|
X-FastComments-Timestamp |
ืืืชืืช ืืื ืฉื Unix (ืฉื ืืืช) ืืืฉืจ ืืืงืฉื ื ืืชืื |
X-FastComments-Signature |
ืืชืืืช HMAC-SHA256 ืืคืืจืื sha256=<hex> |
token |
ืกืื ื-API ืฉืื (ืฉืืืจ ืืฉืืืืจ ืชืืืืืช ืขื ืืจืกืืืช ืงืืืืืช) |
ืืื ืืืืฉืืช ืืืชืืื
- ืืืืืจ:
timestamp + "." + JSON_payload_body - ืืฉืืื HMAC-SHA256 ืชืื ืฉืืืืฉ ืืกืื ื-API ืฉืื ืืืคืชื
- ืงืืืื ืืืค Hex ืฉื ืืชืืฆืื
ืืืืืช ืืืืืช (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# ืืืืืช ืฉืืืืชืืช ืืื ืขืืื ืืช
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# ืืืืืช ืืืชืืื
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
ืืืืจืช ืฉืืืช HTTP
ืื ืืกืฃ, ืืืื ืขื ืขืืืื ืื - ืขืืฉืื ืชืืื ืืืืืืจ ืืช ืฉืืืช ื-HTTP ืขืืืจ ืื ืกืื ืืืจืืข webhook:
- ืืฆืืจืช ืืืจืืข: POST ืื PUT (ืืจืืจืช ืืืื: PUT)
- ืขืืืื ืืืจืืข: POST ืื PUT (ืืจืืจืช ืืืื: PUT)
- ืืืืงืช ืืืจืืข: DELETE, POST, ืื PUT (ืืจืืจืช ืืืื: DELETE)
ืืชืจืื ืืช ืืืืื
ืืืขืจืืช ืืืืฉื ืืฉ ืืื ืืชืจืื ืืช:
- ืืื ื ืืคื ื ืืชืงืคืืช ืฉื ืืืฉ ืืืืฆืข
- ืื ืืขืช ืืชืงืคืืช ืืืจื ืืืืฆืขืืช ืืืืืช ืืืชืืช ืืื
- ืืืืื ืืืืจื ืืืืขื
ืชืืืืืช ืขื ืืจืกืืืช ืงืืืืืช
ืืืืชืจืช token ืืืืืื ืืช ืกืื ื-API ืฉืื ืขืืืื ื ืฉืืืช ืขื ืื ืืงืฉื. ืืื ืืืจืฆืืืช ืงืืืืืช ืืืฉืืื ืืคืขืื ืืื ืฉืื ืื, ืืืคื
ืฉืืืืืจ ืงืืื ืืื ืชืืื ืืืงืฉ ืืืืืช ืืช ืืืชื ืืืืช ืืืฉื ื ืืืืฆืขืืช ืชืืืื.
ืชืืขืื
ืืืืืข ืชืืขืืื ืฉืื, ืขืืื ืืืืจืื ื-Webhooks ืฉืื ื Webhooks Guide.
ืืกืืืื
ืืื ืืื ืืฉืงืืช ืืืืืืืช, ืื ื ืฉืืืื ืฉืืืืื ื ืืงืืช ืืช ืืืื ืืืืขื, ืืืืืง ืืืฉืืจืจ ืืช ืืฉืื ืืืื ืืืื ืืจืืื. ืืืืข ืืืชื ื ืืืื ืื ืชืืฆื ืืขืืืช ืืืฉืื.
ืืืืื!
