Esempi completi e funzionanti della stessa chiamata in più linguaggi. Sostituisci dominio, chiave e postazione con i tuoi.
Python
Python 3, solo libreria standardimport 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.NETImports 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 marchiecho '{"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.