# Vérifier un paiement

Après le paiement, il est essentiel de confirmer que la transaction a été traitée par Moneroo avant d'accréditer la valeur de votre client dans votre application. Cette précaution permet de s'assurer que le paiement reçu correspond à vos attentes.

Voici quelques points clés à vérifier lors de la confirmation du paiement :

1. Confirmez que la référence de la transaction correspond à celle que vous avez générée.
2. Vérifiez l'exactitude du statut de la transaction. Le statut de la transaction doit être "succès" pour les paiements réussis. Pour en savoir plus sur les statuts de transaction, voir la section Statut de transaction.
3. Vérifier que la devise du paiement correspond à la devise attendue.
4. Assurez-vous que le montant payé est égal ou supérieur au montant prévu. Si le montant est supérieur, vous pouvez fournir au client la valeur correspondante et rembourser l'excédent.

Pour authentifier un paiement, utilisez le endpoint "verify transaction", en spécifiant l'ID de la transaction dans l'URL. Vous pouvez obtenir l'ID de la transaction à partir du champ `data.id` dans la réponse après la création de la transaction, ainsi que dans le contenu du Webhook pour toute transaction.

### Demande

```bash
GET /v1/payments/{paymentId}/verify HTTP/1.1
Host: https://api.moneroo.io
Authorization: Bearer YOUR_SECRET_KEY
Content-Type: application/json
Accept: application/json
```

#### Paramètres

* Endpoint: `/v1/payments/{paymentId}/verify`
* Method: `GET`

<table><thead><tr><th>Nom</th><th width="76">Type</th><th width="103">Exigée</th><th>Description</th></tr></thead><tbody><tr><td><code>paymentId</code></td><td>String</td><td>Oui</td><td>L'ID unique de l'opération de paiement à vérifier.</td></tr></tbody></table>

### Structure de la réponse

La réponse de ce endpoint de l'API sera dans le format de réponse standard de l'API Moneroo. Vous obtiendrez une réponse qui ressemble à ceci :

```json
{
  "success": true,
  "message": "Payment transaction fetched successfully",
  "data": {
    // Details of the payment transaction
  }
}
```

**Réponse positive**

En cas de récupération réussie, l'endpoint renvoie un code d'état HTTP de 200 et les détails de l'opération de paiement dans le corps de la réponse.

**Réponses d'erreurs:**

Si votre demande pose un problème, l'API renvoie une réponse d'erreur. Le type de réponse dépend de la nature du problème. Consultez notre page sur les formats de réponse pour plus d'informations.

### Considérations de sécurité

Cet endpoint nécessite un jeton de support pour l'authentification. Ce jeton doit être inclus dans l'en-tête `Authorization` de la demande. Assurez-vous que le jeton est conservé en toute sécurité et qu'il n'est pas partagé ou exposé de manière inappropriée.

### Exemples de demandes

Veuillez remplacer`'paymentId'` par l'id de la transaction de paiement et`'your_token'` par votre jeton d'autorisation valide dans les extraits de code ci-dessus.

{% tabs %}
{% tab title="Curl" %}

```bash
curl --location --request GET 'https://api.moneroo.io/v1/payments/{paymentId}/verify' \
--header 'Authorization: Bearer YOUR_TOKEN'
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$paymentId = 'your_payment_id';
$token = 'your_token';

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.moneroo.io/v1/payments/{$paymentId}/verify",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer {$token}"
  ]
]);

$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ($httpCode === 200) {
  // Handle successful response
} else {
  // Handle error response
}

curl_close($curl);
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

paymentId = 'your_payment_id'
token = 'your_token'

headers = {
  'Authorization': f'Bearer {token}'
}

response = requests.get(f'https://api.moneroo.io/v1/payments/{paymentId}/verify', headers=headers)

if response.status_code == 200:
  # Handle successful response
else:
  # Handle error response
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"net/http"
)

func main() {
	paymentId := "your_payment_id"
	token := "your_token"

	url := fmt.Sprintf("https://api.moneroo.io/v1/payments/%s/verify", paymentId)
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		// Handle error
	}

	req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		// Handle error
	}
	defer resp.Body.Close()

	if resp.StatusCode == 200 {
		// Handle successful response
	} else {
		// Handle error response
	}
}
```

{% endtab %}

{% tab title="JavaScript (Node.js)" %}

