Hooks billetterie et paiements

Disponible dans :Pro

Ces hooks suivent la partie payante de HappenBoard Pro : types de billets, commandes Stripe et WooCommerce, remboursements. Ils couvrent aussi les lignes payées restées sans place, la limite des paiements par visiteur et l’empreinte bancaire des demandes de rendez-vous. Ils servent à reporter ventes et remboursements dans votre comptabilité, votre CRM ou d’autres outils.

Le côté administrateur est décrit dans Configurer Stripe et Rembourser une commande. La vente via WooCommerce est présentée dans Vendre vos billets via WooCommerce. Si vous n’avez jamais utilisé les hooks de HappenBoard, commencez par Étendre HappenBoard avec les hooks.

Tous les hooks de cette page sont déclenchés par HappenBoard Pro. Voir Ce que Pro ajoute.

Comment une commande est enregistrée

Quand un paiement est confirmé, Pro écrit une ligne de participant par ligne de billet, avec une ligne de vente à côté. La ligne de vente garde le montant payé, ce qui en a été remboursé et l’indication que ses places comptent ou non dans la capacité du billet. Le tableau de bord Commandes lit ces montants : changer un prix plus tard ne modifie pas les commandes passées.

Les montants sont en unités mineures de la devise : centimes pour EUR, yens pour JPY. Un paiement se fait dans une seule devise. Un panier qui mélange des devises est refusé avant tout appel à Stripe, et aucun hook de cette page ne se déclenche.

Un panier de billets gratuits du bloc Ticket Picker ne passe jamais par Stripe. Ses billets sont émis tout de suite et seul happenboard_rsvp_submitted se déclenche, avec source à free_ticket. Voir Hooks participants et inscriptions.

Quel hook se déclenche, et quand

Ce qui se passeHooks déclenchés
Un paiement Stripe de billets est confirméhappenboard_rsvp_submitted pour chaque ligne placée, puis happenboard_stripe_checkout_completed
Une ligne payée ne trouve plus de placehappenboard_pro_ticket_unseated
Un remboursement Stripe, partiel ou complethappenboard_pro_stripe_refund_recorded
Les remboursements couvrent tout le paiement Stripehappenboard_stripe_refunded, après le hook ci-dessus
Une commande WooCommerce est payéehappenboard_pro_wc_order_fulfilled
Un remboursement WooCommerce est enregistréhappenboard_pro_wc_order_refunded
Une commande WooCommerce est annulée, remboursée en entier, en échec ou mise à la corbeillehappenboard_pro_wc_order_reversed

Un remboursement Stripe peut venir de l’écran Orders ou du tableau de bord Stripe : les deux sont enregistrés de la même façon, et une seule fois. Chaque participant annulé au passage déclenche aussi happenboard_rsvp_cancelled.

Paiements des rendez-vous

Pro encaisse les rendez-vous en répondant aux filtres de paiement de l’extension gratuite, décrits dans Hooks prise de rendez-vous. Son seul hook propre pour eux est happenboard_pro_booking_hold_hours, en fin de page. Les paiements de rendez-vous ne déclenchent jamais les hooks Stripe ci-dessus.

happenboard_pro_ticket_saved

Action Pro src/REST/Tickets.php

Se déclenche après la création ou la modification d’un type de billet. Seul l’ID du billet est transmis : relisez la ligne si vous avez besoin de ses champs.

Signature

do_action( 'happenboard_pro_ticket_saved', int $ticket_id )

Paramètres

$ticket_id int
Le type de billet enregistré. La ligne existe et elle est à jour.

Exemple

add_action(
    'happenboard_pro_ticket_saved',
    function ( $ticket_id ) {
        $tickets = new \HappenBoard\Pro\Service\Tickets\Repository();
        $ticket  = $tickets->find( (int) $ticket_id );
        if ( null === $ticket ) {
            return;
        }
        // $ticket['eventId'], $ticket['priceCents'], $ticket['currency']...
        my_crm_sync_ticket( $ticket );
    }
);

