Ontvang real-time meldingen wanneer gebeurtenissen plaatsvinden in uw organisatie. Webhooks stellen u in staat om reactieve integraties te bouwen die onmiddellijk reageren op QR-code scans en andere gebeurtenissen.
Ontvang onmiddellijk een melding wanneer gebeurtenissen plaatsvinden, geen polling vereist
HMAC-handtekeningen verifiëren dat webhooks van iloveQR komen
Automatische herhalingen met exponentiële terugval voor mislukte leveringen
Configureer webhooks via het dashboard of de API om te beginnen met het ontvangen van gebeurtenissen.
Stel een HTTPS-eindpunt op uw server in om webhook-payloads te ontvangen.
Voeg uw eindpunt-URL toe en selecteer op welke gebeurtenissen u zich wilt abonneren.
Implementeer handtekeningverificatie om ervoor te zorgen dat payloads authentiek zijn.
curl -X POST \
"https://api.iloveqr.com/api/v1/organizations/org_abc123/webhooks" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhooks/iloveqr",
"events": ["qr.scanned", "qr.created", "qr.updated"],
"secret": "your_webhook_secret"
}'Abonneer u op de gebeurtenissen die u nodig heeft. Elk type gebeurtenis heeft een specifieke payloadstructuur.
qr.createdEr is een nieuwe QR-code aangemaaktqr.updatedEen QR-code is bijgewerktqr.deletedEen QR-code is verwijderdqr.scannedEen QR-code is gescandqr.archivedEen QR-code is gearchiveerdqr.restoredEen QR-code is hersteld uit archiefsubscription.createdEr is een nieuw abonnement aangemaaktsubscription.updatedEen abonnement is bijgewerktsubscription.cancelledEen abonnement is geannuleerdsubscription.payment_succeededEen betaling was succesvolsubscription.payment_failedEen betaling is misluktmember.joinedEen lid is toegetreden tot de organisatiemember.leftEen lid heeft de organisatie verlatenmember.role_changedDe rol van een lid is gewijzigdAlle webhook-payloads volgen een consistente structuur met gebeurtenismetadata en gegevens.
{
"id": "evt_1a2b3c4d5e6f",
"event": "qr.scanned",
"createdAt": "2024-01-15T14:30:00Z",
"organizationId": "org_abc123",
"data": {
"qrCodeId": "qr_xyz789",
"qrCodeName": "Product Landing Page",
"shortCode": "xyz789",
"destinationUrl": "https://example.com/product",
"scan": {
"id": "scan_123abc",
"timestamp": "2024-01-15T14:30:00Z",
"location": {
"country": "US",
"city": "New York",
"latitude": 40.7128,
"longitude": -74.0060
},
"device": {
"type": "mobile",
"os": "iOS",
"browser": "Safari"
},
"isUnique": true
}
}
}{
"id": "evt_7g8h9i0j1k2l",
"event": "qr.created",
"createdAt": "2024-01-15T10:00:00Z",
"organizationId": "org_abc123",
"data": {
"qrCode": {
"id": "qr_newcode",
"type": "URL",
"name": "New Campaign QR",
"shortUrl": "https://ilqr.co/newcode",
"destinationUrl": "https://example.com/campaign",
"createdBy": "user_abc123"
}
}
}Verifieer altijd webhook-handtekeningen om ervoor te zorgen dat de payload van iloveQR komt en niet onderweg is gewijzigd.
Elke webhook-aanroep bevat een X-Webhook-Signature header met een HMAC-SHA256-handtekening van de aanvraagbody.
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// In your webhook handler
app.post('/webhooks/iloveqr', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Process the webhook
const event = req.body;
console.log('Received event:', event.event);
res.status(200).send('OK');
});import hmac
import hashlib
def verify_webhook_signature(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
# In your Flask handler
@app.route('/webhooks/iloveqr', methods=['POST'])
def handle_webhook():
signature = request.headers.get('X-Webhook-Signature')
payload = request.get_data()
if not verify_webhook_signature(payload, signature, WEBHOOK_SECRET):
return 'Invalid signature', 401
event = request.get_json()
print(f"Received event: {event['event']}")
return 'OK', 200Geef binnen 5 seconden een 2xx-respons terug. Verwerk webhooks asynchroon als uw verwerking langer duurt.
Sla de gebeurtenis-ID op en controleer op duplicaten. Webhooks kunnen in zeldzame gevallen meer dan eens worden afgeleverd.
Gebruik altijd HTTPS-eindpunten. We leveren geen webhooks aan HTTP-URL's.
Stel monitoring in voor mislukkingen bij de levering van webhooks. Controleer de webhook-logboeken in het dashboard voor debugging.
Als uw eindpunt een fout retourneert of niet reageert, proberen we automatisch opnieuw te leveren met exponentiële terugval:
| Poging | Vertraging |
|---|---|
| 1e herhaling | 1 minuut |
| 2e herhaling | 5 minuten |
| 3e herhaling | 30 minuten |
| 4e herhaling | 2 uur |
| 5e herhaling (finale) | 24 uur |
Opmerking: Na 5 mislukte pogingen wordt de webhook gemarkeerd als mislukt en stoppen we met opnieuw proberen. U ontvangt een e-mailmelding over de mislukking.
Klaar om aan de slag te gaan? Verken meer bronnen: