Documentation API REST

Je suis également en version 11.0.3.
L’explorer REST me donne le schéma suivant sur lequel je me suis basé entre autres:

{
« arrayofamounts »: [
« string »
],
« datepaye »: « string »,
« paiementid »: 0,
« closepaidinvoices »: « yes »,
« accountid »: 0,
« num_paiement »: « string »,
« comment »: « string »,
« chqemetteur »: « string »,
« chqbank »: « string »
}

En passant, par le plus grand des hasard, je me suis débloqué aujourd’hui.
Pour répondre à ta question, l’index 56 correspond à l’ID de la facture, il faut bien vérifier que le montant restant à payer n’est pas dépassé sinon on se fait refouler.
J’avais mal interprété le warning

Warning: Take care that all invoices are owned by the same customer. Example of value for parameter arrayofamounts: {« 1 »: « 99.99 », « 2 »: « 10 »}

Et en fait l’accountid est celui du compte bancaire sur lequel on exécute le paiment et non l’id du client.

1 « J'aime »

OK,
Mais c’est pour quelle requête ?
J’ai regardé invoices/{id}/payments en POST

C’est pour la requête : /invoices/paymentsdistributed
Le truc c’est qu’ayant parfois des acomptes sans régler la facture complète ou des règlements sur plusieurs factures, je préfère cet appel.
Que le invoices/{id}/payments règle la totalité de la facture.

Bonjour,

