Exemple json folosite in mesaje API
Pentru mesajele de mai jos am folosit interogari directe curl din bash dar acestea se pot integra in mod similar si cu schimbari minime si in php.
Cuprins:
- Interogare lista gestiuni
- Import comenzi clienti
- Citirea facturilor si extragerea atasamentelor (pdf)
Mesaj interogare lista gestiuni:
api_key="$(echo 123456789123456789: | base64)"
ip=192.168.1.1
port=12345
curl -X POST --header "Authorization: Basic $api_key" --header \
"Content-Type: application/json" --header "charset=UTF-8" http://$ip:$port/api/v1/read/gestiuni -d "{}"
La un mesaj de acest fel vom primi un raspuns ca cel de mai jos:
{"isError":false,"message":"OK","result":"[{\"id_intern\":\"1(1)\",\"id_extern\":\"0\",\"nume\":\"Demo\",\"gestionar\":\"Demo\",\"adresa\":\"\",\"id_centru_profit\":\"3(1)\",\"id_partener\":\"0(0)\",\"id_adresa\":\"0(0)\",\"met_desc\":\"La sold \",\"cont_cash\":\" \",\"cont_card\":\" \",\"cont_tic\":\" \",\"cont_cec\":\" \",\"aninactiv\":2019,\"id_salariat\":\"0(0)\",\"valoric\":false,\"data_creare\":\"2007-11-02T10:53:24.653\",\"user_creare\":\"admin\",\"data_modificare\":\"2019-09-14T14:26:29.510\",\"user_modificare\":\"admin\"},{\"id_intern\":\"2(1)\",\"id_extern\":\"0\",\"nume\":\"Demo\",\"gestionar\":\"Demo\",\"adresa\":\"Demo\",\"id_centru_profit\":\"1(1)\",\"id_partener\":\"5785(1)\",\"id_adresa\":\"13(1)\",\"met_desc\":\"La sold \",\"cont_cash\":\"5311.01. . . \",\"cont_card\":\"5125.01. . . \",\"cont_tic\":\"5328. . . . \",\"cont_cec\":\" \",\"aninactiv\":0,\"id_salariat\":\"1(1)\",\"valoric\":false,\"data_creare\":\"2007-11-02T10:57:14.437\",\"user_creare\":\"admin\",\"data_modificare\":\"2019-06-21T17:57:52.217\",\"user_modificare\":\"admin\"}]"}
Mesaj adaugare comanda client:
#!/bin/bash
#Am salvat credentialele intr-un fisier separat pentru a putea lucra mai usor si le incarcam mai jos.
source api.key
#Convertim cheia concatenata semnul doua puncte intr-o variabila.
api_key="$(echo $cheie: | base64)"
#Rulam interogarea folosind pentru parametri continutul unui fisier.
curl -X POST --header "Authorization: Basic $api_key" --header "Content-Type: \
application/json" --header "charset=UTF-8" \
http://$ip:$port/api/v1/import/comenzi_clienti -d @import_comenzi_clienti.json
Continutul fisierului import_comenzi_clienti.json
{
"parametri": {
"id_extern_comanda": null,
"keep_data_on_err": false,
"single_tran": true,
"id_linie_document1": null
},
"antete": [{
"id_document": "111111114",
"tip_document": "Comanda client",
"id_carnet": 23,
"data_document": "2019-10-7 13:00",
"data_valabil": null,
"data_livrare": null,
"scadenta": null,
"moneda": "RON",
"id_gestiune": "1(1)",
"den_gestiune": "Market 1",
"id_client": "2",
"cif_client": "",
"den_client": "",
"id_gestiune_in": "",
"den_gestiune_in": "",
"id_agent": "",
"den_agent": "",
"id_pregatire": "",
"den_pregatire": "",
"id_adresa": "",
"den_adresa": "",
"id_ruta": "",
"den_ruta": "",
"id_program": "",
"den_program": "",
"id_cursa": "",
"den_cursa": "",
"rezervare": "0",
"aprobare": "1",
"taxare_inversa": "0",
"factura_cu_tva": "0",
"validare": "1",
"observatii": "Modalitate de plata+ Avans,",
"discount": "0.0000",
"discount_proc": "0.00",
"valoare": "0.0000",
"linii": [{
"id_document": "111111114",
"id_linie_document": "",
"id_produs": "",
"cod_produs": "5941132300024",
"den_produs": "",
"tip_produs": "",
"cont_produs": "",
"serie_produs": "",
"cantitate": "10.000",
"pret_furnizor": "0.0000",
"pret_vanzare": "5.0000",
"discount": "0.0000",
"discount_proc": "0.00",
"denumire_sup": ""
}]
}]
}
La acest mesaj un raspuns gol - ca cel de mai jos - indica un import cu succes:
{"isError":false,"message":"OK","result":"[]"}
Citirea si extragerea facturilor pentru servirea lor pe o pagina web
Pentru a putea citi cu succes si a furniza intr-o aplicatie web o lista de facturi si atasamentele acestora trebuie sa parcurgem mai multi pasi:
a) configurarea sistemului ERP pentru generarea si stocatea acestor atasamente;
b) activarea si configurarea serviciului API si a rapoartelor;
c) configurarea unui conector (script php) care sa preia si sa furnizeze informatiile.
Configurarea sistemului ERP pentru generarea si stocarea facturilor ca atasamente
Pentru a putea prelua facturile in format pdf acestea trebuie mai intai stocate in sistemul NexusERP. Adica sistemul ERP trebuie configurat ca, la fiecare factura emisa, sa genereze si sa stocheze un pdf atasat fiecarui document de acest fel. Aceste fisiere pdf se numesc atasamente in sistemul Nexus ERP si se regasesc in pagina Link-uri de la fiecare document.
Pentru a configura sistemul ERP sa genereze si sa stocheze aceste atasamente va recomandam pasii de mai jos:
- Instrumente > Setari generale > Aplicatie: setati valoarea bifat la setarea Pastreaza arhiva electronica pe disc (nu in baza de date).
Activarea si configurarea serviciului API
- Instrumente > Activitati automate > Serviciu API: scrieti IP-ul extern (sau intern daca se lucreaza doar in reteaua interna) a serverului Nexus, alegeti portul dorit pentru comunicatia http si https (alegeti un port si pt. https chiar daca nu veti folosi), alegeti nivelul de log dorit, bifati setarea Activat. Nu uitati ca portul trebuie inaintat in router.
- Asigurati-va ca este instalat serviciul NexusAPI si verificati in lista de servicii Windows sa fie activat. Daca nu este instalat puteti descarca pachetul de instalare de la adresa https://download.nexuserp.ro.
- Intrati in Nexus in modulul Iesiri > Facturi clienti.
- Accesati in partea superioara meniul Rapoarte customizate > Configurare rapoarte.
- Alegeti din lista de rapoarte raportul implicit Factura (interna) sau raportul folosit de dumneavoastra pentru listarea facturilor din Nexus ERP. Pentru atasamentele online va recomandam sa faceti o copie acestui formular folosind butonul Salvez ca din meniul Salvez din bara superioara orizontala de instrumente. In acest fel se poate personaliza raportul disponibil online fara a afecta formularul folosit in aplicatia folosita de operatori.
Selectati noul raport (in acest exemplu numit Factura electronica) din lista de rapoarte.
Intrati pe pagina General si bifati setarile Salveaza ca atasament la validare si Accesibil online. Nu uitati sa salvati modificarile!
Dupa realizarea acestor setari, la validarea unei facturi, atasamentul pdf care poate fi cerut prin API se va gasi pe pagina Link-uri din document.
Configurarea unui script php care sa se conecteze la serviciul API pentru preluarea informatiilor
Pentru obtinerea pdf-ului corespunzator unei facturi trebuie sa parcurgem cativa pasi in logica script-ului. Acesti pasi pot fi impartiti - si asa este si recomandat, in mai multe fisiere. Pentru brevitate ii voi parcurge mai jos ca si cum ar fi intr-un singur fisier.
- Obtinerea unei liste de facturi pentru un partener anume (client). Ignorati elementele de css.
In acest scop va trebui sa rulam o interogare de citire de si anumehttp://".$API_NEXUSERP_IP.":".$API_NEXUSERP_PORT."/api/v3/read/facturi_clienti
si le organizam in forma unui tabel.
<table class="table" id="tbl_facturi_emise">
<thead class=" text-info">
<th>
#
</th>
<th>
Numar
</th>
<th>
Data
</th>
<th>
Scadenta
</th>
<th class="text-right">
Valoare
</th>
<th class=" text-center">
Actiuni
</th>
</thead>
<tbody>
<?php
$API_NEXUSERP_IP="192.168.1.1"; //ip server Nexus
$API_NEXUSERP_PORT="8888"; //port Nexus
$API_NEXUSERP_KEY="4345CCC4E87F4AC788D03675E05A1468:"; //cheie API urmata de semnul ":" conform documentatei.
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://".$API_NEXUSERP_IP.":".$API_NEXUSERP_PORT."/api/v3/read/facturi_clienti",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\"valid\":\"1\", \"anulat\":\"0\", \"id_client\":\"1987(1)\"}", //Trebuie adaugat un filtru aici in functie de o perioada selectata de utilizator. Model: \"anluna\":\"2020\"
CURLOPT_HTTPHEADER => array(
"Authorization: Basic ".base64_encode("{$API_NEXUSERP_KEY}")."",
"Content-Type: application/json"
),
));
$json =curl_exec($curl);
curl_close($curl);
$rezultat=json_decode($json, true);
$i=1;
foreach ($rezultat['result'] as $linie) {
echo "<tr>
<td>{$i}</td>
<td>{$linie['serie_document']} {$linie['numar_document']}</td>
<td>{$linie['data_document']}</td>
<td>{$linie['data_lim']}</td>
<td class='text-primary'>{$linie['den_client']}</td>
<td class='text-right'>".number_format((float)$linie['valoare_cu_tva'], 2, '.', '')."</td>
<td class='td-actions text-center'>
<button type='button' rel='tooltip' class='btn btn-info btn_detalii_factura' data-idfactura='".$linie['id_document']."'>
<i class='material-icons'>visibility</i>
</button>
<button type='button' rel='tooltip' class='btn btn-danger btn_descarca_factura' data-idarhivafactura='".$linie['id_arhiva_factura']."'>
<i class='material-icons'>picture_as_pdf</i>
</button>
</td>
</tr>";
$i++;
}
?>
</tbody>
</table>
In urma citirii vom obtine lista de facturi aferente clientului cu id-ul specificat iar id-urile interne ale atasamentelor facturilor le pastram in control-ul butonului de descarcare php in variabila data-idarhivafactura. Acest id il vom folosi in pasul urmator pentru a obtine pdf-ul atasat documentului.
Mai jos avem codul pentru actiunea de descarcare a pdf-ului. ID-ul fisierului, aflat mai sus, il trimitem printr-un POST catre rutina de descarcare.
<?php
$id_fisier = $_POST['id_fisier'];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://".$API_NEXUSERP_IP.":".$API_NEXUSERP_PORT."/api/v3/read/fisier_arhiva",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\"id_fisier\":\"$id_fisier\"}",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic ".base64_encode("{$API_NEXUSERP_KEY}:")."",
"Content-Type: application/json"
),
));
$json =curl_exec($curl);
curl_close($curl);
$rezultat=json_decode($json, true);
$i=1;
echo "<table class='table'>
<thead class='text-primary'>
<tr>
<th>#</th>
<th>Nume atasament</th>
<th>Descarcare</th>
</tr></thead>
<tbody>";
foreach ($rezultat['result'] as $atasament) {
echo "<tr style='width:10%;'><td>{$i}</td><td>{$atasament['FileName']}</td><td class='text-center' style='width:10%;'><a title='Click pentru a descarca atasamentul.' href=\"data:application/pdf;base64,{$atasament['BinaryData']}\" download=\"{$atasament['FileName']}\" class=\"btn btn-round btn-outline-danger\"}><i class='material-icons text-danger'>get_app</i></a></td></tr>";
}
echo "</tbody></table>";
exit;
?>
Putem observa cum serverul API raspunde cu stream-ul necesar construirii fisierului in formatul pdf, encodat in base64. Furnizand fisierul direct in link evitam fisierele temporare.
Sper ca informatiile prezentate v-au fost de folos in intelegerea modului in care functioneaza serverul API si un punct solid de plecare pentru dezvoltarea propriilor integrari.
Pentru informatii suplimentare va rugam sa nu ezitati sa ne contactati la adresa de email nexus@atacpc.ro.