# Gestion ZKTeco F22 — stockage JSON

Application PHP 8.2 destinée à communiquer avec un ZKTeco F22 et à stocker les données dans des fichiers JSON, sans MySQL.

## 1. Pré-requis

- PHP >= 8.2
- extension PHP `sockets`
- Composer
- accès réseau du serveur vers le F22 sur le port TCP/UDP 4370 selon la configuration du terminal
- F22 configuré avec l'adresse IP `185.96.159.48`

La bibliothèque utilisée est `coding-libs/zkteco-php`. Elle documente explicitement le F22, la plateforme `ZLM60_TFT`, `getUsers()` et `getAttendances()`.

## 2. Installation

Dans le dossier du projet :

```bash
composer install --no-dev
```

Puis vérifier que PHP possède les sockets :

```bash
php -m | grep sockets
```

Le serveur web doit pointer vers le dossier `public/` et non vers la racine du projet.

## 3. Premier test

Ouvrir :

```text
/public/
```

Puis cliquer sur « Synchroniser maintenant ».

Ou en ligne de commande :

```bash
php scripts/sync.php
```

Les données seront créées dans :

```text
data/device.json
data/users.json
data/attendance.json
data/sync.json
```

## 4. CRON

Exemple toutes les 5 minutes :

```cron
*/5 * * * * /usr/bin/php /chemin/absolu/scripts/sync.php >> /chemin/absolu/logs/cron.log 2>&1
```

## 5. Sécurité

Le F22 utilise ici une adresse IP publique. Il est fortement recommandé de limiter l'accès au port 4370 à l'IP du serveur qui exécutera l'application, via le routeur/firewall.

L'interface web fournie dans cette première version n'a pas encore d'authentification. Il faut donc la protéger par un accès HTTP (Basic Auth, VPN, IP allowlist ou authentification applicative) avant de l'exposer sur Internet.

Ne jamais rendre directement accessibles `config/`, `app/`, `data/` ou `logs/`. Les `.htaccess` fournis les bloquent pour Apache.

## 6. CMD Key

Si une « Communication Key / CMD Key » est configurée dans le F22, renseigner sa valeur dans :

```text
config/config.php
```

```php
'password' => 12345,
```

Sinon laisser :

```php
'password' => null,
```

## 7. Important

Cette version récupère les informations standard exposées par la bibliothèque : informations du terminal, utilisateurs et pointages.

Les empreintes biométriques ne sont volontairement pas sauvegardées dans cette première version JSON. Elles sont des données biométriques sensibles et leur export nécessite une décision explicite sur le besoin, le chiffrement, les droits d'accès et la conservation.

## 8. Dépannage

Si la connexion échoue :

1. tester la connectivité réseau depuis le serveur ;
2. vérifier l'IP du F22 ;
3. vérifier le port 4370 ;
4. vérifier le firewall/NAT ;
5. vérifier la CMD Key ;
6. consulter `logs/YYYY-MM-DD.jsonl`.

Pour tester le port TCP :

```bash
nc -vz 185.96.159.48 4370
```

Un résultat TCP ouvert ne garantit pas à lui seul que le protocole ZKTeco fonctionnera : il faut ensuite tester la commande applicative.
