Le Web API pubbliche di Hunext Mensa permettono a sistemi esterni di integrarsi al gestionale senza passare per l’interfaccia utente.
Queste API lavorano solo su ruolo ‘Utente’. Le utenze amministrative — non sono visibili né modificabili da qui, nemmeno conoscendone l’identificativo.
Prima di iniziare: i codici esterni
A differenza di altri prodotti, Mensa richiede un passaggio preliminare di configurazione che va fatto dall’amministratore dell’impianto prima di consegnare le credenziali a chi integra.
Mense e aziende si indicano con il codice esterno, cioè il codice con cui quella mensa o quella azienda sono già note al gestionale del cliente.
Il campo è facoltativo nell’anagrafica, ma senza di esso l’integrazione non può funzionare: ogni richiesta che nomina una mensa o una azienda verrebbe rifiutata.
Cosa fare
Cosa Fare
- Concordare con l’utilizzatore i codici da usare: stringhe alfanumeriche parlanti dal consumer.
- In Anagrafiche › Mense aziendali, aprire ogni mensa coinvolta e compilare il campo Cod. Esterno.
- In Anagrafiche › Aziende, fare lo stesso su ogni azienda coinvolta.
- Comunicare l’elenco dei codici a chi realizza l’integrazione, insieme alle credenziali.
Cosa sapere
Cosa sapere
Il codice è univoco: non possono esistere due mense, o due aziende, con lo stesso codice. Al salvataggio il sistema lo verifica.
Modificarlo a posteriori interrompe senza alcun errore visibile dall’anagrafica: il sistema esterno continuerà a inviare il codice vecchio e si vedrà rifiutare le richieste. Se va cambiato, va cambiato su entrambi i lati e in modo concordato.
Vanno compilate solo le mense e le aziende che l’integrazione deve toccare. Le altre possono restare senza codice.
1 · Creare le credenziali dell’applicazione client
Le credenziali si generano nel gestionale, in Manutenzione › Client, voce riservata agli utenti con ruolo Amministratore.
- Premere il pulsante di aggiunta nella barra degli strumenti.
- Compilare la Descrizione: serve a riconoscere l’integrazione nell’elenco, conviene indicare il sistema che la userà.
- Compilare client_id e client_secret.
- Selezionare gli scope e, se serve, l’azienda — vedi la tabella qui sotto.
- Lasciare Attivo selezionato e salvare.
Il client_secret è visibile una sola volta. Dopo il salvataggio ne resta solo la versione cifrata. Copiarlo e consegnarlo prima di salvare; se va perso occorre rigenerarlo, e il valore precedente smette di funzionare.
Scope e azienda: quale combinazione scegliere
La combinazione determina cosa l’integrazione potrà fare. È la decisione più importante di questo passaggio.
| Tipo di integrazione | Scope | Azienda |
|---|---|---|
| Servizio esterno di una singola azienda | ex. Gestione Utenti | selezionata |
| Servizio esterno a livello di impianto | ex. Gestione Utenti | lasciare vuota |
| Tablet self-service | Gestione Token | — |
| Gateway Hunext | nessuno | selezionata |
2 · Recuperare il link della documentazione
Dalla stessa pagina Manutenzione › Client, il pulsante con l’icona del mappamondo mostra l’indirizzo della documentazione tecnica di questo impianto, con il comando per copiarlo.
L’indirizzo ha questa forma:
https://<indirizzo-del-portale>/<codice-installazione>/api/docs
Il <codice-installazione> è diverso per ogni impianto. Caratteristiche da comunicare a chi integra:
- non richiede autenticazione;
- è in sola lettura: descrive le chiamate disponibili, non consente di eseguirle;
- va trattato come informazione riservata, anche se non protegge l’accesso alle API: a farlo sono le credenziali.
3 · Richiedere il token di accesso
Ogni chiamata alle API deve portare un token, che l’integrazione ottiene dalle proprie credenziali.
La chiamata
- Metodo: POST
- Indirizzo:
https://<indirizzo-del-portale>/api/v1/token - Formato:
application/x-www-form-urlencoded
Parametri da inviare
| Parametro | Valore |
|---|---|
grant_type | client_credentials (valore fisso) |
client_id | il client_id definito al passaggio 1 |
client_secret | il client_secret definito al passaggio 1 |
curl -X POST https://portale.azienda.it/api/v1/token \
-d "grant_type=client_credentials" \
-d "client_id=IL_CLIENT_ID" \
-d "client_secret=IL_SEGRETO_RICEVUTO"
La risposta
{
"token_type": "bearer",
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 1800
}
access_tokenè il token da usare;expires_inè la sua validità in secondi. Scaduto, se ne richiede un altro con la stessa chiamata: le credenziali non cambiano.
Se le credenziali non sono valide, oppure il client è stato disattivato:
{
"error": "unauthorized",
"error_description": "Credenziali client non valide o disabilitate."
}
Il messaggio è volutamente identico nei due casi: non si deve poter capire da fuori se un client esiste.
Usare il token
Va inviato nell’intestazione Authorization, preceduto da Bearer:
curl https://portale.azienda.it/api/v1/users \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Esiti più frequenti
| Codice | Significato | Cosa verificare |
|---|---|---|
400 | Dati della richiesta non validi | La risposta indica i campi in errore. Spesso è un codice mensa o azienda non compilato in anagrafica |
401 | Token assente, scaduto o non valido | Richiedere un token nuovo |
403 | Token valido, operazione non abilitata | Controllare gli scope assegnati al client |
404 | Entità non trovata o non disponibile | Verificare l’identificativo e l’azienda associata al client |
409 | Operazione in conflitto con un dato esistente | Ex. Username o email già in uso; in cancellazione, dipendente con rendicontazioni associate |
Avvertenze
Solo HTTPS. Le chiamate vanno indirizzate unicamente a https://.
Gli indirizzi contengono la versione (/api/v1/...). Finché l’integrazione resta su quella versione, il formato delle risposte non cambia in modo incompatibile.
Revocare un’integrazione. Disattivare o eliminare il client impedisce di ottenere nuovi token, ma quelli già emessi restano validi fino alla scadenza.