Remarques

  • Il est déclenché par le panneau Tickets, les routes REST des billets et les abilities happenboard-pro/create-ticket-type et happenboard-pro/update-ticket-type. Il l’est aussi pour chaque billet déplacé vers une autre traduction quand la traduction qui les portait est supprimée définitivement. Rien ne distingue une création d’une modification.
  • Une requête avec une valeur incorrecte (prix négatif, code de devise inconnu, date de vente illisible) est refusée avec une erreur 400 avant toute écriture : le hook ne se déclenche pas.
  • Avec WPML ou Polylang, toutes les traductions d’un événement vendent les mêmes billets, rangés sur l’une d’elles. Un billet ajouté depuis une autre traduction rejoint cet ensemble : lisez eventId sur la ligne, ce n’est pas forcément l’événement que vous modifiiez.
  • Les ventes, remboursements et annulations modifient les compteurs sold et held sans le déclencher. Quand Sell tickets through WooCommerce est activé, Pro l’écoute en priorité 10 pour mettre à jour le produit lié.

happenboard_pro_ticket_deleted

Action Pro src/REST/Tickets.php

Se déclenche après la suppression d’un type de billet, avec une copie de la ligne telle qu’elle était juste avant. Sert à archiver le billet ou à retirer ce que vous aviez construit dessus.

Signature

do_action( 'happenboard_pro_ticket_deleted', int $ticket_id, array<string,mixed>|null $snapshot )

Paramètres

$ticket_id int
Le type de billet supprimé. La ligne n’existe plus.
$snapshot array<string,mixed>|null
La ligne du billet lue avant la suppression, avec les clés de l’API REST des billets : id, eventId, name, description, priceCents, currency, capacity, sold, held, saleStartUtc, saleEndUtc, sortOrder, metadata, createdUtc, updatedUtc. Chaque appelant la lit d’abord : en pratique, c’est toujours un tableau.

Exemple

add_action(
    'happenboard_pro_ticket_deleted',
    function ( $ticket_id, $snapshot ) {
        if ( ! is_array( $snapshot ) ) {
            return;
        }
        // La ligne telle qu'elle était juste avant la suppression.
        error_log( sprintf(
            'Ticket %d (%s) removed from event %d, %d sold.',
            $ticket_id,
            $snapshot['name'],
            $snapshot['eventId'],
            $snapshot['sold']
        ) );
    },
    10,
    2
);

Remarques

  • Deux arguments : inscrivez-vous avec 10, 2, sinon vous perdez la copie, seule trace de la ligne supprimée.
  • Il est déclenché par le panneau Tickets (DELETE /happenboard/v1/tickets/{id}), par l’ability happenboard-pro/delete-ticket-type, et pour chaque billet d’un événement supprimé définitivement. Mettre un événement à la corbeille ne supprime rien.
  • Supprimer un type de billet efface ses compteurs par date mais garde ses participants et ses lignes de vente : les commandes passées gardent leurs montants. Supprimer l’événement efface aussi les places réservées et les lignes de vente de chaque billet avant ce hook, puis les participants et les check-ins de l’événement.
  • Quand Sell tickets through WooCommerce est activé, Pro met le produit lié à la corbeille en priorité 10, en se servant de la copie. Ne supprimez pas ce produit vous-même.

happenboard_pro_checkout_limits

Filtre Pro src/REST/Checkout.php

Filtre le nombre de paiements qu’une adresse IP peut lancer par heure, et le nombre de places qu’ils peuvent bloquer. Un paiement bloque ses places environ 30 minutes, le temps que l’acheteur paie : cette limite empêche un script de bloquer tout un événement sans payer.

Signature

apply_filters( 'happenboard_pro_checkout_limits', array $limits, string $ip )

Paramètres

$limits array{checkouts_per_hour:int,seats_per_hour:int}
Par défaut checkouts_per_hour à 10 et seats_per_hour à 60.
$ip string
L’adresse du visiteur, telle que happenboard_rsvp_client_ip l’a renvoyée.

Valeur de retour

array Les deux limites. Une valeur inférieure à 1 est remontée à 1, et une clé absente garde sa valeur par défaut.

Exemple

add_filter(
    'happenboard_pro_checkout_limits',
    function ( $limits, $ip ) {
        // Le poste de la billetterie vend beaucoup de billets par heure.
        if ( '203.0.113.10' === $ip ) {
            $limits['checkouts_per_hour'] = 200;
            $limits['seats_per_hour']     = 1000;
        }

        return $limits;
    },
    10,
    2
);

