Universal Web Platform · Esempi di codice

Esempi di codice: Python, C#, VB.NET e curl

Esempi completi e funzionanti della stessa chiamata in più linguaggi. Sostituisci dominio, chiave e postazione con i tuoi.

Python

Python 3, solo libreria standard
import gzip, json, urllib.request

URL = "https://www.tuosito.it/webservice.aspx?Key=LA-TUA-CHIAVE&serialize=json"

def chiama(richiesta):
    corpo = gzip.compress(json.dumps(richiesta, ensure_ascii=False).encode("utf-8"))
    req = urllib.request.Request(URL, data=corpo, method="POST", headers={
        "Content-Type": "application/octet-stream",
        "Content-Encoding": "gzip",
        "Accept-Encoding": "gzip"})
    with urllib.request.urlopen(req, timeout=600) as r:
        dati = r.read()
    if dati[:2] == b"\x1f\x8b":          # risposta compressa
        dati = gzip.decompress(dati)
    risposta = json.loads(dati.decode("utf-8"))
    if str(risposta.get("Status", "")).upper() != "OK":
        raise RuntimeError(risposta.get("ResponseString") or risposta.get("ErrorList"))
    return risposta

# scrivere un marchio
chiama({"DataOperation": 0, "TypeObject": 0, "GuidPC": "gestionale-01",
        "ObjectListBrand": [{"Codice": "ACME", "Descrizione": "Acme"}]})

# leggere i nuovi ordini e confermarli
r = chiama({"DataOperation": 3, "TypeObject": 23, "GuidPC": "gestionale-01",
            "QueryParameter": {"StartingRecord": 1, "LimitRecord": 100}})
conferme = []
for d in r["ObjectListDocument"]:
    # ... salva il documento nel tuo sistema ...
    chiave = "|".join([d["Tipo"], d["Esercizio"], d["Registro"], d["Serie"],
                       str(int(d["Numero"])), d["TipoControparte"], d["Controparte"]])
    conferme.append({"Type": 23, "Guid": "gestionale-01", "Key": chiave})
if conferme:
    chiama({"DataOperation": 0, "TypeObject": 42, "GuidPC": "gestionale-01",
            "ObjectListReceveidClass": conferme})

C#

C# (.NET 6 o successivo)
using System.IO.Compression;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

var http = new HttpClient(new HttpClientHandler {
    AutomaticDecompression = System.Net.DecompressionMethods.GZip }) { Timeout = TimeSpan.FromMinutes(10) };
var url = "https://www.tuosito.it/webservice.aspx?Key=LA-TUA-CHIAVE&serialize=json";

var richiesta = new {
    DataOperation = 3, TypeObject = 19, GuidPC = "gestionale-01",
    SQLFilter = "articoli.codice LIKE 'A%'",
    QueryParameter = new { IgnoreImportRecord = true, StartingRecord = 1, LimitRecord = 200 }
};
byte[] testo = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(richiesta));
using var compresso = new MemoryStream();
using (var gz = new GZipStream(compresso, CompressionLevel.Optimal, leaveOpen: true))
    gz.Write(testo, 0, testo.Length);

var contenuto = new ByteArrayContent(compresso.ToArray());
contenuto.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
contenuto.Headers.ContentEncoding.Add("gzip");

var risposta = await http.PostAsync(url, contenuto);
using var json = JsonDocument.Parse(await risposta.Content.ReadAsStringAsync());
var stato = json.RootElement.GetProperty("Status").GetString();
foreach (var articolo in json.RootElement.GetProperty("ObjectListProduct").EnumerateArray())
    Console.WriteLine($"{articolo.GetProperty("Codice")} {articolo.GetProperty("Descrizione")}");

VB.NET con la libreria SFHIEDataDefinition

VB.NET
Imports SFHIEDataDefinition

Dim export As New Export With {.ForceAttend = False}
export.EndPoint.URL = "https://www.tuosito.it/webservice.aspx"
export.EndPoint.Key = "LA-TUA-CHIAVE"          ' Key e serialize vengono aggiunti dalla libreria
Dim cookie As New Net.CookieContainer

Dim marchi As New List(Of Definition.Brand) From {
   New Definition.Brand With {.Codice = "ACME", .Descrizione = "Acme"}}

Dim risposta As Definition.WebServiceResponse = export.ExecuteCommand(
   marchi, Definition.DataType.BRAND, Definition.DataOperation.INSERTORMODIFY,
   "", True, cookie, SFHCommon.Serialization.TypeSerialize.JSON,
   False, "gestionale-01", New Definition.QueryParameter)

If risposta.ErrorList.Count > 0 Then
   For Each e In risposta.ErrorList
      Console.WriteLine(e.SourceError)
   Next
End If

La libreria compone l'indirizzo con Key e serialize, comprime il corpo, ripete fino a tre volte le chiamate non riuscite e restituisce la risposta già deserializzata. Per ImportMulti usa Export.ExecuteMultiCommand.

curl

Terminale: i primi dieci marchi
echo '{"DataOperation":3,"TypeObject":0,"GuidPC":"prova","QueryParameter":{"IgnoreImportRecord":true,"LimitRecord":10}}' \
  | gzip -c \
  | curl -s --compressed -X POST --data-binary @- \
      -H "Content-Type: application/octet-stream" -H "Content-Encoding: gzip" \
      "https://www.tuosito.it/webservice.aspx?Key=LA-TUA-CHIAVE&serialize=json"

Un documento completo

JSON · un ordine con una riga (codici di esempio)
{
  "DataOperation": 0,
  "TypeObject": 23,
  "GuidPC": "gestionale-01",
  "ObjectListDocument": [
    {
      "Tipo": "OC", "Esercizio": "2026", "Serie": "A", "Registro": "01", "Numero": 125,
      "Controparte": "000123", "TipoControparte": "C",
      "Data": "2026-03-15T00:00:00",
      "Pagamento": "BB30", "Deposito": "SEDE", "Note": "Consegna al mattino",
      "SpeseTrasporto": 8.5, "CodiceIVASpeseTrasporto": "22",
      "TotaleImponibile": 108.5, "TotaleIVA": 23.87, "TotaleDocumento": 132.37,
      "ListaCorpo": [
        { "TipoRiga": "", "CodiceArticolo": "A0001", "StringaVarianti": "", "DescrizioneArticolo": "Maglia cotone blu",
          "Quantita": 2, "ImponibileUnitario": 50, "Sconti": "", "CodiceIVA": "22", "Deposito": "SEDE", "UnitaDiMisura": "PZ" }
      ]
    }
  ]
}

I codici (tipo documento, pagamento, deposito, IVA, unità di misura) devono essere quelli configurati sul sito: leggili prima con QUERY dai rispettivi tipi.