[RESOLU] Récupérer un fichier renvoyé par API

Petit nouveau ! | 2 Messages

04 févr. 2025, 11:09

Bonjour à tous,

Je cherche à récupérer un fichier PDF renvoyé par une API (méthode GET) afin de l'envoyer en pièce attachée par mail via la fonction mail() de php.

Voici les instructions pour appeler cette API:
GET https://url/demo/api/documents.php?m=devis

Le header 'Content-Disposition' renvoyé est 'attachment'.

Mon code pour récupérer le fichier en php est le suivant:

Code : Tout sélectionner

function devis($api_key) { $fun = "documents.php?m=devis"; function devis($api_key) { $fun = "documents.php?m=devis"; $fun .= "&key=".$api_key; $datas = getRequest($fun); var_dump($datas); } function getRequest($fun) { $ch = curl_init(); $ch = curl_init(); $url = "https://url/axam/api/".$fun; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $ret = curl_exec($ch); curl_close($ch); return(json_decode($ret)); }
Le but est de pouvoir récupérer ce fichier pour pouvoir l'envoyer aussitôt par mail en pièce attaché via la fontion php mail.

mail( $to, $subject, $message, $headers );

Avez-vous une idée de comment je pourrais m'y prendre ?

Merci :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 févr. 2025, 18:32

Hello,

Si tu n'as pas de contraintes autres qu'une requête GET avec des paramètres dans l'url, le plus simple plutôt que d'utiliser Curl est d'utiliser la fonction file_get_contents()
Et ensuite pour l'enregistrer dans un fichier son jumeau : file_put_contents()
$url_api = 'https://url/demo/api/documents.php?m=devis&key='.$api_key;
$nom_fichier = 'devis_'.uniqid().'.pdf'; // Nom du fichier avec uniqid() pour être sûr de ne pas écraser un fichier existant

// On récupère le fichier
$data_api = file_get_contents($url_api);

// On stocke le fichier sur le disque
file_put_contents($nom_fichier, $data_api);
Je te l'ai fait à la volée sans tester, mais ça te donne l'idée pour gérer la récupération du fichier sur ton serveur.

Ensuite pour l'envoi en pièce jointe, le plus simple et le plus robuste pour être qûr que ça fonctionne avec toutes les boites mails sans risquer d'être pris pour du spam est d'utiliser une librairie au lieu de la fonction mail() de PHP. La librairie la plus robuste et la plus connue est PHPMailer :
https://github.com/PHPMailer/PHPMailer
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

04 févr. 2025, 20:00

Super merci beaucoup Arthur, ça fonctionne !