Skip to content

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 le webhook_secret de 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énementSe déclenche lorsque
member.createdUn nouveau membre est ajouté (manuellement, en masse ou via le formulaire visiteur)
member.lostUn membre est marqué comme perdu
donation.recordedUne ligne de don est insérée (manuelle ou en ligne)
attendance.markedUne ligne de présence est insérée
workflow.completedUne 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) :

text
expected = HMAC_SHA256(secret, raw_body).hex()
got = request_header('X-GCM-Signature')
if not constant_time_compare(expected, got):
    return 401

WARNING

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.