NoPos Issue - Guida all'Utilizzo
Questa pagina mostra come integrare NoPos Issue (scontrini e fatture) usando lo stesso SDK JavaScript di NoPos Pay.
SDK unificato
Lo script è unico: usa NoPos per sia pagamenti che emissione documenti, oppure NoPosIssue se ti serve solo l’emissione.
Installazione
<script src="https://app.nopos.it/sdk/sdk.js"></script>
TypeScript:
/// <reference path="https://app.nopos.it/sdk/sdk.d.ts" />
Utilizzo base
Opzione 1: Pulsante Issue (raccomandato)
<div id="issue-button"></div>
<script src="https://app.nopos.it/sdk/sdk.js"></script>
<script>
const nopos = new NoPos({ clientId: 'YOUR_CLIENT_ID' });
nopos.on('issuance', (data) => {
console.log('Documento emesso:', data.type, data.id, data.provider);
nopos.close();
});
nopos.createIssueButton({
items: [{ name: 'Ordine #123', quantity: 1, price: 10.00, vat: '22' }],
payments: [{ name: 'cash', amount: 10.00 }],
state: 'order_123'
}, '#issue-button');
</script>
Opzione 2: Solo Issue con NoPosIssue
<div id="issue-button"></div>
<script src="https://app.nopos.it/sdk/sdk.js"></script>
<script>
const noposIssue = new NoPosIssue({
clientId: 'YOUR_CLIENT_ID',
baseUrl: 'https://app.nopos.it'
});
noposIssue.on('issuance', (data) => {
console.log('Documento:', data.type, data.id, data.provider, data.status);
noposIssue.close();
});
noposIssue.createButton({
items: [{ name: 'Fattura servizi', quantity: 1, price: 25.50, vat: '22' }],
payments: [{ name: 'electronic', amount: 25.50 }],
state: 'inv_456',
autoclose: true
}, '#issue-button');
</script>
Opzione 3: Apertura manuale (NoPos unificato)
const nopos = new NoPos({
clientId: 'YOUR_CLIENT_ID',
baseUrl: 'https://app.nopos.it'
});
// Apri il flusso Issue
nopos.issue({
items: [{ name: 'Documento test', quantity: 1, price: 10.00, vat: '22' }],
payments: [{ name: 'cash', amount: 5.00 }, { name: 'electronic', amount: 5.00 }],
state: 'doc_789',
redirectUri: 'https://yoursite.com/issue-result',
autoclose: true
}).then(() => console.log('Iframe Issue aperto'));
nopos.on('issuance', (data) => {
console.log('Completato:', data.type, data.id);
});
nopos.on('close', () => console.log('Iframe chiuso'));
Opzione 4: Provider fiscale specifico
nopos.issue({
items: [{ name: 'Vendita', quantity: 1, price: 15.00, vat: '22' }],
provider: 'fiskaly' // Apri direttamente Fiskaly (o altro ID provider)
});
Parametri (Issue)
| Parametro | Tipo | Descrizione |
|---|---|---|
items | array | Righe: { name, quantity, price, vat? }. vat: es. '22', '4', 'N1'. |
payments | array | Pagamenti: [{ name, amount, quantity? }]. name: 'cash', 'electronic', 'terminal', 'link', 'card', 'ticket', ecc. |
state | string | Stato personalizzato (redirect/evento). |
redirectUri | string | URL di redirect dopo l’emissione. |
width | number | Larghezza iframe (default 500). |
height | number | Altezza iframe (default 700). |
background | boolean | Iframe nascosto. |
autoclose | boolean | Chiudi iframe all'evento issuance. |
provider | string | ID provider fiscale (apertura diretta). |
Evento issuance
All’emissione completata viene inviato un evento (e, se indicato, redirect):
interface IssueData {
target: 'issuance';
type: 'receipt' | 'invoice';
id: string;
provider: string;
status: string;
state?: string;
}
Esempio:
nopos.on('issuance', (data) => {
if (data.status === 'completed') console.log('Emesso:', data.type, data.id);
nopos.close();
});
Redirect dopo l’emissione
Se viene passato redirectUri, l’utente viene reindirizzato con query params:
id– ID del documentotype–receiptoinvoicestatus– es.completedstate– valore passato in aperturaprovider– ID del provider usato
Esempio URL:
https://yoursite.com/issue-result?id=doc_xxx&type=receipt&status=completed&state=order_123&provider=fiskaly
API Reference (NoPos Issue)
NoPos (unificato)
nopos.issue(options)– Apre l’iframe Issue (Promise).nopos.createIssueButton(options, container?)– Crea il pulsante Issue.nopos.close()– Chiude l’iframe.nopos.isOpen()– Restituisce se l’iframe è aperto.nopos.on(event, callback)– Eventi:open,load,error,providers,user,issuance,close.nopos.off(event, callback)– Rimuove listener.
NoPosIssue
noposIssue.open(options)– Equivalente anopos.issue(options).noposIssue.createButton(options, container?)– Equivalente acreateIssueButton.- Stessi
close,isOpen,on,offdello standard SDK.
Esempio completo (Pay + Issue)
<!DOCTYPE html>
<html>
<head>
<title>NoPos Pay e Issue</title>
<script src="https://app.nopos.it/sdk/sdk.js"></script>
</head>
<body>
<div id="pay-button"></div>
<div id="issue-button"></div>
<script>
const nopos = new NoPos({ clientId: 'YOUR_CLIENT_ID' });
nopos.on('payment', (data) => {
console.log('Pagamento:', data.id, data.status);
nopos.close();
});
nopos.on('issuance', (data) => {
console.log('Documento:', data.type, data.id, data.provider);
nopos.close();
});
nopos.createPayButton({
amount: 10.00,
currency: 'EUR',
description: 'Pagamento'
}, '#pay-button');
nopos.createIssueButton({
items: [{ name: 'Documento', quantity: 1, price: 10.00, vat: '22' }],
payments: [{ name: 'cash', amount: 10.00 }]
}, '#issue-button');
</script>
</body>
</html>
Best practice
- Stesso clientId: usa la stessa app/client_id già usata per NoPos Pay.
- State: usa
stateper collegare documento emesso a ordine/sessione. - Redirect + evento: puoi usare sia
redirectUrisia l’eventoissuanceper aggiornare UI e backend. - Provider: configura e connetti i provider fiscali nella dashboard NoPos prima di testare l’embed.
Prossimi passi
NoPos Issue - Stessa semplicità di NoPos Pay