Remarques

  • Paniers payants uniquement. Un panier gratuit suit les limites d’inscription de l’extension gratuite : 5 par adresse et par minute, 3 par adresse e-mail et par heure.
  • seats_per_hour plafonne aussi un paiement unique : un panier plus gros est refusé avec une erreur 400 qui invite l’acheteur à contacter l’organisateur. Au-delà de l’une des limites, le visiteur reçoit une erreur 429 qui lui demande d’attendre.
  • Un paiement est compté une fois les autres vérifications passées, juste avant de bloquer ses places, même s’il ne reste aucune place. Le compteur est tenu par adresse et expire une heure après le dernier paiement compté.
  • Derrière un proxy ou Cloudflare, tous les visiteurs peuvent partager la même adresse : corrigez-la d’abord avec happenboard_rsvp_client_ip. Sans adresse valide, aucune limite ne s’applique.

happenboard_stripe_checkout_completed

Action Pro src/Service/Stripe/WebhookHandler.php

Se déclenche quand un paiement Stripe Checkout de billets est confirmé et que ses lignes sont devenues des participants. C’est l’endroit où enregistrer une vente de billets.

Signature

do_action( 'happenboard_stripe_checkout_completed', int $event_id, array<int,int> $created_attendee_ids, array<string,mixed> $session )

Paramètres

$event_id int
L’événement sur lequel l’acheteur a réservé, lu dans la métadonnée de session happenboard_event_id. Sur un site traduit, c’est la traduction dont la page a servi, pas forcément celle qui porte les billets.
$created_attendee_ids array<int,int>
Les ID des participants écrits par cette livraison, un par ligne de billet, y compris les lignes restées sans place. Vide quand une nouvelle livraison a trouvé toutes les lignes déjà écrites.
$session array<string,mixed>
La session Stripe Checkout sous forme de tableau : id, amount_total, currency (en minuscules, comme eur), payment_intent, metadata et le reste.

Exemple

add_action(
    'happenboard_stripe_checkout_completed',
    function ( $event_id, $attendee_ids, $session ) {
        $session_id = (string) ( $session['id'] ?? '' );
        if ( '' === $session_id || get_option( 'my_sale_' . $session_id ) ) {
            return; // Déjà enregistrée lors d'une livraison précédente.
        }
        my_accounting_record_sale(
            (int) $event_id,
            $attendee_ids,
            (int) ( $session['amount_total'] ?? 0 ),
            strtoupper( (string) ( $session['currency'] ?? '' ) )
        );
        update_option( 'my_sale_' . $session_id, 1, false );
    },
    10,
    3
);

Remarques

  • Trois arguments : inscrivez-vous avec 10, 3. Le troisième est un tableau, pas un objet Stripe.
  • Il se déclenche sur checkout.session.completed, ou sur checkout.session.async_payment_succeeded pour les moyens de paiement réglés plus tard. Paiements de billets uniquement : les paiements de rendez-vous et les billets gratuits ne le déclenchent jamais.
  • Stripe peut livrer le même événement plusieurs fois. Une nouvelle livraison saute les lignes déjà écrites et redéclenche le hook avec les seules nouvelles lignes, voire aucune. Basez votre traitement sur $session['id'], comme dans l’exemple.
  • Il s’exécute après happenboard_rsvp_submitted pour chaque ligne placée : leurs e-mails de confirmation sont déjà lancés. Une ligne sans place déclenche happenboard_pro_ticket_unseated à la place. Pro l’écoute en priorité 10 pour ajouter une entrée payment.received à l’activité de chaque participant.

happenboard_pro_ticket_unseated

Action Pro src/Service/Stripe/WebhookHandler.php

Se déclenche quand une ligne de billet payée n’a pas obtenu de place, parce que le billet a été épuisé avant l’arrivée du paiement. La ligne de participant est écrite, mais aucun e-mail de confirmation n’est envoyé. Sert à prévenir quelqu’un qui peut rembourser l’acheteur ou lui trouver une place.

Signature

do_action( 'happenboard_pro_ticket_unseated', int $attendee_id, array<string,mixed> $context )

Paramètres

