# ADR-003 — Découverte IP outbound PHP via ipify.org pour les clés Google API
*Date : 2026-05-12 — Session 1*
*Statut : Accepté*

## Contexte
Après activation du support Côte d'Ivoire (commit b12b0e7) et configuration d'une clé Google Geocoding API avec restriction par IP, les 18 villes ivoiriennes retournaient systématiquement `REQUEST_DENIED`. La clé était configurée avec l'IP affichée dans le panel OVH (5.135.23.164 — IP entrante principale du serveur).

## Constat
Sur hébergement mutualisé OVH cPanel, l'IP utilisée par PHP pour les requêtes HTTP sortantes (`wp_remote_get`, `file_get_contents`) est différente de l'IP principale du serveur. Seul un test PHP depuis WordPress permet de la découvrir :

```php
echo file_get_contents('https://api.ipify.org');
// Résultat : 54.36.142.130 (IP outbound OVH)
// Panel OVH montrait : 5.135.23.164 (IP entrante)
```

La restriction IP configurée dans Google Cloud Console bloquait donc toutes les requêtes PHP/WordPress.

## Décision
**Pattern à appliquer systématiquement** avant de configurer une restriction IP sur une clé Google API (ou toute API avec restriction IP) en contexte WordPress/PHP mutualisé :
1. Créer un fichier PHP temporaire dans `wp-content/` contenant `echo file_get_contents('https://api.ipify.org');`
2. Ouvrir l'URL dans le navigateur pour voir l'IP outbound réelle de WordPress
3. Configurer cette IP dans Google Cloud Console (pas l'IP du panel hébergeur)
4. Supprimer le fichier temporaire

L'IP outbound PHP (`54.36.142.130`) est également distincte de l'IP du navigateur utilisateur (IPv6 personnelle) — tester l'URL Google Geocoding directement depuis le navigateur donne toujours `REQUEST_DENIED` car l'IP IPv6 personnelle n'est pas autorisée. Le test correct se fait depuis l'interface admin WordPress (bouton "Vérifier les villes").

## Alternatives écartées
| Alternative | Raison de l'abandon |
|-------------|---------------------|
| Restriction par référent HTTP plutôt que par IP | Ne fonctionne pas pour les appels server-side PHP (pas de referrer header) |
| Clé sans restriction IP | Risque de vol et d'abus de quota — à éviter en production |
| IP range OVH (`54.36.0.0/14`) | Trop large — partage le quota avec d'autres clients OVH |

## Conséquences
**Positives :** Géocodage Côte d'Ivoire 100% fonctionnel (18/18 villes après correction). Pattern documenté et réutilisable pour tous les sites déployés sur OVH mutualisé.

**Négatives :** Si OVH change l'IP outbound (rare mais possible lors d'une migration infra), la clé Google API cesse de fonctionner silencieusement. Surveiller via les alertes Google Cloud Console.

**Irréversibilité :** Faible — il suffit de mettre à jour l'IP dans Google Cloud Console.

## Note OVH
- IP entrante (panel OVH, Hébergement > Informations générales) : `5.135.23.164`
- IP outbound PHP (réelle) : `54.36.142.130`
- IPv6 serveur : `2001:41d0:301::100`
