BCard - Documentation technique

DjomyWebhookController extends AbstractController
in package

Point d'entrée des notifications (webhooks) de la passerelle de paiement Djomy.

La route est publique (^/webhook en PUBLIC_ACCESS) : l'authenticité de l'appel repose sur la signature X-Webhook-Signature, vérifiée par DjomyService::verifyWebhookSignature(), puis sur une relecture du statut auprès de Djomy avant toute activation. Les formats V2 (data.payment) et V1 (champs du paiement directement dans data) sont acceptés.

Table of Contents

Properties

$djomyService  : DjomyService
$entityManager  : EntityManagerInterface
$logger  : LoggerInterface
$paymentFulfillmentService  : PaymentFulfillmentService

Methods

__construct()  : mixed
__invoke()  : Response
Traite une notification Djomy.
extractPaymentInfo()  : array<string, mixed>
Isole les champs du paiement d'une notification, au format V2 (`data.payment`) ou V1 (`data`).
findPayment()  : Payment|null
Retrouve le paiement Djomy concerné par une notification.

Properties

Methods

__construct()

public __construct(DjomyService $djomyService, PaymentFulfillmentService $paymentFulfillmentService, EntityManagerInterface $entityManager, LoggerInterface $logger) : mixed
Parameters
$djomyService : DjomyService

Vérifie la signature et relit le statut des transactions.

$paymentFulfillmentService : PaymentFulfillmentService

Valide le paiement et applique ses conséquences (abonnement, commande, cartes).

$entityManager : EntityManagerInterface

Recherche du paiement concerné.

$logger : LoggerInterface

Journalise les notifications reçues, sans secret.

__invoke()

Traite une notification Djomy.

public __invoke(Request $request) : Response

Une signature invalide est journalisée (en-tête reçu tronqué, taille du corps, puis eventType et transactionId s'ils sont lisibles, pour calibrer le format) et refusée en 401. Une fois la signature valide, le paiement est retrouvé par transactionId, à défaut par merchantPaymentReference, à défaut par l'identifiant extrait de cette référence (cas d'un réessai ayant remplacé les références stockées) ; il doit être un paiement Djomy. Sur payment.success (ou statut SUCCESS en V1), le corps n'est pas cru : le statut de la transaction est relu auprès de Djomy et le paiement n'est validé que si ce statut est SUCCESS (devise GNF si fournie) et que la référence marchande renvoyée désigne bien ce paiement. Les autres événements sont seulement journalisés. Un paiement introuvable ou un événement ignoré répond 200 ; seule une erreur interne (lecture du statut, validation) répond 500 pour que Djomy renvoie.

Route : /webhook/djomy (POST), nom djomy_webhook.

Parameters
$request : Request

Requête HTTP portant le corps JSON et l'en-tête X-Webhook-Signature.

Attributes
#[Route]
'/webhook/djomy'
$name: 'djomy_webhook'
$methods: ['POST']
Return values
Response —

JSON {"received":true} (200), 401 si la signature est invalide, 500 en cas d'erreur interne.

extractPaymentInfo()

Isole les champs du paiement d'une notification, au format V2 (`data.payment`) ou V1 (`data`).

private extractPaymentInfo(array<string, mixed> $payload) : array<string, mixed>
Parameters
$payload : array<string, mixed>

Corps JSON décodé.

Return values
array<string, mixed> —

Champs du paiement (transactionId, status, merchantPaymentReference…).

findPayment()

Retrouve le paiement Djomy concerné par une notification.

private findPayment(string $transactionId, string $reference) : Payment|null

Recherche par identifiant de transaction, puis par référence marchande, puis par l'identifiant extrait de la référence (BCARD-PAY-<id>[-R<timestamp>]). Seul un paiement dont provider vaut djomy est accepté.

Parameters
$transactionId : string

Identifiant de transaction Djomy.

$reference : string

Référence marchande.

Return values
Payment|null —

Paiement trouvé, ou null.


        
On this page

Search results