$attendee_id int
La ligne de participant écrite pour la ligne payée : statut cancelled quand Stripe l’a remboursée automatiquement, waitlist sinon.
$context array<string,mixed>
Toujours event_id, ticket_id, quantity, email, display_name, source (stripe ou woocommerce) et outcome. Côté Stripe, outcome vaut refunded, refund_failed ou not_refunded, avec refund_id, amount (unités mineures, ou null si la ligne n’a pas pu être chiffrée), currency, payment_intent et error. Côté WooCommerce, outcome vaut toujours not_refunded, avec order_id.

Exemple

add_action(
    'happenboard_pro_ticket_unseated',
    function ( $attendee_id, $context ) {
        if ( 'refunded' === $context['outcome'] ) {
            return; // Stripe a déjà rendu l'argent.
        }
        wp_mail(
            get_option( 'admin_email' ),
            'Paid ticket without a seat',
            sprintf(
                'Attendee #%d (%s) paid for %d seat(s) of ticket %d and got none. Outcome: %s.',
                $attendee_id,
                $context['email'],
                $context['quantity'],
                $context['ticket_id'],
                $context['outcome']
            )
        );
    },
    10,
    2
);

Remarques

  • Deux arguments : inscrivez-vous avec 10, 2. Il est déclenché par src/Service/Stripe/WebhookHandler.php pour Stripe et par src/Service/WooCommerce/OrderBridge.php pour WooCommerce.
  • Stripe : quand une clé secrète est enregistrée, Pro rembourse la ligne avant d’écrire la ligne de participant, qui passe en cancelled. Sans clé, si le remboursement échoue, ou pour une ancienne session de plusieurs lignes sans prix unitaire, personne n’est remboursé et la ligne va en liste d’attente.
  • WooCommerce ne rembourse jamais automatiquement, car le remboursement doit passer par la passerelle qui a encaissé. La ligne va en liste d’attente et une note de commande demande au gérant de rembourser la ligne ou de donner une place.
  • happenboard_rsvp_submitted ne se déclenche pas pour ces lignes, mais leurs ID figurent dans les listes transmises à happenboard_stripe_checkout_completed et happenboard_pro_wc_order_fulfilled. Une ligne de vente est quand même enregistrée, sans places comptées. Pro l’écoute en priorité 10 pour le noter dans l’activité du participant.

happenboard_pro_stripe_refund_recorded

Action Pro src/Service/Orders/Refunds.php

Se déclenche à chaque remboursement Stripe enregistré sur une commande de billets, avec le montant gagné par la ligne de chaque participant. Couvre les remboursements complets ou partiels faits depuis l’écran Orders et ceux faits dans le tableau de bord Stripe. Sert à reporter les remboursements dans votre comptabilité.

Signature

do_action( 'happenboard_pro_stripe_refund_recorded', string $payment_intent, array<int,int> $gained, string $currency )

Paramètres

$payment_intent string
L’ID du PaymentIntent Stripe de la commande. Chaque ligne de participant de la commande le stocke.
$gained array<int,int>
ID du participant => montant nouvellement remboursé sur sa ligne, en unités mineures. Seules les lignes dont le montant remboursé a augmenté y figurent.
$currency string
Code ISO 4217 de la commande, en majuscules (par exemple EUR).

Exemple

add_action(
    'happenboard_pro_stripe_refund_recorded',
    function ( $payment_intent, $gained, $currency ) {
        // Une ligne comptable par participant concerné par le remboursement.
        foreach ( $gained as $attendee_id => $minor_units ) {
            my_accounting_record_refund(
                $payment_intent,
                (int) $attendee_id,
                (int) $minor_units,
                $currency
            );
        }
    },
    10,
    3
);

Remarques

  • Trois arguments : inscrivez-vous avec 10, 3.
  • Répartition d’un remboursement : d’abord sur les lignes annulées avec lui, jusqu’à ce qu’il reste sur chacune, puis sur les autres lignes en proportion de ce qu’il leur reste. Une ligne n’est jamais remboursée de plus que son prix.
  • Seules les lignes choisies sur l’écran Orders et celles qu’un remboursement couvre en entier sont annulées, places libérées et happenboard_rsvp_cancelled déclenché, avant ce hook. Un remboursement partiel fait dans le tableau de bord Stripe n’annule personne, sauf s’il couvre une ligne entière.
  • Chaque remboursement est enregistré une seule fois : l’écran Orders enregistre le sien dès que Stripe l’accepte, et le webhook charge.refunded qui suit ne trouve rien de nouveau. Les remboursements de rendez-vous ne le déclenchent jamais. Pro l’écoute en priorité 10 pour ajouter une entrée payment.refunded à l’activité de chaque participant.

