Passer au contenu principal

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.

Vue d’ensemble

Le SDK Navio PHP fournit une interface moderne et typée pour intégrer les paiements Navio dans vos applications PHP. Conçu avec les fonctionnalités PHP 8.1+ et les meilleures pratiques.

Type Safe

Typages complets PHP 8.1+ et types de retour

Compatible Composer

Autoloading PSR-4 et installation facile

API simple

Interface claire et intuitive

Gestion des erreurs

Exceptions personnalisées pour chaque type d’erreur

Prérequis

  • PHP 8.1 ou supérieur
  • Composer
  • Extension ext-json
  • Extension ext-curl

Installation

Installez via Composer :
composer require oneclickdz/ocpay-php-sdk
Ou ajoutez à votre composer.json :
{
    "require": {
        "oneclickdz/ocpay-php-sdk": "^1.0"
    }
}

Démarrage rapide

1. Initialiser le SDK

<?php

require 'vendor/autoload.php';

use OneClickDz\OCPay\OCPay;

// Initialize with your API access token
$ocpay = new OCPay('your-api-access-token');
Stockez votre clé API dans des variables d’environnement, jamais dans le code
# .env file
ONECLICK_API_KEY=your_api_key_here
// Load from environment
$ocpay = new OCPay(getenv('ONECLICK_API_KEY'));

2. Créer un lien de paiement

use OneClickDz\OCPay\DTO\CreateLinkRequest;
use OneClickDz\OCPay\DTO\ProductInfo;

// Create product information
$productInfo = new ProductInfo(
    title: 'Premium Subscription',
    amount: 5000, // Amount in DZD (500 - 500,000)
    description: 'Monthly access to premium features'
);

// Create payment link request
$request = new CreateLinkRequest(
    productInfo: $productInfo,
    feeMode: CreateLinkRequest::FEE_MODE_NO_FEE,
    successMessage: 'Thank you for your purchase!',
    redirectUrl: 'https://yourstore.com/success?order=12345'
);

// Create the payment link
try {
    $response = $ocpay->createLink($request);
    
    // Redirect customer to payment page
    echo "Payment URL: " . $response->paymentUrl . "\n";
    
    // IMPORTANT: Save this reference!
    echo "Payment Reference: " . $response->paymentRef . "\n";
    saveOrderPaymentRef($orderId, $response->paymentRef);
    
} catch (\OneClickDz\OCPay\Exception\ValidationException $e) {
    echo "Validation error: " . $e->getMessage() . "\n";
} catch (\OneClickDz\OCPay\Exception\UnauthorizedException $e) {
    echo "Auth error: " . $e->getMessage() . "\n";
} catch (\OneClickDz\OCPay\Exception\ApiException $e) {
    echo "API error: " . $e->getMessage() . "\n";
}

3. Vérifier le statut du paiement

// Check payment status using the payment reference
try {
    $status = $ocpay->checkPayment('OCPL-A1B2C3-D4E5');
    
    if ($status->isConfirmed()) {
        // Payment successful - fulfill the order
        echo "Payment confirmed!\n";
        echo "Amount: " . $status->transactionDetails->amount . " DZD\n";
        fulfillOrder($orderId);
        
    } elseif ($status->isFailed()) {
        // Payment failed or expired
        echo "Payment failed: " . $status->message . "\n";
        markOrderFailed($orderId);
        
    } else {
        // Still pending - check again later
        echo "Payment pending...\n";
    }
    
} catch (\OneClickDz\OCPay\Exception\NotFoundException $e) {
    echo "Payment not found\n";
} catch (\OneClickDz\OCPay\Exception\PaymentExpiredException $e) {
    echo "Payment link expired\n";
} catch (\OneClickDz\OCPay\Exception\ApiException $e) {
    echo "API error: " . $e->getMessage() . "\n";
}

Exemple e-commerce complet

Voici un flux complet pour un paiement e-commerce :
<?php

require 'vendor/autoload.php';

use OneClickDz\OCPay\OCPay;
use OneClickDz\OCPay\DTO\CreateLinkRequest;
use OneClickDz\OCPay\DTO\ProductInfo;

// Initialize SDK
$ocpay = new OCPay(getenv('ONECLICK_API_KEY'));

// Step 1: Create order in your system
$orderId = createOrder([
    'customer_id' => 123,
    'items' => [
        ['name' => 'Product A', 'price' => 5000],
        ['name' => 'Product B', 'price' => 3000],
    ],
    'total' => 8000,
]);

// Step 2: Create payment link
try {
    $productInfo = new ProductInfo(
        title: "Order #{$orderId}",
        amount: 8000,
        description: "Payment for order #{$orderId}"
    );
    
    $request = new CreateLinkRequest(
        productInfo: $productInfo,
        feeMode: CreateLinkRequest::FEE_MODE_NO_FEE,
        successMessage: "Thank you! Order #{$orderId} confirmed.",
        redirectUrl: "https://yourstore.com/orders/{$orderId}/success"
    );
    
    $response = $ocpay->createLink($request);
    
    // Step 3: Save payment reference
    updateOrder($orderId, [
        'payment_ref' => $response->paymentRef,
        'payment_url' => $response->paymentUrl,
        'status' => 'pending_payment',
    ]);
    
    // Step 4: Redirect customer
    header("Location: " . $response->paymentUrl);
    exit;
    
} catch (ApiException $e) {
    error_log("Payment creation failed: " . $e->getMessage());
    showErrorPage("Failed to create payment. Please try again.");
}

Tâche de fond pour la vérification du statut

Configurez une tâche cron ou un worker de fond :
<?php

// check_payments.php - Run every 20 minutes

require 'vendor/autoload.php';

use OneClickDz\OCPay\OCPay;