une très bonne chose dans la V.3.9 -- la REST API.
Par contre, aucune doc dessus ;( surtout sur les méthodes PUT.

Qqn aurait-il expériece avec REST API de Dolibarr? Je suis notamment intéressé par l’API /invoice/ – je n’arrive pas à ajouter des produits à une facture-brouillon via la méthode PUT…

Merci

Bonjour,

Je n’ai pas encore testé mais il y a un début de docs dans le README.md.

oui, on l’avait vu, mais elle n’est pas suffisante :unhappy:

Petit up’ sur le sujet…

Je suis en effet en train de m’intéresser de près à l’API REST (plutôt que SOAP), mais le manque de documentation est bloquant. A savoir que je cherche à faire 4 « types » de requêtes sur l’API :

  • Créer des clients (privés, pas société)
  • Créer des factures pour ces clients
    [li]Créer les paiements pour ces factures[/ii]
  • Accéder aux PDF des factures

J’ai réussi à créer des brouillons d’éléments (j’ai essayé factures et clients). En revanche, trouver la correspondances et la liste des champs à inclure dans la requête relève vraiment de la chance.

Est-ce qu’il existe une liste des champs disponibles/obligatoires à inclure dans chaque requête ? Même dans le code, pas nécessairement un PDF tout beau…

Ensuite, sauf erreur de ma part, il n’y a pas d’API prévue pour retourner le PDF d’une facture ? Je peux y accéder autrement, mais d’une façon pas très propre que je préfèrerais éviter.

Bonsoir,

L’api « passe » par les classes pour créer/récupérer les données. Il suffit donc de regarder la classe correspondant au besoin.
Par exemple, pour les clients, il faut regarder la classe societe.class.php. Pour créer un tiers de type Particulier, il faut passer le paramètre typent_id avec une valeur 8.

Effectivement, la récupération des PDF n’est pas prévu (pour le moment ?)

Merci pour l’info, je vais creuser de ce côté.

J’avais d’abord pensé à me baser sur la doc de l’API SOAP pour en déduire la liste des champs de l’API REST. J’ai donc fait quelques tests, notamment pour la création d’un client. Pour lui assigner un pays (France, en l’occurence), je n’ai eu d’autres choix que de préciser le « country_id » à 1. Ni le pays en texte complet (France), ni le country_code (FR ou même FRA) n’ont été pris en compte. Est-ce vraiment la seule solution ? J’avoue que devoir utiliser les « IDs » directement est assez bizarre. D’autant que le country_code est présent dans la DB.


Edit : La création d’une facture est également mystérieuse. En spécifiant « lines » (sous forme d’array, dont chaque valeur est un objet reprenant les élément de lignes décrits dans facture.class.php tels que description, subprice, qty, …) une erreur SQL est retournée. Les logs m’indiquent que l’API comprend bien qu’il y a un array « lines », mais n’en extrait aucune des valeurs spécifiées.

Je suis aussi en train d’utiliser l’api REST pour un projet.
Pas le choix, il faut utiliser les Id. Par exemple pour le statut d’une facture il faudra utiliser 0 pour Draft, 1 pour Not Paid et 2 pour Paid.
Comme l’a conseillé tuxgasy, je n’ai pas trouvé d’autre solution que d’analyser le code source pour déterminer les champs a remplir ainsi que la valeur attendu. Il faut aussi comparer les lignes en base avec celle qui sont créées par le site web.

Pour ce qui est du problème que tu as (erreur SQL), il y a un petit bug dans le code source de l’api. Pour le corriger, il faut modifier le fichier « dolibarr/htdocs/compta/facture/class/facture.class.php » et remplacer de la ligne 428 à 456 par :

 $result = $this->addline($this->lines[$i]["desc"],
                                             $this->lines[$i]["subprice"],
                                             $this->lines[$i]["qty"],
                                             $this->lines[$i]["tva_tx"],
                                             $this->lines[$i]["localtax1_tx"],
                                             $this->lines[$i]["localtax2_tx"],
                                             $this->lines[$i]["fk_product"],
                                             $this->lines[$i]["remise_percent"],
                                             $this->lines[$i]["date_start"],
                                             $this->lines[$i]["date_end"],
                                             $this->lines[$i]["fk_code_ventilation"],
                                             $this->lines[$i]["info_bits"],
                                             $this->lines[$i]["fk_remise_except"],
                                             'HT',
                                             0,
                                             $this->lines[$i]["product_type"],
                                             $this->lines[$i]["rang"],
                                             $this->lines[$i]["special_code"],
                                             $this->element,
                                             $this->lines[$i]["id"],
                                             $fk_parent_line,
                                             $this->lines[$i]["fk_fournprice"],
                                             $this->lines[$i]["pa_ht"],
                                             $this->lines[$i]["label"],
                                             $this->lines[$i]["array_options"],
                                             $this->lines[$i]["situation_percent"],
                                             $this->lines[$i]["fk_prev_id"],
                                             $this->lines[$i]["fk_unit"]

Hum désolé de relancer le sujet mais après avoir fouillé un peu partout dans le code j’ai remarqué que la plupart des infos sont dans les fichiers htdocs/<nomDuModule>/class/api_<nomDuModule>.class.php

On y trouve les différentes URI avec les verbes utilisables et le retour reçu.

Je ne pense pas être le premier à déceler ça, mais si j’ai le temps ce week-end je peux essayer de compléter la doc de l’api.

Bonjour,

Je viens de passer ma journée sur le code de l’api REST. pour créer des factures, j’ai du modifier un peu le code.
Principalement sur 2 fichiers
dolibarr-3.9.3/htdocs/compta/facture/class/api_invoice.class.php et facture.class.php

sur le premier j’ai du modifier la fonction en gras de l’api_invoice.php.
function post($request_data = NULL)
{
if(! DolibarrApiAccess::$user->rights->facture->creer) {
throw new RestException(401);
}
// Check mandatory fields
$result = $this->_validate($request_data);

// Init date
if(! array_keys($request_data,‹ date ›)) {
$this->invoice->date = dol_now();
}
foreach($request_data as $field => $value) {
if ($field == ‹ lines ›) {
for($i=0; $i<count($value);$i++) {
$lineInvoice = new FactureLigne($this->db);
foreach($value[$i] as $fieldLine => $valueLine) {
$lineInvoice->$fieldLine = $valueLine;
}
$value[$i] = $lineInvoice;
}
}
$this->invoice->$field = $value;
}

if( ! $this->invoice->create(DolibarrApiAccess::$user)) {
throw new RestException(500);
}
return $this->invoice->id;
}

L’explication : sur le fichier facture.class.php ligne 380, au départ je poussais un tableau de lines, sauf que l.424 on appelle pas les lignes par son index mais comme si il s’agissait d’un object type StdClass. Pour éviter de modifier ce fichier, j’ai donc converti mes lignes en FactureLigne pour que la l.424 soit prise en compte.

/*
* Insert lines of invoices into database
*/
if (count($this->lines) && is_object($this->lines[0])) // If this->lines is array on InvoiceLines (preferred mode)
{

J’ai également modifié quelques lignes dans la fonction create de facture.class.php pour mettre ma propre référence (utile quand on veut insérer des factures déjà existantes) et modifier les dates de création et de facturation.

Voici un exemple de facture à pousser dans votre API REST.

$invoice = [
‹ type › => 0, ‹ socid › => $socId, ‹ ref › => $ref,
‹ date › => $date, ‹ date_creation › => $dateCreation, ‹ date_lim_reglement › => $dateLimReglement,
‹ cond_reglement_code › => ‹ RECEP ›, ‹ mode_reglement_code › => ‹ VIR ›,
‹ cond_reglement_id › => 1, ‹ mode_reglement_id › => 2,
‹ product_type › => 1,
‹ lines › => [
[
‹ info_bits › => 0,
‹ product_type › => 1,
‹ desc › => $desc, ‹ qty › => 1, ‹ tva_tx › => $tvaTx, ‹ remise_percent › => 0,
‹ subprice › => $subprice,
‹ total_ht › => $totalHt,
‹ total_tva › => $totalTva,
‹ total_ttc › => $totalTtc
]
]
];

L’API n’est pas encore finalisée, en effet on s’attendrait à ajouter des lignes sur une facture existante. Visiblement le code ne le permet pas.

En tout cas c’est une bonne avancé pour Dolibarr. L’API est jeune mais prometteuse.

Voilà si cela peut faire avancer le projet …

Hum sinon la mise à jour vers la 4.0 de dolibarr apporte des informations supplémentaire pour l’API REST (notamment les verbes http à utiliser avec les différentes URI )

Visibles dans la configuration du module API REST :wink:

Bonjour,

J’essaie péniblement d’utiliser l’API REST pour créer automatiquement des tiers et des factures. J’ai presque réussi (je compte faire une petite doc pour ceux qui comme moi rament bien à essayer de tout comprendre…)
Petite question, quand je crée un tiers, il n’a pas de n° de client automatique. c’est possible ? Il faut faire quelque chose de particulier ?

Chag

Bon, j’ai trouvé en regardant le code. Il suffit de passer « code_client » => « -1 »

bonjour
pour un besoin de client il faut que j’ai utilise une api au signe de dolibarr comment je peut faire ?
api est deja existante
merci beaucoup

Bonjour,

N’hésitez pas à nous donner plus d’information sur votre installation de Dolibarr :

-------------------------------------------------------------------------------------
DOLIBARR 
- Version: 			
- Système d'exploitation et version : 		
- Serveur Web et version : 			
- Version de PHP : 				
- Base de donnée et version : 			
-------------------------------------------------------------------------------------

Et un peu de lecture sur le wiki de Dolibarr par exemple :

Module Web Services REST (développeur)

Amicalement,
Gaëtan.

DOLIBARR
- Version: Dolibarr 10.0.0-alpha
- Système d’exploitation et version : macos
- Serveur Web et version : mamp 4.4.1
- Version de PHP : 7.2.1
- Base de donnée et version : mysql 5.6.38
merci beaucoup

@souf,

Wow, tu installes une version alpha instable chez un client ?!

bonjour @ARRE
merci pour votre réponse
pas chez le client mais seulement en locale
je suis débutant sur dolibarr
est ce que vous pouvez m’aider s’il vous plait
il faut que installé la version 9.0 j’ai bien compris cette erreur
et pour utiliser un api au sien de dolibarr comment je peux faire
merci beaucoup pour votre temps