happenboard_stripe_refunded

Action Pro src/Service/Orders/Refunds.php

Se déclenche quand un paiement Stripe de billets est remboursé en entier, après l’annulation des participants restants et la libération de leurs places. Sert à clore toute la vente dans vos propres outils.

Signature

do_action( 'happenboard_stripe_refunded', string $payment_intent, array<int,int> $cancelled, array<string,mixed> $source )

Paramètres

$payment_intent string
L’ID du PaymentIntent Stripe de la commande.
$cancelled array<int,int>
Les ID des participants annulés par ce dernier remboursement. Les lignes annulées plus tôt n’y figurent pas : la liste peut être vide.
$source array<string,mixed>
L’origine du remboursement, sous forme de tableau. Depuis le webhook Stripe, le Charge Stripe (amount, amount_refunded, currency et le reste). Depuis l’écran Orders, un tableau court : id (l’ID du remboursement), object (refund), amount, amount_refunded, currency et payment_intent.

Exemple

add_action(
    'happenboard_stripe_refunded',
    function ( $payment_intent, $cancelled, $source ) {
        // Le paiement est remboursé en entier : on clôt la vente.
        my_accounting_close_sale(
            $payment_intent,
            (int) ( $source['amount_refunded'] ?? 0 ),
            strtoupper( (string) ( $source['currency'] ?? '' ) ),
            $cancelled
        );
    },
    10,
    3
);

Remarques

  • Trois arguments : inscrivez-vous avec 10, 3. Le troisième n’est un Charge que si le remboursement est arrivé par le webhook : vérifiez $source['object'] avant de lire d’autres clés. Dans les deux cas, amount_refunded est le total remboursé à ce jour et currency est en minuscules.
  • Les remboursements partiels ne le déclenchent pas tant qu’ils ne couvrent pas tout le paiement. Pour suivre chaque remboursement, utilisez happenboard_pro_stripe_refund_recorded, qui se déclenche juste avant ce hook quand le remboursement a rendu de l’argent.
  • Lors d’un remboursement complet, chaque ligne du paiement est marquée remboursée en entier et chaque ligne pas encore annulée est annulée, avec happenboard_rsvp_cancelled déclenché pour chacune avant ce hook.
  • Prévoyez qu’il s’exécute deux fois pour un même paiement : un webhook ultérieur peut le redéclencher en annulant une ligne laissée par l’écran Orders, comme une ancienne ligne sans montant enregistré. Il ne se déclenche jamais pour un paiement de rendez-vous. Pro ne l’écoute plus : l’activité des participants vient de happenboard_pro_stripe_refund_recorded.

happenboard_pro_wc_pay_later_methods

Filtre Pro src/Service/WooCommerce/OrderBridge.php

Filtre les moyens de paiement WooCommerce dont les commandes passent en processing avant tout encaissement. Les billets de ces commandes ne sont émis qu’au passage en completed.

Signature

apply_filters( 'happenboard_pro_wc_pay_later_methods', array<int,string> $methods, WC_Order $order )

Paramètres

$methods array<int,string>
Les ID des passerelles de paiement. Par défaut array( 'cod' ) (paiement à la livraison).
$order WC_Order
La commande vérifiée avant l’émission de ses billets.

Valeur de retour

array<int,string> Les ID des passerelles à traiter comme un paiement différé, comparés strictement à $order->get_payment_method().

Exemple

add_filter(
    'happenboard_pro_wc_pay_later_methods',
    function ( $methods, $order ) {
        // Cette passerelle met les commandes en « processing » avant tout encaissement.
        $methods[] = 'my_pay_on_site';

        return $methods;
    },
    10,
    2
);

Remarques

  • Deux arguments : inscrivez-vous avec 10, 2 si vous avez besoin de la commande.
  • Pourquoi ce filtre : WooCommerce passe les commandes en paiement à la livraison directement en processing sans rien encaisser, si bien que le statut seul ne les distingue pas d’une commande payée.
  • Il n’est consulté que pour une commande payée qui n’est pas encore completed : une commande completed reçoit toujours ses billets. Retirer cod de la liste émet les billets payés à la livraison dès le passage en processing.
  • Il demande WooCommerce actif et Sell tickets through WooCommerce activé. Il peut s’exécuter plusieurs fois pour une même commande, à chaque changement de statut : évitez tout effet de bord.

