Aller au contenu

Suivre les statuts

Ce guide explique comment synchroniser les statuts de paiement avec votre PMS.

Stratégie de synchronisation

Deux approches complémentaires :

Méthode Usage Latence
Polling (GET statuses) Synchronisation batch périodique Quelques minutes
Webhooks (IPN) Notification en temps réel Quelques secondes

Synchronisation batch

L'endpoint /statuses/ est optimisé pour la synchronisation PMS. Il accepte une liste de références de réservations et retourne les statuts correspondants.

Requête

curl -H "X-API-Key: votre-clé-api" \
  "https://votre-domaine.com/api/payment-requests/statuses/?refs=RES-001,RES-002,RES-003"

Réponse

[
  {
    "uuid": "550e8400-...",
    "reference": "DEP-2026-0042",
    "reservation_ref": "RES-001",
    "request_type": "DEPOSIT",
    "status": "CAPTURED",
    "order_cycle": "CLOSED",
    "amount": 150.00,
    "amount_captured": 150.00
  },
  {
    "uuid": "7c9e6679-...",
    "reference": "IMP-2026-0015",
    "reservation_ref": "RES-002",
    "request_type": "IMPRINT",
    "status": "AUTHORISED",
    "order_cycle": "OPEN",
    "amount": 200.00,
    "amount_captured": 0.00
  }
]

Fréquence recommandée

Synchronisez toutes les 5 à 10 minutes pour un bon compromis entre fraîcheur des données et charge serveur.

Liste filtrée par statut

Pour récupérer toutes les demandes dans un statut donné :

# Toutes les demandes en attente
curl -H "X-API-Key: votre-clé-api" \
  "https://votre-domaine.com/api/payment-requests/?status=PENDING"

Statuts de référence

Statut Code Terminal Description
Non initié NOT_INITIATED Non Demande créée, formulaire non ouvert
En attente PENDING Non Formulaire ouvert par le client
Autorisé AUTHORISED Non Paiement autorisé (empreinte enregistrée)
A valider AUTHORISED_TO_VALIDATE Non Pré-autorisation en attente de capture
Capturé CAPTURED Oui Montant débité
Refusé REFUSED Oui Refusé par la banque
Erreur ERROR Non Erreur technique
Annulé CANCELLED Oui Annulé par l'hôtel
Expiré EXPIRED Oui Délai dépassé
Remboursé REFUNDED Oui Montant remboursé

Champ order_cycle

Valeur Signification
OPEN Transaction en cours
CLOSED Transaction terminée

Exemple d'intégration PMS

import requests

API_KEY = "votre-clé-api"
BASE_URL = "https://votre-domaine.com/api"

def sync_payment_statuses(reservation_refs: list[str]) -> dict:
    """Synchronise les statuts de paiement depuis M-Pay."""
    refs_param = ",".join(reservation_refs)
    response = requests.get(
        f"{BASE_URL}/payment-requests/statuses/",
        params={"refs": refs_param},
        headers={"X-API-Key": API_KEY},
    )
    response.raise_for_status()

    # Indexer par référence de réservation
    return {
        item["reservation_ref"]: item
        for item in response.json()
    }

# Usage
statuses = sync_payment_statuses(["RES-001", "RES-002", "RES-003"])

for ref, data in statuses.items():
    print(f"{ref}: {data['status']} ({data['amount_captured']}€ capturé)")