Appearance
Casier judiciaire - hosted
Parcours MinJust : le citoyen quitte brièvement le portail pour payer sur la page checkout hébergée, puis revient via success_url ou notification webhook.
Acteurs
| Acteur | Rôle |
|---|---|
| Citoyen | Soumet la demande et paie (mobile money ou agence) |
| SI MinJust (backend) | Crée la session, redirige, traite le webhook |
| Epayment API | Orchestre la session et constate le paiement |
| Checkout hébergé | Interface citoyen (canaux MM et agence) |
| Endpoint webhook MinJust | Réception HMAC des événements checkout |
Prérequis
- Application ministry configurée (clé
sk_test_ousk_live_, cataloguecasier_judiciaire). - Endpoint webhook HTTPS abonné à
checkout.completed(et aux terminaux si logique métier requise). webhook_secretstocké en coffre ; vérification HMAC implémentée.- Montant dû calculé côté MinJust ;
order_idstable par dossier. success_urlconfigurée (ne suffit pas seule pour débloquer le dossier).
Séquence
Étapes métier
- Citoyen soumet la demande sur le portail MinJust.
- Backend MinJust :
POST /checkout/sessionsavecorder_id,amount,service_code: casier_judiciaire,metadata,success_url. - Redirect du citoyen vers
checkout_url. - Citoyen paie en mobile money ou note
payment_refpour paiement en agence. - Epayment envoie
checkout.completedau webhook MinJust. - MinJust débloque le dossier (idempotent sur
order_id).
Exemple création
bash
curl -X POST "https://paymentdev-api.akieni.tech/api/v1/checkout/sessions" \
-H "Authorization: Bearer sk_test_XXXX" \
-H "Idempotency-Key: CJ-2026-88421" \
-H "Content-Type: application/json" \
-d '{
"order_id": "CJ-2026-88421",
"amount": 5000,
"description": "Casier judiciaire",
"service_code": "casier_judiciaire",
"metadata": { "tribunal": "Brazzaville" },
"success_url": "https://casiers.minjust.gouv/retour/succes"
}'Chemins d'échec
| Scénario | Signal | Action MinJust |
|---|---|---|
| Session TTL sans paiement | Webhook checkout.expired ou GET status: expired | Garder dossier bloqué ; proposer nouvelle session (nouvelle Idempotency-Key) |
| Collect MM refusé ou timeout | Webhook checkout.failed, failure_code (collect.rejected, collect.approval_timeout) | Ne pas débloquer ; même order_id possible avec nouvelle session |
| Citoyen annule sur checkout | Webhook checkout.cancelled | Dossier reste en attente de paiement ; nouvelle session si le citoyen revient |
Critères d'acceptation
- [ ]
POST /checkout/sessionsretournecheckout_urletsession_idcohérents. - [ ] Paiement sandbox (MM ou agence) aboutit à webhook
checkout.completedsigné et validé. - [ ]
unlockDossierexécuté une seule fois même si webhook rejoué (x-epayment-event-idou(session_id, event)). - [ ] Retour
success_urlseul ne débloque pas le dossier sans webhook ou GET confirmé. - [ ] Montant webhook et
order_idreflètent le montant dû ministry, pas le total citoyen incluant frais (frais de service). - [ ] Échec MM : nouvelle session créée sans double encaissement sur le même dossier payé.