FlowAlp

Erreurs Merchant API

July 30, 2026

Codes de statut HTTP de la Merchant API FlowAlp Pay, structure de la réponse d'erreur JSON et conseils de retry avec backoff exponentiel.

Lorsqu'un appel Merchant API échoue, la réponse combine un code de statut HTTP et un corps JSON qui explique le problème. Cette page présente la sémantique des statuts, la structure de l'erreur et la bonne façon de réessayer.

Depuis la version v1.15 de l'API, les requêtes en échec renvoient un code de statut spécifique à l'erreur au lieu d'une réponse générique — voir Versions de l'API et changelog.

Codes de statut HTTP

StatutSignificationQue faire
200 OKRequête traitée ; vérifiez le champ status du corpsPoursuivre le flux
400 Bad RequestRequête malformée ou invalide (champs, types, encodage)Corriger le payload ; ne pas réessayer à l'identique
401 UnauthorizedIdentifiants manquants ou invalidesVérifier l'API Secret et la méthode d'authentification ; ne pas réessayer à l'identique
403 ForbiddenAccès refusé ; survient aussi après une surcharge prolongée à la périphérie de la plateformeVérifier permissions et instance ; en cas de volume élevé, backoff puis retry
404 Not FoundRessource, ID ou chemin inconnusVérifier Object, id et segment de version
405 Method Not AllowedMauvais verbe HTTP ; sous charge, aussi un premier signal de rate limitVérifier le verbe utilisé ; en cas de volume élevé, backoff
429 Too Many RequestsStatut standard de rate limitBackoff puis réessayer plus tard
5xxProblème temporaire côté serveurRéessayer avec backoff exponentiel

La limite documentée se manifeste par un 405 suivi d'un 403 tant que la limite reste dépassée ; si vous recevez un jour un 429, traitez-le de la même manière. Détails : Limites de débit Merchant API.

Structure de la réponse d'erreur

Les appels en échec renvoient un corps JSON avec un champ status et une explication lisible, généralement dans un champ message :

Corps d'erreur typeJSON
{
  "status": "error",
  "message": "Description of what went wrong"
}

Les appels réussis renvoient "status": "success" ainsi qu'un tableau data. Évaluez d'abord le code de statut HTTP, puis le corps. Les textes des messages ne font pas partie du contrat de l'API : basez votre logique sur les codes de statut, jamais sur les chaînes de message.

Conseils de retry

Classe d'échecRetry ?Comment
400 / 401 / 404 — erreurs de validation et d'authentificationNonCorriger d'abord la requête ou les identifiants
405 / 403 sous volume élevé, 429OuiBackoff exponentiel avec jitter
5xx et timeouts réseauOuiBackoff exponentiel ; plafonner les tentatives

Un point de départ éprouvé : délai initial de 500 ms, doublement à chaque tentative, jitter aléatoire jusqu'à 300 ms, délai maximal de 30 s, au plus 5 tentatives. Rendez les opérations réessayées idempotentes dans votre système, par exemple en dédupliquant sur referenceId.

Helper PHP de retry avec backoffPHP
<?php
function callWithBackoff(callable $request, int $maxAttempts = 5)
{
    $delayMs = 500;

    for ($attempt = 1; $attempt <= $maxAttempts; $attempt++) {
        [$status, $body] = $request();

        if ($status < 400) {
            return $body;
        }

        $retriable = in_array($status, [403, 405, 429], true) || $status >= 500;
        if (!$retriable || $attempt === $maxAttempts) {
            throw new RuntimeException('FlowAlp Pay request failed: HTTP ' . $status);
        }

        usleep(($delayMs + random_int(0, 300)) * 1000);
        $delayMs = min($delayMs * 2, 30000);
    }
}
Inspecter statut et corps avec curlbash
response=$(curl --silent --write-out "\n%{http_code}" \
  --url "https://api.pay.flowalp.com/v1.16/Transaction/<transaction-id>/?instance=<instance>" \
  --header "x-api-key: <api-secret>")

body=$(printf '%s' "$response" | head -n -1)
status=$(printf '%s' "$response" | tail -n 1)

echo "HTTP $status"
echo "$body"

Diagnostiquer les échecs d'authentification

  • Lancez le test rapide SignatureCheck pour distinguer les problèmes d'identifiants des problèmes d'endpoint.
  • Vérifiez que le nom d'instance correspond au sous-domaine de votre page de paiement.
  • En mode signature, comparez votre encodage de query string avec l'implémentation de référence dans Authentification Merchant API.

Bonnes pratiques de journalisation

  • Journalisez le statut HTTP, le chemin de la ressource et votre identifiant de corrélation (par exemple referenceId) — jamais l'API Secret ni ApiSignature.
  • Séparez les erreurs de validation des erreurs d'authentification dans vos métriques.
  • Préférez les webhooks au polling agressif afin que les erreurs transitoires aient moins d'impact.