# TRAIL DPS 4.2 - LOT 5 HOTFIX - expiration lien coureur + debug SMS OVH

## Objectif

Ce correctif débloque deux points détectés après déploiement du LOT 5 :

1. Les liens coureur apparaissaient expirés immédiatement ou trop tôt.
2. Les erreurs OVH SMS 403 ne retournaient pas le message OVH détaillé.

## Fichiers modifiés

- `ovh/SRC/Tracking/RunnerLocationRepository.php`
- `ovh/SRC/Tracking/SmsService.php`
- `ovh/public/api/tracking/create_runner_location_request.php`

## Correctifs

### Expiration lien coureur

`expires_at` est généré en UTC via `gmdate()`.
Le test d'expiration parse désormais explicitement cette date en UTC avec `DateTimeImmutable` + `DateTimeZone('UTC')`.
Cela évite qu'un serveur PHP en timezone Europe/Paris considère un lien UTC comme déjà expiré.

### SMS OVH

- Le corps OVH SMS est rendu plus explicite : `charset`, `coding`, `senderForResponse`, `noStopClause`.
- `sender` devient optionnel : si la valeur est vide dans `env.php`, le champ n'est pas envoyé.
- Les erreurs HTTP OVH ajoutent le message brut retourné par OVH dans `error_message`.

## Configuration conseillée pour debug SMS

Dans `ovh/tracking_config/env.php`, tester d'abord avec :

```php
'sms' => [
    'provider' => 'ovh',
    'sender' => '',
    'runner_location_message_template' => 'TRAIL DPS - {event_name} : merci de partager votre position ici {url}',
    'ovh_endpoint' => 'https://eu.api.ovh.com/1.0',
    'ovh_application_key' => '...',
    'ovh_application_secret' => '...',
    'ovh_consumer_key' => '...',
    'ovh_service_name' => 'sms-jr172511-1',
    'sender_for_response' => false,
    'no_stop_clause' => true,
],
```

Une fois l'envoi fonctionnel, remettre éventuellement :

```php
'sender' => 'TRAILDPS',
```

uniquement si l'expéditeur est validé dans OVH.

## Droits OVH à vérifier

La Consumer Key doit autoriser notamment :

- `GET /sms`
- `GET /sms/*`
- `POST /sms/*`
- idéalement `POST /sms/*/jobs`

Si l'erreur est `This call has not been granted`, recréer une Consumer Key avec ces droits.

## Tests

1. Créer une demande coureur.
2. Vérifier que la réponse ne contient plus le warning LOT 5 obsolète.
3. Ouvrir immédiatement `location_url` sur téléphone.
4. La page doit afficher le bouton de partage GPS, pas le message d'expiration.
5. Si SMS OVH échoue encore, lire `sms.error_message`, qui doit maintenant contenir le détail OVH.