$ocpay = new OCPay(getenv('ONECLICK_API_KEY'));

// Get all pending orders
$pendingOrders = getPendingOrders();

foreach ($pendingOrders as $order) {
    if (!$order['payment_ref']) {
        continue;
    }
    
    try {
        $status = $ocpay->checkPayment($order['payment_ref']);
        
        if ($status->isConfirmed()) {
            // Mark as paid and fulfill
            updateOrder($order['id'], [
                'status' => 'paid',
                'paid_at' => date('Y-m-d H:i:s'),
            ]);
            fulfillOrder($order['id']);
            
        } elseif ($status->isFailed()) {
            // Mark as failed
            updateOrder($order['id'], [
                'status' => 'payment_failed',
            ]);
        }
        
    } catch (ApiException $e) {
        error_log("Status check failed: " . $e->getMessage());
    }
}
Ajoutez au crontab :
*/20 * * * * php /path/to/check_payments.php

Référence API

Classe OCPay

Point d’entrée principal du SDK.

Constructeur

public function __construct(
    string $accessToken,
    array $options = []
)
Paramètres :
  • $accessToken : Votre token d’accès API
  • $options : Configuration optionnelle du client Guzzle
    • timeout : Délai de la requête en secondes (défaut : 30)

Méthodes

createLink(CreateLinkRequest $request): CreateLinkResponse Crée un lien de paiement. checkPayment(string $paymentRef): CheckPaymentResponse Vérifie le statut d’un paiement.

Objets de Transfert de Données (DTOs)

ProductInfo

new ProductInfo(
    title: string,        // Product name (1-200 chars)
    amount: int,          // Amount in DZD (500 - 500,000)
    description?: string  // Optional (max 1000 chars)
)

CreateLinkRequest

new CreateLinkRequest(
    productInfo: ProductInfo,
    feeMode?: string,        // NO_FEE (default), SPLIT_FEE, CUSTOMER_FEE
    successMessage?: string, // Optional success message
    redirectUrl?: string     // Optional redirect URL
)
Constantes de mode de frais :
  • CreateLinkRequest::FEE_MODE_NO_FEE - Le marchand paie (défaut)
  • CreateLinkRequest::FEE_MODE_SPLIT_FEE - Partage 50/50
  • CreateLinkRequest::FEE_MODE_CUSTOMER_FEE - Le client paie

CreateLinkResponse

$response->paymentUrl     // URL to redirect customer
$response->paymentRef     // Payment reference (SAVE THIS!)
$response->paymentLink    // Full payment link object

CheckPaymentResponse

$response->status                // PaymentStatus enum
$response->message               // Status message
$response->paymentRef           // Payment reference
$response->transactionDetails   // Transaction details (if confirmed)

// Helper methods
$response->isConfirmed()        // true if payment confirmed
$response->isPending()          // true if still pending
$response->isFailed()           // true if failed

Gestion des exceptions

Toutes les exceptions héritent de OCPayException :
ExceptionCode HTTPDéclenchée quand
ValidationException400Données de requête invalides
UnauthorizedException403Clé API invalide
NotFoundException404Paiement introuvable
PaymentExpiredException410Lien expiré (>20 min)
ApiExceptionDiversAutres erreurs API
Toutes les exceptions fournissent :
try {
    $response = $ocpay->createLink($request);
} catch (ApiException $e) {
    echo $e->getMessage();       // Error message
    echo $e->getStatusCode();    // HTTP status code
    echo $e->getRequestId();     // Request ID for support
    var_dump($e->getErrorData()); // Full error data
}

Notes importantes

Validation du marchand requise

Complétez la validation du marchand sur app.oneclickdz.com avant d’utiliser l’API

Limites de montant

  • Minimum : 500 DZD
  • Maximum : 500 000 DZD
  • Doit être un nombre entier

Structure des frais

Frais réduits : 0% sur le solde, seulement 1% de frais de retrait

Expiration du lien de paiement

Les liens expirent 20 minutes après leur création si le paiement n’est pas initié.

Flux des statuts de paiement

  1. PENDING - Paiement en cours → Revérifier plus tard
  2. CONFIRMED - Paiement réussi → Honorer la commande
  3. FAILED - Paiement refusé/expiré → Marquer la commande comme échouée

Intégration Laravel

Pour les projets Laravel, consultez l’exemple d’intégration complet dans le dépôt GitHub. Inclut :
  • Configuration du service provider
  • Classe de service de paiement
  • Exemples de contrôleurs
  • Migrations de base de données
  • Tâche de fond pour la vérification
  • Gestion des erreurs

Tests

Utilisation du Sandbox

L’API utilise automatiquement le mode sandbox pour les comptes de test :
$response = $ocpay->createLink($request);

if ($response->paymentLink->isSandbox) {
    echo "This is a test payment\n";
}

Tests unitaires

composer install --dev
vendor/bin/phpunit

Meilleures pratiques

Stockez paymentRef immédiatement après la création du lien. Vous en aurez besoin pour vérifier le statut du paiement.
Configurez une tâche de fond pour vérifier le statut du paiement toutes les 20 minutes pour les commandes en attente.
Capturez et gérez tous les types d’exceptions de manière appropriée. Journalisez les erreurs pour le débogage.
Stockez les clés API dans des variables d’environnement, ne les committez jamais dans le contrôle de version.
Utilisez toujours HTTPS pour les URLs de redirection et les endpoints de votre application.

Support & Ressources

Dépôt GitHub

Code source, exemples et problèmes

Documentation API

Référence API détaillée

Exemple Laravel

Intégration Laravel complète

Contacter le support

Obtenez l’aide de notre équipe

Prochaines étapes

Meilleures pratiques Navio

Découvrez les conseils de production et les meilleures pratiques de sécurité