Aller au contenu principal

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.