> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneclickdz.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Vérifier le Statut du Paiement

> Vérifiez le statut actuel d'un paiement à l'aide de son code de référence

## Vue d'ensemble

Vérifiez le statut du paiement en temps réel à l'aide de la référence de paiement. Indispensable pour le traitement des commandes, l'interrogation du statut et la vérification des paiements.

<Info>
  **Détection automatique de l'environnement** : Cet endpoint vérifie automatiquement les transactions de production (SATIM) et sandbox en fonction de l'endroit où le paiement a été créé.
</Info>

## Paramètres de chemin

<ParamField path="ref" type="string" required>
  Code de référence du paiement (format : `OCPL-XXXXXX-YYYY`)

  <Note>
    Il s'agit du `paymentRef` retourné lors de la création du lien de paiement
  </Note>
</ParamField>

## Réponse

<ResponseField name="success" type="boolean">
  Indique si l'opération a réussi
</ResponseField>

<ResponseField name="data" type="object">
  Informations sur le statut du paiement

  <Expandable title="propriétés de data">
    <ResponseField name="status" type="string">
      Statut actuel du paiement - `PENDING` - Paiement non encore initié ou en cours de traitement - `CONFIRMED` - Paiement réussi - `FAILED` - Paiement échoué ou lien expiré
    </ResponseField>

    <ResponseField name="message" type="string">
      Description lisible du statut
    </ResponseField>

    <ResponseField name="paymentRef" type="string">
      Code de référence du paiement
    </ResponseField>

    <ResponseField name="transactionDetails" type="object">
      Informations supplémentaires sur la transaction (si disponibles)

      <Expandable title="propriétés de transactionDetails">
        <ResponseField name="amount" type="number">
          Montant du paiement en DZD
        </ResponseField>

        <ResponseField name="currency" type="string">
          Code de devise (toujours `"DZD"`)
        </ResponseField>

        <ResponseField name="isSandbox" type="boolean">
          Si c'est une transaction sandbox
        </ResponseField>

        <ResponseField name="createdDate" type="string">
          Horodatage de création de la transaction (ISO 8601)
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  Métadonnées de la réponse

  <Expandable title="propriétés de meta">
    <ResponseField name="timestamp" type="string">
      Horodatage de la réponse (ISO 8601)
    </ResponseField>

    <ResponseField name="requestId" type="string">
      ID unique de la requête pour le support
    </ResponseField>
  </Expandable>
</ResponseField>

## Explication des valeurs de statut

<AccordionGroup>
  <Accordion title="PENDING" icon="clock">
    **Quand vous voyez ceci :**

    * Le client n'a pas encore commencé le processus de paiement
    * Le paiement est en cours de traitement par la banque
    * Le lien vient d'être créé et n'a pas encore été utilisé

    **Que faire :**

    * Continuez d'interroger pour les mises à jour de statut
    * Affichez "Paiement en attente" au client
    * Ne confirmez pas la commande encore
  </Accordion>

  <Accordion title="CONFIRMED" icon="circle-check">
    **Quand vous voyez ceci :** - Paiement effectué avec succès - Les fonds seront crédités sur votre solde OneClick

    **Que faire :**

    * Marquez la commande comme payée dans votre système
    * Traitez la commande/fournissez le service
    * Envoyez une confirmation au client
  </Accordion>

  <Accordion title="FAILED" icon="circle-xmark">
    **Quand vous voyez ceci :**

    * Le paiement a été refusé ou a échoué
    * Le lien de paiement a expiré (20 minutes)
    * Le client a annulé le paiement

    **Que faire :**

    * Marquez la commande comme échouée/annulée
    * Créez un nouveau lien de paiement si le client souhaite réessayer
    * Ne traitez pas la commande
  </Accordion>
</AccordionGroup>

## Expiration du lien

<Warning>
  Les liens de paiement expirent **20 minutes** après la création si aucun paiement n'est initié. Après expiration, le statut sera `FAILED`.
</Warning>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://api.oneclickdz.com/v3/ocpay/checkPayment/OCPL-A1B2C3-D4E5 \
    --header 'X-Access-Token: YOUR_API_KEY'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.oneclickdz.com/v3/ocpay/checkPayment/OCPL-A1B2C3-D4E5",
    {
      method: "GET",
      headers: {
        "X-Access-Token": "YOUR_API_KEY",
      },
    }
  );

  const data = await response.json();
  console.log("Payment Status:", data.data.status);
  console.log("Message:", data.data.message);
  ```

  ```python Python theme={null}
  import requests

  ref = "OCPL-A1B2C3-D4E5"
  url = f"https://api.oneclickdz.com/v3/ocpay/checkPayment/{ref}"
  headers = {
      "X-Access-Token": "YOUR_API_KEY"
  }

  response = requests.get(url, headers=headers)
  data = response.json()

  print(f"Payment Status: {data['data']['status']}")
  print(f"Message: {data['data']['message']}")
  ```

  ```php PHP theme={null}
  <?php
  $ref = 'OCPL-A1B2C3-D4E5';
  $url = "https://api.oneclickdz.com/v3/ocpay/checkPayment/{$ref}";
  $headers = [
      'X-Access-Token: YOUR_API_KEY'
  ];

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

  $response = curl_exec($ch);
  $data = json_decode($response, true);

  echo "Payment Status: " . $data['data']['status'] . "\n";
  echo "Message: " . $data['data']['message'] . "\n";
  ?>
  ```
</RequestExample>

<ResponseExample>
  ```json Paiement confirmé (200) theme={null}
  {
    "success": true,
    "data": {
      "status": "CONFIRMED",
      "message": "Payment confirmed successfully",
      "paymentRef": "OCPL-A1B2C3-D4E5",
      "transactionDetails": {
        "amount": 5000,
        "currency": "DZD",
        "isSandbox": false,
        "createdDate": "2025-01-15T10:30:00Z"
      }
    },
    "meta": {
      "timestamp": "2025-01-15T10:35:00Z",
      "requestId": "req_abc123xyz"
    }
  }
  ```

  ```json Paiement en attente (200) theme={null}
  {
    "success": true,
    "data": {
      "status": "PENDING",
      "message": "Payment not yet initiated",
      "paymentRef": "OCPL-A1B2C3-D4E5",
      "transactionDetails": {
        "amount": 5000,
        "currency": "DZD",
        "isSandbox": false
      }
    },
    "meta": {
      "timestamp": "2025-01-15T10:32:00Z",
      "requestId": "req_abc123xyz"
    }
  }
  ```

  ```json Paiement échoué (200) theme={null}
  {
    "success": true,
    "data": {
      "status": "FAILED",
      "message": "Payment failed",
      "paymentRef": "OCPL-A1B2C3-D4E5",
      "transactionDetails": {
        "amount": 5000,
        "currency": "DZD",
        "isSandbox": false,
        "createdDate": "2025-01-15T10:30:00Z"
      }
    },
    "meta": {
      "timestamp": "2025-01-15T10:35:00Z",
      "requestId": "req_abc123xyz"
    }
  }
  ```
</ResponseExample>

## Exemple d'intégration

Voici comment implémenter la vérification du statut dans votre système de commandes :

```javascript theme={null}
async function checkOrderPayment(orderId) {
  // Récupérer la référence de paiement depuis votre base de données
  const order = await db.orders.findOne({ id: orderId });

  if (!order || !order.paymentRef) {
    throw new Error("Order not found or no payment link");
  }

  // Check payment status
  const response = await fetch(
    `https://api.oneclickdz.com/v3/ocpay/checkPayment/${order.paymentRef}`,
    {
      headers: { "X-Access-Token": process.env.ONECLICK_API_KEY },
    }
  );

  const data = await response.json();

  // Mettre à jour le statut de la commande selon le statut du paiement
  switch (data.data.status) {
    case "CONFIRMED":
      await db.orders.update(orderId, {
        status: "paid",
        paidAt: new Date(),
      });
      await fulfillOrder(orderId);
      break;

    case "FAILED":
      await db.orders.update(orderId, {
        status: "payment_failed",
      });
      break;

    case "PENDING":
      // Continuer à vérifier
      break;
  }

  return data.data;
}
```

## Étapes suivantes

<CardGroup cols={2}>
  <Card title="Créer un lien de paiement" icon="link" href="/fr/api-reference/ocpay/create-link">
    Apprendre à créer des liens de paiement
  </Card>

  <Card title="Guide d'intégration" icon="book" href="/fr/ocpay-guides/overview">
    Guide complet d'intégration Navio
  </Card>
</CardGroup>
