API REST méthode PUT retourne erreur 400

Bonjour,

J’utilise l’API REST pour générer des commandes via la méthode POST : tout fonctionne bien.
J’aimerais désormais générer le document lié d’une commande : pour cela j’utilise la méthode PUT de /documents/builddoc
Si je teste via l’explorer de l’API, cela fonctionne bien. Si je teste depuis reqbin.com, cela fonctionne bien aussi.
Mais dès que je teste depuis mon site, nginx me retourne une erreur 400…
(J’ai vider le cache et les cookies de mon navigateur, fait un flushdns, …)

Voici mon code PHP :

$url = "https://ndd_de_mon_crm/api/index.php/documents/builddoc";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_PUT, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

$headers = array(
   "Content-Type: application/json",
   "Accept: application/json",
   "DOLAPIKEY: la_cle_qui_va_bien",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

$data = <<<DATA
{  
   "modulepart": "order",  
   "original_file": "CO2111-0009/CO2111-0009.pdf"  
 }
DATA;

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

$resp = curl_exec($curl);
curl_close($curl);

var_dump($resp);

Bonjour

Quel version de dolibarr ??

Sinon , le modulepart « commande » et non « order » de tete il me semble

Bonjour,

Version 14.0.1 et c’est bien le modulepart order

EDIT : effectivement, le modulepart peut être order ou commande

} elseif ($modulepart == 'commande' || $modulepart == 'order') {

Vous êtes sûr de cette syntaxe ?
A mon avis il vaudrait mieux utiliser json_encode

Autre chose :

Normalement réservé aux fichiers.

Vous devriez utiliser

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT")

Non pas vraiment, j’utilisais json_encode dans mon code perso.
Le code que j’ai posté est issu de reqbin.com (convertit une commande cURL en langage désiré)

Purée ! Une journée passée à me retourner le cerveau…

Merci beaucoup @ksar :pray:

1 « J'aime »