happenboard_pro_wc_order_fulfilled

Action Pro src/Service/WooCommerce/OrderBridge.php

Se déclenche quand une commande WooCommerce payée a été transformée en participants HappenBoard. Sert à transmettre la commande à vos outils de facturation ou CRM, maintenant que les ID des participants existent.

Signature

do_action( 'happenboard_pro_wc_order_fulfilled', int $order_id, array<int,int> $created, WC_Order $order )

Paramètres

$order_id int
L’ID de la commande WooCommerce. Ses lignes de participant stockent wc_order_{id} comme référence de paiement.
$created array<int,int>
Les ID des participants créés par ce passage, dans l’ordre des lignes, y compris les lignes restées sans place. Vide si la commande ne contenait aucun produit billet.
$order WC_Order
La commande WooCommerce, déjà enregistrée avec les métas _happenboard_fulfilled et _happenboard_attendee_ids. Appelez save() vous-même si vous la modifiez.

Exemple

add_action(
    'happenboard_pro_wc_order_fulfilled',
    function ( $order_id, $created, $order ) {
        if ( array() === $created ) {
            return; // Aucune ligne de billet dans cette commande.
        }
        $order->add_order_note( sprintf(
            '%d HappenBoard attendee row(s) created.',
            count( $created )
        ) );
        $order->save();
    },
    10,
    3
);

Remarques

  • Trois arguments : inscrivez-vous avec 10, 3. Il demande WooCommerce actif et Sell tickets through WooCommerce activé.
  • Il se déclenche une fois par commande, quand elle passe en processing ou completed et qu’elle est payée (voir happenboard_pro_wc_pay_later_methods). Un passage interrompu est terminé au changement de statut suivant, qui saute les lignes déjà écrites. Rien ne se déclenche sans adresse e-mail de facturation valide.
  • $created peut être vide et le hook se déclenche quand même. Une ligne restée sans place reçoit une ligne en waitlist, une note de commande et happenboard_pro_ticket_unseated, mais pas d’e-mail de confirmation.
  • Chaque ligne écrit une ligne de vente avec ce que l’acheteur a payé, remises et taxes comprises, en unités mineures. Pro l’écoute en priorité 10 pour ajouter une entrée payment.received à l’activité de chaque participant.

happenboard_pro_wc_order_refunded

Action Pro src/Service/WooCommerce/OrderBridge.php

Se déclenche quand un remboursement WooCommerce atteint les ventes de billets d’une commande traitée, avec ce que gagne la vente de chaque participant. Sert à reporter les remboursements dans votre comptabilité. Il ne touche qu’à l’argent : un remboursement seul n’annule aucun participant.

Signature

do_action( 'happenboard_pro_wc_order_refunded', int $order_id, array<int,int> $gained, string $currency )

Paramètres

$order_id int
L’ID de la commande WooCommerce.
$gained array<int,int>
ID du participant => montant nouvellement remboursé sur sa vente, en unités mineures de la devise de la commande. Seules les ventes dont le montant remboursé a augmenté y figurent.
$currency string
Code ISO 4217 de la devise de la commande, tel que WooCommerce le stocke (par exemple EUR).

Exemple

add_action(
    'happenboard_pro_wc_order_refunded',
    function ( $order_id, $gained, $currency ) {
        // Seulement le montant nouveau depuis le dernier appel.
        foreach ( $gained as $attendee_id => $minor_units ) {
            my_accounting_record_refund(
                'wc_' . (int) $order_id,
                (int) $attendee_id,
                (int) $minor_units,
                $currency
            );
        }
    },
    10,
    3
);