```javascript
const axios = require("axios");

const paymentId = "your_payment_id";
const token = "your_token";

axios
  .get(`https://api.moneroo.io/v1/payments/${paymentId}/verify`, {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  })
  .then((response) => {
    if (response.status === 200) {
      // Handle successful response
    } else {
      // Handle error response
    }
  })
  .catch((error) => {
    // Handle error
  });
```

{% endtab %}
{% endtabs %}

### Exemple de réponse

Vous obtiendrez une réponse qui ressemble à celle-ci :

```json
{
  "success": true,
  "message": "Payment transaction fetched successfully",
  "data": {
    "id": "abc123",
    "status": "success",
    "is_processed": true,
    "processed_at": "2023-05-21T12:00:00Z",
    "amount": 100.0,
    "currency": "USD",
    "amount_formatted": "$100.00",
    "description": "Purchase of goods",
    "return_url": "https://example.com/return",
    "environment": "production",
    "initiated_at": "2023-05-21T11:00:00Z",
    "checkout_url": "https://example.com/checkout",
    "payment_phone_number": "+1234567890",
    "app": {
      "id": "app1",
      "name": "Example App",
      "icon_url": "https://example.com/icon.png"
    },
    "customer": {
      "id": "cust1",
      "first_name": "John",
      "last_name": "Doe",
      "email": "john.doe@example.com",
      "phone": "+1234567890",
      "address": "123 Main St",
      "city": "Springfield",
      "state": "IL",
      "country_code": "US",
      "country": "United States",
      "zip_code": "62701",
      "environment": "production",
      "created_at": "2023-01-01T00:00:00Z",
      "updated_at": "2023-05-21T00:00:00Z"
    },
    "method": {
      "name": "Credit Card",
      "code": "cc",
      "icon_url": "https://example.com/cc.png",
      "environment": "production"
    },
    "gateway": {
      "name": "Stripe",
      "account_name": "Acme Corp",
      "code": "stripe",
      "icon_url": "https://example.com/stripe.png",
      "environment": "production"
    },
    "metadata": {
      "custom_field1": "custom_value1",
      "custom_field2": "custom_value2"
    },
    "context": {
      "ip": "192.0.2.0",
      "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (HTML, like Gecko) Chrome/58.0.3029.110 Safari/537",
      "country": "US",
      "local": "en-US"
    }
  }
}
```

Les détails de la transaction sont contenus dans l'objet de données. Par exemple :

* Le statut de la transaction est indiqué dans `data.status`.
* Les détails du client se trouvent dans le champ`data.customer`.
* Le champ `data.amount` indique le montant facturé au client.
* Certains champs varient en fonction du type de transaction ou de l'état de la transaction.
* Le champ `data.method` contient la méthode de paiement utilisée par le client.
* Le champ `data.gateway` contient la passerelle de paiement utilisée pour traiter la transaction.
* Le champ `data.metadata` contient toutes les métadonnées personnalisées que vous avez pu fournir lors de la création de la transaction.
* Le champ `data.context` contient le contexte de la transaction.
* Le champ `data.app` contient les détails de l'application.

| Nom du champ           | Description                                              |
| ---------------------- | -------------------------------------------------------- |
| `id`                   | L'ID public de la transaction.                           |
| `status`               | Le statut de la transaction.                             |
| `is_processed`         | Indique si la transaction est traitée.                   |
| `processed_at`         | L'heure à laquelle la transaction a été traitée.         |
| `amount`               | Le montant de la transaction.                            |
| `currency`             | La devise utilisée dans la transaction.                  |
| `amount_formatted`     | Le montant formaté impliqué dans la transaction.         |
| `description`          | La description de la transaction.                        |
| `return_url`           | L'URL à laquelle retourner après la transaction.         |
| `environment`          | L'environnement dans lequel la transaction a eu lieu.    |
| `initiated_at`         | L'heure à laquelle la transaction a été initiée.         |
| `checkout_url`         | L'URL pour vérifier la transaction.                      |
| `payment_phone_number` | Le numéro de téléphone associé à la méthode de paiement. |
| `app`                  | L'application associée à la transaction.                 |
| `customer`             | Le client associé à la transaction.                      |
| `method`               | Le mode de paiement associé à la transaction.            |
| `gateway`              | La passerelle de paiement associée à la transaction.     |
| `metadata`             | Les métadonnées associées à la transaction.              |
| `context`              | Le contexte associé à la transaction.                    |
