Webhook'lar
Uç nokta kaydetme
Bir soket tutmak yerine çağrılmayı tercih ediyorsanız bir HTTPS uç noktası kaydedin. Eşleşen her olayı aynı JSON zarfı olarak, ham gövde üzerinden HMAC-SHA256 ile imzalanmış şekilde X-XSF-Signature başlığıyla POST ederiz.
kaydet — gizli anahtar yalnızca bir kez gösterilir
curl -X PUT https://api.xsignalfeed.com/v1/account/webhook \ -H "Authorization: Bearer xsf_your_key" -H "Content-Type: application/json" \ -d '{"url": "https://example.com/hooks/xsf"}'
Teslimatı doğrulama
Ham gövde üzerinden doğrulayın. Ayrıştırılmış JSON'u yeniden serileştirmek baytları değiştirir ve imza asla eşleşmez. Gövdeyi, başka hiçbir şey dokunmadan önce bayt olarak okuyun.
import hmac, hashlib def valid(raw_body: bytes, signature: str, secret: str) -> bool: want = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest() return hmac.compare_digest(want, signature)
import { createHmac, timingSafeEqual } from "crypto"; function valid(rawBody, signature, secret) { const want = createHmac("sha256", secret).update(rawBody).digest("hex"); return timingSafeEqual(Buffer.from(want), Buffer.from(signature)); }
mac := hmac.New(sha256.New, []byte(secret))
mac.Write(rawBody)
ok := hmac.Equal([]byte(hex.EncodeToString(mac.Sum(nil))), []byte(signature))Yeniden denemeler ve kurtarma
2xx dışı bir yanıtta veya zaman aşımında üç kez yeniden deneriz, sonra o teslimatı bırakırız. Hiçbir şey sonsuza kadar kuyrukta kalmaz. Uç noktanız kapalıysa sakladığınız son sid değerini alın ve GET /v1/events ya da yeniden oynatan bir WebSocket ile açığı kapatın — gerçek kurtarma yolu yeniden deneme politikası değil, budur.