InvoiceNinja: gratis facturatie software

ICTscripters maakt gebruik van cookies. Door het gebruiken en browsen naar onze site gaat je automatisch akkoord met het gebruik van cookies. Klik hier voor meer informatie

  • Eindelijk!
    Dit bespaart me zo veel tijd, last en zorgen :D

    Lang geleden dat ik nog eens een WoW gevoel had bij iets saai als facturen.
    Voor diegenen die niet alles willen lezen, hier alvast een linkje:

    InvoiceNinja




    Het probleem:
    Ik gebruik al jaren een open source programma voor mijn facturatie, maar dit wordt niet meer onderhouden.

    Gevolg:
    - Verouderde en onveilige code
    - Bugs waardoor recurring invoices niet altijd worden aangemaakt
    - Geen API waardoor ik vanuit mijn php code geen facturen kan aanmaken
    - ...

    Nu ben ik al een 6-tal maanden facturatie software aan het bekijken en evalueren, maar niets was echt nét dat wat ik zocht.
    Ofwel was het super duur, ofwel had het geen simpele API, ofwel ontbraken er belangrijke functies.

    Nu heb ik een open source, gratis, facturatiepakket gevonden dat dit alles doet en zelfs meer!

    Functies
    - Recurring invoices
    - Klanten kunnen zelf inloggen en betalen (super veel betaalmethodes ondersteunt!)
    - Open source, dus eenvoudig aan te passen
    - Opvolgen van expenses voor klanten, welke je kan toevoegen aan een factuur
    - Offertes opmaken voor klanten en dit dan nadien automatisch laten omzetten in een factuur
    - Timer van taken, zodat je je tijd kan omzetten naar een factuur
    - Super eenvoudige API
    - Integratie in je eigen site
    - Gratis hosted oplossing
    - Nog veel veel meer.

    Zelf maak ik gebruik van hun hosted oplossing.
    Ik heb wel servers en ruimte genoeg, maar heb geen zin meer om dit zelf te onderhouden.
    Het gratis pakket is ruim voldoende, maar heb als dank toch die 50€/jaar er aan gegeven.
    Is het zeker waard!

    Aangezien ik wel wat tijd heb gestopt in de PHP InvoiceNinja API code, deel ik hierbij mijn codes:

    Maken van een nieuwe klant

    PHP Source Code: klantmaken.php

    1. <?php
    2. function sendRequest($url, $data, $type = 'POST')
    3. {
    4. $url = "https://app.invoiceninja.com/api/v1/" . $url;
    5. echo $url;
    6. $data = json_encode($data);
    7. echo $data;
    8. $curl = curl_init();
    9. $opts = [
    10. CURLOPT_URL => $url,
    11. CURLOPT_RETURNTRANSFER => true,
    12. CURLOPT_CUSTOMREQUEST => $type,
    13. CURLOPT_POST => $type === 'POST' ? 1 : 0,
    14. CURLOPT_POSTFIELDS => $data,
    15. CURLOPT_HTTPHEADER => [
    16. 'Content-Type: application/json',
    17. 'Content-Length: ' . strlen($data),
    18. 'X-Ninja-Token: REPLACE_WITH_YOUR_TOKEN', // Token I created in advanced settings
    19. ],
    20. ];
    21. curl_setopt_array($curl, $opts);
    22. $response = curl_exec($curl);
    23. curl_close($curl);
    24. echo $response;
    25. return json_decode($response);
    26. }
    27. $data = new stdClass;
    28. // Aanmaken nieuwe klant:
    29. $data->name='Tim Berk';
    30. $data->contact->email='[email protected]';
    31. $data->contact->first_name='Tim';
    32. $data->contact->last_name='Berk';
    33. $data->city='Stadsnaam';
    34. $data->postal_code='1234';
    35. $data->address1='Straat 123';
    36. $data->country_id='528'; //International country ID, see wikipedia
    37. sendRequest('clients', $data, "POST");
    38. ?>
    Laat alles zien

    Maar wat nog leuker is: je kan een klant met 1 call meteen aanmaken samen met een factuur.
    Hiervoor heb ik volgende code geschreven:


    PHP Source Code: klantenfactuur.php

    1. <?php
    2. function sendRequest($url, $data, $type = 'POST')
    3. {
    4. $url = "https://app.invoiceninja.com/api/v1/" . $url;
    5. echo $url;
    6. $data = json_encode($data);
    7. echo $data;
    8. $curl = curl_init();
    9. $opts = [
    10. CURLOPT_URL => $url,
    11. CURLOPT_RETURNTRANSFER => true,
    12. CURLOPT_CUSTOMREQUEST => $type,
    13. CURLOPT_POST => $type === 'POST' ? 1 : 0,
    14. CURLOPT_POSTFIELDS => $data,
    15. CURLOPT_HTTPHEADER => [
    16. 'Content-Type: application/json',
    17. 'Content-Length: ' . strlen($data),
    18. 'X-Ninja-Token: REPLACE_WITH_YOUR_TOKEN', // Token I created in advanced settings
    19. ],
    20. ];
    21. curl_setopt_array($curl, $opts);
    22. $response = curl_exec($curl);
    23. curl_close($curl);
    24. echo $response;
    25. return json_decode($response);
    26. }
    27. //Aanmaken factuur + klant
    28. $data = new stdClass;
    29. //$data->client_id=17; Kun je gebruiken als je een eerder gemaakte klant wil gebruiken om factuur aan te koppelen
    30. $data->name='Tim Berk';
    31. $data->email='[email protected]';
    32. $data->first_name='Tim';
    33. $data->last_name='Berk';
    34. $data->city='Stadsnaam';
    35. $data->postal_code='1234';
    36. $data->address1='Straat 123';
    37. $data->country_id='528'; //Will be added in the next release
    38. $data->invoice_items[0]->product_key="Volgehuisje";
    39. $data->invoice_items[0]->cost="2.5";
    40. $data->invoice_items[0]->notes="Witte kleur";
    41. $data->invoice_items[0]->qty="1";
    42. $data->tax_name="VAT / BTW";
    43. $data->tax_rate="21";
    44. $data->paid="3.03"; //Only set this if the user already paid the invoice
    45. sendRequest('invoices', $data, "POST");
    46. ?>
    Laat alles zien
    De code legt zichzelf eigenlijk uit.
    Het enige dat je dient te doen is een API token aanmaken in InvoiceNinja en dit vervolgens in te vullen op lijn 19.
    Vervolgens enkel onderaan de gegevens van je klant/factuur invullen.

    De API is super slim en zal zelf nieuwe producten/klanten aanmaken als ze nog niet bestaan - en anders ze updaten.

    De makers zijn heel vriendelijk en helpen super snel!

    Nog een laatste keer de link:
    InvoiceNinja

    Hopelijk besparen jullie even veel tijd en zorgen als mij!
    K.Rens
    ----------------------------------------------
    K.Rens
    Zaakvoerder DiMoWeb
    dimoweb.com

    3,370x gelezen

Reacties 3

  • K.Rens -

    @sjaakmans:
    Het is PHP en Mysql, dus vrij eenvoudig aan te passen als het toch niet volledig naar smaak zou zijn.

    Verder heb je heel wat opties om logo, font, text size, tekst zelf etc aan te passen en heb je de keuze uit wel wat style templates.

  • sjaakmans -

    Aangezien jij het al even gebruik heb ik een vraag. Is het gemakkelijk om je eigen factuur layout in te laden? Dat vind ik altijd belangrijk bij dat soort software.

  • FangorN -

    Ziet er goed uit, ook het schrijven van een soort van wrapper voor dit soort standaard acties is geen verkeerd idee. Wellicht wat verbeterpuntjes:
    - curl en HTTPS, moest je daarvoor niet nog extra dingen doen / instellen?
    - overweeg het schrijven van een wrapper, dus een class die om die functie(s) (methoden dus eigenlijk) heen staan, bij creatie van een object kun je je API token als argument teruggeven, zo wordt je code ook generieker en herbruikbaar
    - character encoderingen? ^^
    - overweeg het escapen van output als je data dumpt, ook zou je hier een soort van optie van kunnen maken: een verbose/debug flag ofzo, voor bij ontwikkeling om te zien waar het schip strandt
    - controleer ook de respons en throw evt een exception indien de uit te voeren actie mislukte (aanroepen in een try-catch blok dan uiteraard)

    Ik snap dat zo'n wrapper oplossing al snel maatwerk wordt ivm aansluiting op je eigen backoffice, maar heeft InvoiceNinja hier zelf geen client API (of een opzet) voor? Of is hun API zo simpel dat je zelf zoiets supersnel in elkaar fietst (gegeven jouw voorbeeld doet mij dit laatste vermoeden).

    EDIT: ik zie geen valuta-aanduiding (euro's, dollars etc.) in bovenstaand voorbeeld?