# API Marchand GeniusPay

Intégrez les paiements mobiles et par carte dans vos applications en quelques minutes.

## Base URL
- **Production** : `https://pay.genius.ci/api/v1/merchant` (Transactions réelles. Activez le mode live dans vos paramètres.)
- **Sandbox** : `https://pay.genius.ci/api/v1/merchant` (Testez votre intégration sans frais. Les transactions sont simulées.)

## Authentification
Toutes les requêtes API doivent inclure vos clés dans les headers HTTP. Vous trouverez vos clés dans Paramètres → API.

| Header | Description |
| --- | --- |
| `X-API-Key` | Votre clé publique (pk_sandbox_... ou pk_live_...) |
| `X-API-Secret` | Votre clé secrète (sk_sandbox_... ou sk_live_...) |
| `Content-Type` | application/json |

### Exemple avec cURL
```bash
curl -X POST https://pay.genius.ci/api/v1/merchant/payments \
  -H "X-API-Key: pk_sandbox_xxxxxxxx" \
  -H "X-API-Secret: sk_sandbox_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"amount": 5000, "customer": {"phone": "0700000000"}}'
```

## Intégration dans Nelsius Pay

GeniusPay a été intégré comme l'agrégateur global (`global_network`) par défaut pour toutes les transactions qui ne relèvent pas d'un opérateur local spécifique via MamoniPay ou SendavaPay. 

### Configuration (Environment Variables)
Les variables suivantes doivent être définies dans votre fichier `.env` :

```env
GENIUSPAY_BASE_URL="https://pay.genius.ci/api/v1/merchant"
GENIUSPAY_SECRET_KEY="sk_live_..."
GENIUSPAY_PUBLIC_KEY="pk_live_..."
GENIUSPAY_WEBHOOK_SECRET="whsec_..."
```

### Services et Fichiers mis à jour

1. **`config/geniuspay.php`** : Configuration pour initialiser GeniusPay avec les variables `.env`.
2. **`app/Services/GlobalPaymentService.php`** : Service principal pour initialiser les paiements (`initiatePayment`), vérifier les statuts (`checkPaymentStatus`) et vérifier les signatures Webhook (`verifyWebhookSignature`).
3. **`app/Http/Controllers/Api/PaymentController.php`** : Met à jour les références internes dans le contrôleur de paiement.
4. **`app/Console/Commands/AuditBalanceCommand.php`** : Tests de cohérence pour l'API GeniusPay au lieu de l'ancien agrégateur.

### Fonctionnement Global

- **Création du paiement** : Les paiements effectués par carte bancaire ou opérateurs internationaux sont envoyés à GeniusPay via `initiatePayment`. Un lien de paiement (checkout URL) est renvoyé à l'utilisateur.
- **Vérification du statut** : Un `gateway_reference` est stocké pour suivre l'état du paiement. 
- **Webhooks** : Une fois la transaction achevée, GeniusPay appelle notre point de terminaison de webhook. Le service valide l'authenticité de la requête avec le `webhook_secret`.
- **Validation** : Le solde du portefeuille est mis à jour en toute sécurité à l'aide d'un `lockForUpdate` au niveau de la base de données.
