Passa al contenuto principale

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)

ParametroTipoDescrizione
itemsarrayRighe: { name, quantity, price, vat? }. vat: es. '22', '4', 'N1'.
paymentsarrayPagamenti: [{ name, amount, quantity? }]. name: 'cash', 'electronic', 'terminal', 'link', 'card', 'ticket', ecc.
statestringStato personalizzato (redirect/evento).
redirectUristringURL di redirect dopo l’emissione.
widthnumberLarghezza iframe (default 500).
heightnumberAltezza iframe (default 700).
backgroundbooleanIframe nascosto.
autoclosebooleanChiudi iframe all'evento issuance.
providerstringID 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 documento
  • typereceipt o invoice
  • status – es. completed
  • state – valore passato in apertura
  • provider – 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 a nopos.issue(options).
  • noposIssue.createButton(options, container?) – Equivalente a createIssueButton.
  • Stessi close, isOpen, on, off dello 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

  1. Stesso clientId: usa la stessa app/client_id già usata per NoPos Pay.
  2. State: usa state per collegare documento emesso a ordine/sessione.
  3. Redirect + evento: puoi usare sia redirectUri sia l’evento issuance per aggiornare UI e backend.
  4. Provider: configura e connetti i provider fiscali nella dashboard NoPos prima di testare l’embed.

Prossimi passi

  1. Introduzione NoPos Issue
  2. NoPos Pay - Guida all’utilizzo
  3. Pagina di test SDK

NoPos Issue - Stessa semplicità di NoPos Pay