First commit
This commit is contained in:
212
examples/php-integration.php
Normal file
212
examples/php-integration.php
Normal file
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
/**
|
||||
* Exemple d'intégration PHP avec l'API Cheque Scanner
|
||||
*
|
||||
* Ce script démontre comment :
|
||||
* 1. Envoyer une image de chèque à l'API
|
||||
* 2. Vérifier périodiquement l'état du traitement
|
||||
* 3. Récupérer les résultats une fois le traitement terminé
|
||||
*/
|
||||
|
||||
// Configuration de l'API
|
||||
$api_url = 'http://localhost:8000/api/v1'; // URL de l'API
|
||||
$api_key = 'your-secret-api-key-change-me'; // Clé API (doit correspondre à celle définie dans .env)
|
||||
|
||||
/**
|
||||
* Envoie une image de chèque à l'API et récupère l'ID de la tâche
|
||||
*
|
||||
* @param string $imagePath Chemin local vers l'image à envoyer
|
||||
* @param bool $priority Définir à true pour un traitement prioritaire
|
||||
* @return string L'identifiant de la tâche créée
|
||||
* @throws Exception En cas d'erreur
|
||||
*/
|
||||
function uploadChequeImage($imagePath, $priority = false) {
|
||||
global $api_url, $api_key;
|
||||
|
||||
// Vérifier que le fichier existe
|
||||
if (!file_exists($imagePath)) {
|
||||
throw new Exception("Le fichier n'existe pas: " . $imagePath);
|
||||
}
|
||||
|
||||
// Préparer la requête
|
||||
$curl = curl_init();
|
||||
$postFields = [
|
||||
'file' => new CURLFile($imagePath),
|
||||
'priority' => $priority ? 'true' : 'false'
|
||||
];
|
||||
|
||||
curl_setopt_array($curl, [
|
||||
CURLOPT_URL => $api_url . '/upload',
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_POSTFIELDS => $postFields,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
'X-API-Key: ' . $api_key
|
||||
]
|
||||
]);
|
||||
|
||||
// Exécuter la requête
|
||||
$response = curl_exec($curl);
|
||||
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
curl_close($curl);
|
||||
|
||||
// Vérifier la réponse
|
||||
if ($status != 202) {
|
||||
throw new Exception("Erreur lors de l'upload: " . $response);
|
||||
}
|
||||
|
||||
// Décoder la réponse JSON
|
||||
$result = json_decode($response, true);
|
||||
|
||||
if (!isset($result['job_id'])) {
|
||||
throw new Exception("Réponse invalide de l'API: " . $response);
|
||||
}
|
||||
|
||||
return $result['job_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie l'état de traitement d'une tâche
|
||||
*
|
||||
* @param string $jobId Identifiant de la tâche
|
||||
* @return array Informations sur l'état de la tâche
|
||||
* @throws Exception En cas d'erreur
|
||||
*/
|
||||
function checkJobStatus($jobId) {
|
||||
global $api_url, $api_key;
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt_array($curl, [
|
||||
CURLOPT_URL => $api_url . '/status/' . $jobId,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
'X-API-Key: ' . $api_key
|
||||
]
|
||||
]);
|
||||
|
||||
$response = curl_exec($curl);
|
||||
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
curl_close($curl);
|
||||
|
||||
if ($status != 200) {
|
||||
throw new Exception("Erreur lors de la vérification du statut: " . $response);
|
||||
}
|
||||
|
||||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère les résultats d'une tâche terminée
|
||||
*
|
||||
* @param string $jobId Identifiant de la tâche
|
||||
* @return array Résultats de l'extraction
|
||||
* @throws Exception En cas d'erreur
|
||||
*/
|
||||
function getJobResult($jobId) {
|
||||
global $api_url, $api_key;
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt_array($curl, [
|
||||
CURLOPT_URL => $api_url . '/result/' . $jobId,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
'X-API-Key: ' . $api_key
|
||||
]
|
||||
]);
|
||||
|
||||
$response = curl_exec($curl);
|
||||
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
curl_close($curl);
|
||||
|
||||
if ($status != 200) {
|
||||
throw new Exception("Erreur lors de la récupération des résultats: " . $response);
|
||||
}
|
||||
|
||||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attend que le traitement d'une tâche soit terminé
|
||||
*
|
||||
* @param string $jobId Identifiant de la tâche
|
||||
* @param int $maxWaitTime Temps d'attente maximum en secondes
|
||||
* @param int $pollInterval Intervalle de vérification en secondes
|
||||
* @return array État final de la tâche
|
||||
* @throws Exception Si le temps d'attente est dépassé ou en cas d'erreur
|
||||
*/
|
||||
function waitForJobCompletion($jobId, $maxWaitTime = 300, $pollInterval = 2) {
|
||||
$startTime = time();
|
||||
$status = ['status' => 'pending'];
|
||||
|
||||
while (($status['status'] == 'pending' || $status['status'] == 'processing') &&
|
||||
(time() - $startTime < $maxWaitTime)) {
|
||||
|
||||
// Attendre avant de vérifier à nouveau
|
||||
sleep($pollInterval);
|
||||
|
||||
// Vérifier l'état
|
||||
$status = checkJobStatus($jobId);
|
||||
|
||||
// Afficher la progression
|
||||
if (isset($status['progress'])) {
|
||||
echo "Progression: " . $status['progress'] . "% - " . $status['message'] . "\n";
|
||||
} else {
|
||||
echo "État: " . $status['status'] . " - " . $status['message'] . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($status['status'] != 'completed' && $status['status'] != 'failed') {
|
||||
throw new Exception("Délai d'attente dépassé pour la tâche " . $jobId);
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
// Exemple d'utilisation
|
||||
try {
|
||||
// Chemin de l'image à traiter
|
||||
$imagePath = '/home/alex/Téléchargements/pymupdf/test_qheque-PXL_2025.jpg';
|
||||
|
||||
echo "=== EXTRACTION D'INFORMATIONS DE CHÈQUE ===\n";
|
||||
|
||||
// 1. Envoyer l'image
|
||||
echo "Envoi de l'image: " . $imagePath . "\n";
|
||||
$jobId = uploadChequeImage($imagePath, true); // true pour un traitement prioritaire
|
||||
echo "Image envoyée, ID de la tâche: " . $jobId . "\n\n";
|
||||
|
||||
// 2. Attendre la fin du traitement
|
||||
echo "Attente du traitement...\n";
|
||||
$finalStatus = waitForJobCompletion($jobId);
|
||||
|
||||
// 3. Si le traitement est terminé avec succès, récupérer les résultats
|
||||
if ($finalStatus['status'] == 'completed') {
|
||||
echo "\nTraitement terminé avec succès!\n";
|
||||
|
||||
// Récupérer les résultats détaillés
|
||||
$results = getJobResult($jobId);
|
||||
|
||||
echo "\n=== RÉSULTATS DE L'EXTRACTION ===\n";
|
||||
if (isset($results['result'])) {
|
||||
echo "Montant: " . ($results['result']['montant'] ?? 'Non détecté') . "\n";
|
||||
echo "Date: " . ($results['result']['date'] ?? 'Non détectée') . "\n";
|
||||
echo "Bénéficiaire: " . ($results['result']['beneficiaire'] ?? 'Non détecté') . "\n";
|
||||
echo "Numéro de chèque: " . ($results['result']['numero_cheque'] ?? 'Non détecté') . "\n";
|
||||
echo "Qualité de l'extraction: " . ($results['result']['qualite_extraction'] ?? 'Inconnue') . "\n";
|
||||
|
||||
if (isset($results['result']['image_zones'])) {
|
||||
echo "Image avec zones identifiées: " . $results['result']['image_zones'] . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo "\nMéthode utilisée: " . $results['methode'] . "\n";
|
||||
|
||||
if (isset($results['texte_brut']) && !empty($results['texte_brut'])) {
|
||||
echo "\n=== TEXTE BRUT EXTRAIT ===\n";
|
||||
echo $results['texte_brut'] . "\n";
|
||||
}
|
||||
} else {
|
||||
echo "\nÉchec du traitement: " . ($results['erreur'] ?? 'Erreur inconnue') . "\n";
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
echo "ERREUR: " . $e->getMessage() . "\n";
|
||||
}
|
||||
Reference in New Issue
Block a user