Remarques

  • Trois arguments : inscrivez-vous avec 10, 3.
  • Il est vérifié quand WooCommerce enregistre un remboursement, quand un remboursement est supprimé et quand une commande est annulée. Les montants sont recalculés à partir de la commande à chaque fois : un remboursement vu deux fois n’est compté qu’une fois. Un remboursement supprimé baisse les montants sans déclencher le hook.
  • Répartition : un remboursement complet couvre toutes les ventes. Un remboursement qui désigne des lignes sur l’écran de remboursement WooCommerce va au participant créé par chaque ligne. Un montant sans ligne est réparti selon la part de chaque vente dans le total. Aucune vente n’est remboursée de plus que son prix.
  • Un remboursement complet fait aussi passer la commande en refunded, ce qui l’annule (voir happenboard_pro_wc_order_reversed). Pro l’écoute en priorité 10 pour ajouter une entrée payment.refunded à l’activité de chaque participant.

happenboard_pro_wc_order_reversed

Action Pro src/Service/WooCommerce/OrderBridge.php

Se déclenche après l’annulation d’une commande WooCommerce traitée, une fois ses participants annulés et leurs places libérées. Sert à défaire ce que vous aviez fait au traitement.

Signature

do_action( 'happenboard_pro_wc_order_reversed', int $order_id, array<int,int> $cancelled, WC_Order $order )

Paramètres

$order_id int
L’ID de la commande WooCommerce.
$cancelled array<int,int>
Les ID des participants annulés par ce passage. Les lignes déjà annulées n’y figurent pas.
$order WC_Order
La commande WooCommerce, déjà enregistrée avec la méta _happenboard_reversed.

Exemple

add_action(
    'happenboard_pro_wc_order_reversed',
    function ( $order_id, $cancelled, $order ) {
        // Annuler ce que vous aviez fait au traitement de la commande.
        foreach ( $cancelled as $attendee_id ) {
            my_crm_mark_cancelled( (int) $attendee_id, (int) $order_id );
        }
    },
    10,
    3
);

Remarques

  • Trois arguments : inscrivez-vous avec 10, 3. happenboard_rsvp_cancelled s’est déjà déclenché pour chaque ligne annulée.
  • Il se déclenche une fois par commande, quand une commande traitée passe en refunded, cancelled ou failed, ou est mise à la corbeille ou supprimée. Si une autre requête traite la même commande au même moment, l’annulation est relancée une minute plus tard par WP-Cron.
  • Annuler une commande n’est pas la rembourser. Une commande annulée dont la boutique a gardé l’argent reste comptée dans le chiffre d’affaires. Les ventes ne sont marquées remboursées que pour ce que WooCommerce a remboursé, et happenboard_pro_wc_order_refunded se déclenche d’abord s’il y a du nouveau.
  • Seules les lignes qui tiennent des places les libèrent, et le stock des produits liés est mis à jour. Il demande WooCommerce actif et Sell tickets through WooCommerce activé.

happenboard_pro_booking_hold_hours

Filtre Pro src/Service/Booking/AuthorizationSweeper.php

Filtre la durée, en heures, pendant laquelle une demande de rendez-vous peut attendre votre validation avec une empreinte bloquée sur la carte du client. Une vérification horaire refuse les demandes plus anciennes, ce qui libère l’empreinte avant que Stripe ne l’annule de lui-même.

Signature

apply_filters( 'happenboard_pro_booking_hold_hours', int $hours )

Paramètres

$hours int
Par défaut 144 (six jours).

Valeur de retour

int Le nombre d’heures qu’une demande avec empreinte peut attendre. Une valeur inférieure à 1 compte pour 1.

Exemple

add_filter(
    'happenboard_pro_booking_hold_hours',
    function ( $hours ) {
        // Refuser les demandes sans réponse après quatre jours au lieu de six.
        return 96;
    }
);

Remarques

  • Restez sous 168 heures. Stripe annule une autorisation de carte non encaissée au bout de sept jours ; au-delà, valider la demande ne trouve plus rien à encaisser.
  • L’âge est compté à partir de la création du rendez-vous, et non de l’autorisation de la carte quelques minutes plus tard : la vérification tombe toujours un peu en avance.
  • La vérification tourne toutes les heures sur l’événement WP-Cron happenboard_pro_expire_booking_holds et lit le filtre une fois par passage. Une demande refusée suit le refus normal : le client est prévenu, le créneau est libéré, l’empreinte est levée et une note explique pourquoi. L’adresse e-mail d’administration du site reçoit un récapitulatif par passage.
  • À ne pas confondre avec happenboard_booking_payment_hold_hours de l’extension gratuite, qui fixe combien de temps un rendez-vous impayé garde son créneau.

Pour aller plus loin