Webhooks
Entrants — ceux que nous recevons
Genius Checkout
URL : POST /functions/v1/gc-webhook
GC publie des événements pour chaque changement d'état d'abonnement (created, charged, paused, cancelled, payment_failed). Chaque publication transporte :
X-GC-Signature— HMAC-SHA256 sur le corps brut en utilisant lewebhook_secretde votre organisation.Idempotency-Key— GC réessaie les réponses 5xx non signées pendant environ 24 heures, alors prémunissez-vous contre les doublons de votre côté.
Nous vérifions la signature, recherchons la ligne recurring_donations correspondante par gateway_subscription_id, et mettons à jour son état. Le payload complet est journalisé dans donation_payment_webhook_log afin que vous puissiez le rejouer si une écriture échoue.
Réponses entrantes WAHA / WhatsApp
URL : POST /functions/v1/wacrm-webhook
WAHA publie du JSON pour chaque message WhatsApp entrant + accusé de réception. Nous normalisons le numéro de téléphone (chiffres uniquement, sans +), le comparons à members.primary_phone, et ajoutons le message au fil de conversation existant (ou en créons un nouveau).
Remboursements + notifications PowerTranz
URL : POST /functions/v1/powertranz-webhook
Utilisé pour les confirmations asynchrones de remboursement + les notifications de paiement récurrent. Même schéma HMAC que GC.
Sortants — ceux que vous pouvez configurer
Webhooks par événement
Allez dans Paramètres → Intégrations → Webhooks et ajoutez une URL. Choisissez parmi :
| Événement | Se déclenche lorsque |
|---|---|
member.created | Un nouveau membre est ajouté (manuellement, en masse ou via le formulaire visiteur) |
member.lost | Un membre est marqué comme perdu |
donation.recorded | Une ligne de don est insérée (manuelle ou en ligne) |
attendance.marked | Une ligne de présence est insérée |
workflow.completed | Une exécution de workflow se termine |
Chaque publication inclut :
X-GCM-Signature— HMAC-SHA256 du corps en utilisant un secret que vous définissez.- Un corps JSON avec la ligne affectée + delta.
Zapier
Nous fournissons une intégration Zapier (cherchez "Genius Church Manager" dans Zapier). Utilisez-la pour les automatisations low-code. Sous le capot, c'est le même point d'accès webhook sortant.
Vérifier les signatures
Pseudo-code (le même algorithme fonctionne en Node, Python, PHP, Go) :
expected = HMAC_SHA256(secret, raw_body).hex()
got = request_header('X-GCM-Signature')
if not constant_time_compare(expected, got):
return 401WARNING
N'utilisez pas == — comparaison à temps constant uniquement. Stripe et Slack publient tous deux des guides plus détaillés, les deux s'appliquent ici.
Réessais
Nous réessayons les publications échouées (status ≠ 2xx, ou aucune réponse en 10s) avec un backoff exponentiel jusqu'à 24 heures, puis marquons la livraison comme permanently_failed. Consultez l'historique de livraison dans Paramètres → Intégrations → Logs de Webhook.
