Aller au contenu principal

UC-02 — Recharge Mobile Money

Acteur : Porteur de carte (libre-service) ou agent But : Créditer une carte via un paiement Mobile Money (FedaPay)

Trigger​

Un porteur souhaite recharger sa carte depuis son téléphone via Mobile Money.

Préconditions​

  • La carte est active
  • Le fournisseur de paiement est configuré
  • Le porteur connaît sa carte et son numéro Mobile Money

Postconditions​

  • Une session de paiement est créée (pending)
  • Après confirmation du fournisseur, la carte est créditée (credit_mobile_money)

Endpoints​

1. Initier la recharge​

POST /api/v1/transactions/recharge
Content-Type: application/json
Idempotency-Key: <uuid-v4>

{
"card_id": "uuid-carte",
"amount_cents": 2000,
"method": "mobile_money",
"customer_phone": "+22890123456",
"payment_provider": "fedapay"
}

customer_phone est requis pour mobile_money.

2. Callback fournisseur (webhook)​

POST /api/v1/payments/callback
X-Provider-Name: fedapay
<corps brut signé>

3. Suivre le statut (polling)​

GET /api/v1/payments/sessions/{session_id}

Flow​

sequenceDiagram
participant Porteur
participant App
participant API
participant Provider as FedaPay
participant DB

Porteur->>App: "Recharger 2000 F"
App->>API: POST /transactions/recharge {method: mobile_money}
API->>DB: INSERT payment_sessions (pending)
API->>Provider: send_payment
Provider-->>API: payment_url + provider_tx_id
API-->>App: {payment_url, session_id, provider_tx_id}
App->>Porteur: Redirection vers la page de paiement

Porteur->>Provider: Confirme le paiement
Provider->>API: POST /payments/callback (signé)
API->>API: Vérifie signature HMAC
API->>DB: UPDATE session → completed
API->>DB: Crédit carte (idempotent)
API-->>Provider: {"status": "processed"}

loop Polling
App->>API: GET /payments/sessions/{id}
API-->>App: {status: "successful"}
end
App->>Porteur: "Recharge réussie"

Réponse (initiation)​

{
"payment_url": "https://pay.fedapay.com/...",
"session_id": "uuid",
"provider_tx_id": null
}

Réponse (statut)​

{
"id": "uuid",
"status": "successful",
"amount_cents": 2000,
"payment_url": "https://pay.fedapay.com/...",
"created_at": "2025-06-01T10:30:00Z"
}

Permissions​

PermissionDescription
card.recharge.mobile_moneyRecharger via Mobile Money

Erreurs​

error_codeDescription
Validationcustomer_phone manquant, montant invalide
NotFoundCarte ou session introuvable
InternalFournisseur non configuré

Voir Paiements et Transaction — Recharge.