SDK PHP
Pas encore publié
Le SDK PHP existe en code source mais n'est pas encore publié sur Packagist. Il n'est donc pas installable via composer require aujourd'hui. Le code ci-dessous documente l'API telle qu'elle sera une fois le SDK publié — en attendant, utilisez l'API publique directement en HTTP (voir l'exemple Laravel avec Guzzle).
Installation (à venir)
composer require moncreneau/moncreneau-php
Configuration
<?php
require_once 'vendor/autoload.php';
use Moncreneau\Moncreneau;
$client = new Moncreneau('YOUR_API_KEY');
Avec options :
<?php
use Moncreneau\Moncreneau;
$client = new Moncreneau('YOUR_API_KEY', [
'baseUrl' => 'https://mc-prd.duckdns.org/api/v1',
'timeout' => 30,
]);
Lister les départements
<?php
require_once 'vendor/autoload.php';
use Moncreneau\Moncreneau;
$client = new Moncreneau('YOUR_API_KEY');
try {
$departments = $client->departments->list();
foreach ($departments as $dept) {
echo sprintf("ID: %d - %s\n", $dept['id'], $dept['name']);
}
} catch (Exception $e) {
echo "Erreur: " . $e->getMessage() . "\n";
}
Créer un rendez-vous
<?php
require_once 'vendor/autoload.php';
use Moncreneau\Moncreneau;
use Moncreneau\Exceptions\MoncreneauException;
$client = new Moncreneau('YOUR_API_KEY');
try {
$appointment = $client->appointments->create([
'departmentId' => 5,
'dateTime' => '2026-02-15T10:00:00',
'name' => 'Amadou Diallo'
]);
echo "✅ Rendez-vous créé!\n";
echo "ID: {$appointment['id']}\n";
echo "QR Code: {$appointment['qrCode']}\n";
} catch (MoncreneauException $e) {
if ($e->getErrorCode() === 'INSUFFICIENT_CREDITS') {
echo "❌ Crédits insuffisants: {$e->getMessage()}\n";
} else {
echo "❌ Erreur: {$e->getMessage()}\n";
}
}
Vérifier la disponibilité d'un créneau
Le backend vérifie un créneau précis (dateTime), pas une plage de dates.
<?php
use Moncreneau\Moncreneau;
$client = new Moncreneau('YOUR_API_KEY');
$availability = $client->departments->getAvailability('5', '2026-02-15T10:00:00');
if ($availability['available']) {
echo "✅ Créneau disponible! Places restantes: {$availability['remainingSlots']}\n";
} else {
echo "❌ Créneau indisponible: {$availability['unavailabilityReason']}\n";
}
Annuler un rendez-vous
<?php
use Moncreneau\Moncreneau;
$client = new Moncreneau('YOUR_API_KEY');
$client->appointments->cancel('123');
echo "✅ Rendez-vous annulé, 1 crédit remboursé\n";
Intégration Laravel
<?php
// app/Providers/MoncreneauServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Moncreneau\Moncreneau;
class MoncreneauServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(Moncreneau::class, function ($app) {
return new Moncreneau(config('services.moncreneau.key'));
});
}
}
<?php
// app/Http/Controllers/AppointmentController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Moncreneau\Moncreneau;
use Moncreneau\Exceptions\MoncreneauException;
class AppointmentController extends Controller
{
public function __construct(private Moncreneau $moncreneau) {}
public function store(Request $request)
{
$validated = $request->validate([
'department_id' => 'required|integer',
'date_time' => 'required|date_format:Y-m-d\TH:i:s',
'name' => 'required|string',
]);
try {
$appointment = $this->moncreneau->appointments->create([
'departmentId' => $validated['department_id'],
'dateTime' => $validated['date_time'],
'name' => $validated['name'],
]);
return response()->json($appointment, 201);
} catch (MoncreneauException $e) {
$status = $e->getErrorCode() === 'INSUFFICIENT_CREDITS' ? 402 : $e->getStatusCode();
return response()->json(['error' => $e->getMessage()], $status);
}
}
}
Gestion des erreurs
Il n'existe qu'une seule classe d'exception, Moncreneau\Exceptions\MoncreneauException — le code métier se distingue via getErrorCode() :
<?php
use Moncreneau\Moncreneau;
use Moncreneau\Exceptions\MoncreneauException;
$client = new Moncreneau('YOUR_API_KEY');
try {
$appointment = $client->appointments->create($data);
} catch (MoncreneauException $e) {
switch ($e->getErrorCode()) {
case 'INSUFFICIENT_CREDITS':
echo "Crédits insuffisants: {$e->getMessage()}\n";
break;
case 'VALIDATION_ERROR':
echo "Validation: " . json_encode($e->getDetails()) . "\n";
break;
case 'INVALID_API_KEY':
echo "Clé API invalide\n";
break;
default:
echo "Erreur {$e->getErrorCode()} (HTTP {$e->getStatusCode()}): {$e->getMessage()}\n";
}
}
Vérification des webhooks
verifyWebhookSignature est une méthode statique sur la classe Moncreneau, pas une méthode d'instance :
<?php
use Moncreneau\Moncreneau;
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_MONCRENEAU_SIGNATURE'];
if (!Moncreneau::verifyWebhookSignature($payload, $signature, $_ENV['WEBHOOK_SECRET'])) {
http_response_code(401);
die('Invalid signature');
}
$event = json_decode($payload);
error_log("Event: " . $_SERVER['HTTP_X_MONCRENEAU_EVENT']);
http_response_code(200);
echo json_encode(['received' => true]);
Voir Sécurité des webhooks pour le détail du format de signature.