API v2 - How to get started with VB.NET #19
Replies: 30 comments 35 replies
-
Buongiorno @Giacomino70 Le API V2 rispetto alle V1 sono molto più standardizzate, quindi potrà trovare facilmente documentazione anche all'esterno del nostro developer hub, se non l'ha trovato di semplice comprensione. Può trovare la guida alla migrazione a questo link. Le API V2 sono delle semplici API REST, che utilizzano diversi metodi HTTP (GET, POST, PUT, DELETE) a seconda di ciò che deve fare. Ad ogni token sono associati dei permessi, chiamati scope, che permettono all'utente di dichiarare esplicitamente quali sono le azioni che possono essere compiute da chi possiede quel token. Funziona come una whitelist, quindi se il token ha associato un certo permesso potrà compiere una determinata azione, altrimenti no. Per iniziare, le suggerirei di utilizzare il flusso che abbiamo chiamato autenticazione manuale. Tra l'altro da quanto ho capito la sua è un'applicazione desktop sviluppata per un cliente ben specifico; in tal caso quindi l'autenticazione manuale sarebbe la soluzione ideale. Le chiedo conferma di questo. Per poter utilizzare, lei dovrà prima di tutto creare un'applicazione sulla pagina Developers di Fatture in Cloud. Qui per applicazione intendiamo semplicemente delle credenziali che permetteranno alla sua desktop application di generare dei token, e quali flussi autorizzativi vuole utilizzare. Se il caso d'uso che ho ipotizzato è corretto, lei potrà lasciare tranquillamente l'applicazione privata senza richiedere la pubblicazione. Le prossime operazioni solitamente vengono svolte da un'utente terzo che vuole utilizzare la sua applicazione. Nel suo caso invece (se ho capito bene) lei sta sviluppando questa applicazione per un suo cliente specifico, quindi può essere tranquillamente lei ad eseguire il processo.
Le faccio notare che questo token non scade, ma può essere annullato dalla pagina di Fatture in Cloud. Questo token potrà essere utilizzato dalla sua applicazione per autorizzare le richieste. Noti che tutti i metodi di autorizzazione da noi proposti utilizzano lo stesso header, quindi potrà tranquillamente adottare un altro flusso in futuro se lo desidera. Ottenuto il token, potrà effettuare le chiamate REST. In particolare, il metodo da lei indicato è stato sostituito dal metodo Create Issued Document, che è una POST esattamente come in precedenza. Questa chiamata deve ricevere i seguenti parametri:
Le API V2 sono molto più complete delle V1, e possono quindi risultare un po' più complicate da utilizzare. Per questo abbiamo creato una guida dedicata alla creazione delle fatture e alla gestione delle e-invoice. Spero di esserle stato utile. Ci faccia sapere se avrà altre domande a riguardo. Grazie P.S.: In questa community solitamente cerchiamo di utilizzare l'inglese quando possibile. |
Beta Was this translation helpful? Give feedback.
-
La ringrazio infinitamente. Ora rileggerò attentamente il tutto passo per
passo e eventualmente abbia pazienza se le rivolgo ulteriori domande. Ha
centrato in pieno. Applicazione desktop che usa un solo utente. Grazie a
presto
Il dom 17 lug 2022, 17:47 Mauro Valota ***@***.***> ha
scritto:
… Buongiorno @Giacomino70 <https://github.com/Giacomino70>
non si preoccupi, i flussi OAuth2
<https://www.cyber-security-libro.it/articoli/come-funziona-oauth-2/>possono
essere molto difficili da comprendere la prima volta, ma vedrà che una
volta compreso il flusso diventa molto più intuitivo.
Le API V2 rispetto alle V1 sono molto più standardizzate, quindi potrà
trovare facilmente documentazione anche all'esterno del nostro developer
hub, se non l'ha trovato di semplice comprensione. Può trovare la guida
alla migrazione a questo link
<https://developers.fattureincloud.it/docs/api-v2-migration>.
Le API V2 sono delle semplici API REST
<https://dinotraining.it/api-rest-cosa-sono-e-perche-usarle/>, che
utilizzano diversi metodi HTTP (GET, POST, PUT, DELETE) a seconda di ciò
che deve fare.
Per autorizzare le chiamate ai vari metodi utilizziamo dei token, che
devono essere passati come Bearer Token Header
<https://it.linkedin.com/pulse/jwt-e-bearer-token-facciamo-chiarezza-guido-spadotto>:
ciò significa solamente che dovrà aggiungere alle sue richieste un header
chiamato "authorization" e con il contenuto la concatenazione di "Bearer "
e del token (ad esempio "Bearer
a/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZWYiOiJUMElqc1pVWEpUZkxCSkZ3aG5iZmpSYTRJRktYTDk3ayIsImV4cCI6MTU4OTY0MjAzMX0.qn869ICUSS3_hx84ZTToMsB5slWQZjGZXGklSIiBkB4").
Ad ogni token sono associati dei permessi, chiamati *scope*
<https://developers.fattureincloud.it/docs/basics/scopes>, che permettono
all'utente di dichiarare esplicitamente quali sono le azioni che possono
essere compiute da chi possiede quel token. Funziona come una whitelist,
quindi se il token ha associato un certo permesso potrà compiere una
determinata azione, altrimenti no.
Per iniziare, le suggerirei di utilizzare il flusso che abbiamo chiamato *autenticazione
manuale*
<https://developers.fattureincloud.it/docs/authentication/manual-authentication>.
Tra l'altro da quanto ho capito la sua è un'applicazione desktop sviluppata
per un cliente ben specifico; in tal caso quindi l'autenticazione manuale
sarebbe la soluzione ideale. Le chiedo conferma di questo.
Per poter utilizzare, lei dovrà prima di tutto creare un'applicazione
<https://developers.fattureincloud.it/docs/basics/create-an-app> sulla
pagina Developers <https://secure.fattureincloud.it/settings-developers>
di Fatture in Cloud. *Qui per applicazione intendiamo semplicemente delle
credenziali che permetteranno alla sua desktop application di generare dei
token, e quali flussi autorizzativi vuole utilizzare.* Se il caso d'uso
che ho ipotizzato è corretto, lei potrà lasciare tranquillamente
l'applicazione privata senza richiedere la pubblicazione.
Le prossime operazioni solitamente vengono svolte da un'utente terzo che
vuole utilizzare la sua applicazione. Nel suo caso invece (se ho capito
bene) lei sta sviluppando questa applicazione per un suo cliente specifico,
quindi può essere tranquillamente lei ad eseguire il processo.
Per il flusso manuale, dovrà inviare all'utente il Client ID della sua
applicazione. L'utente dovrà quindi generare il token come segue:
- Accedere alla pagina "Applicazioni collegate
<https://secure.fattureincloud.it/settings-apps>" di Fatture in Cloud
- Cliccare su "Collegare una nuova applicazione"
- Inserire il Client ID da lei fornito
- Assegnare i permessi (scope) al token -> la lista dei token deve
essere fornita da lei
- Copiare il token e fornirlo alla sua applicazione
Le faccio notare che questo token non scade, ma può essere annullato dalla
pagina di Fatture in Cloud.
Questo token potrà essere utilizzato dalla sua applicazione per
autorizzare le richieste. Noti che tutti i metodi di autorizzazione
<https://developers.fattureincloud.it/docs/basics/authentication> da noi
proposti utilizzano lo stesso header, quindi potrà tranquillamente adottare
un altro flusso in futuro se lo desidera.
Ottenuto il token, potrà effettuare le chiamate REST. In particolare, il
metodo da lei indicato è stato sostituito dal metodo Create Issued
Document
<https://developers.fattureincloud.it/api-reference#post-/c/-company_id-/issued_documents>,
che è una POST esattamente come in precedenza.
Questa chiamata deve ricevere i seguenti parametri:
- L'header di autorizzazione (come spiegato prima)
- Come parametro di percorso, l'ID della company
<https://developers.fattureincloud.it/docs/basics/company-scoped-methods>
- all'interno del body della richiesta, il JSON rappresentante la
risorsa da realizzare
Le API V2 sono molto più complete delle V1, e possono quindi risultare un
po' più complicate da utilizzare. Per questo abbiamo creato una guida
dedicata alla creazione delle fatture
<https://developers.fattureincloud.it/docs/guides/invoice-creation> e
alla gestione delle e-invoice
<https://developers.fattureincloud.it/docs/guides/e-invoice-xml-customisation>
.
Spero di esserle stato utile. Ci faccia sapere se avrà altre domande a
riguardo.
Grazie
Mauro
P.S.: In questa community solitamente cerchiamo di utilizzare l'inglese
quando possibile.
—
Reply to this email directly, view it on GitHub
<#19 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2GKQ437YLVWRSRBLHLVUQTIBANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Mauro Buongiorno. mi scuso per il mancato uso dell'inglese ma dalle sue
delucidazioni chiarissime mi inchiodo già al primo passaggio. CLIENT ID .,
dove si trova ? mi vedo proprio affogato .
GRAZIE
Il giorno dom 17 lug 2022 alle ore 18:36 Giacomo Iannelli <
***@***.***> ha scritto:
… La ringrazio infinitamente. Ora rileggerò attentamente il tutto passo per
passo e eventualmente abbia pazienza se le rivolgo ulteriori domande. Ha
centrato in pieno. Applicazione desktop che usa un solo utente. Grazie a
presto
Il dom 17 lug 2022, 17:47 Mauro Valota ***@***.***> ha
scritto:
> Buongiorno @Giacomino70 <https://github.com/Giacomino70>
> non si preoccupi, i flussi OAuth2
> <https://www.cyber-security-libro.it/articoli/come-funziona-oauth-2/>possono
> essere molto difficili da comprendere la prima volta, ma vedrà che una
> volta compreso il flusso diventa molto più intuitivo.
>
> Le API V2 rispetto alle V1 sono molto più standardizzate, quindi potrà
> trovare facilmente documentazione anche all'esterno del nostro developer
> hub, se non l'ha trovato di semplice comprensione. Può trovare la guida
> alla migrazione a questo link
> <https://developers.fattureincloud.it/docs/api-v2-migration>.
>
> Le API V2 sono delle semplici API REST
> <https://dinotraining.it/api-rest-cosa-sono-e-perche-usarle/>, che
> utilizzano diversi metodi HTTP (GET, POST, PUT, DELETE) a seconda di ciò
> che deve fare.
> Per autorizzare le chiamate ai vari metodi utilizziamo dei token, che
> devono essere passati come Bearer Token Header
> <https://it.linkedin.com/pulse/jwt-e-bearer-token-facciamo-chiarezza-guido-spadotto>:
> ciò significa solamente che dovrà aggiungere alle sue richieste un header
> chiamato "authorization" e con il contenuto la concatenazione di "Bearer "
> e del token (ad esempio "Bearer
> a/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZWYiOiJUMElqc1pVWEpUZkxCSkZ3aG5iZmpSYTRJRktYTDk3ayIsImV4cCI6MTU4OTY0MjAzMX0.qn869ICUSS3_hx84ZTToMsB5slWQZjGZXGklSIiBkB4").
>
> Ad ogni token sono associati dei permessi, chiamati *scope*
> <https://developers.fattureincloud.it/docs/basics/scopes>, che
> permettono all'utente di dichiarare esplicitamente quali sono le azioni che
> possono essere compiute da chi possiede quel token. Funziona come una
> whitelist, quindi se il token ha associato un certo permesso potrà compiere
> una determinata azione, altrimenti no.
>
> Per iniziare, le suggerirei di utilizzare il flusso che abbiamo chiamato *autenticazione
> manuale*
> <https://developers.fattureincloud.it/docs/authentication/manual-authentication>.
> Tra l'altro da quanto ho capito la sua è un'applicazione desktop sviluppata
> per un cliente ben specifico; in tal caso quindi l'autenticazione manuale
> sarebbe la soluzione ideale. Le chiedo conferma di questo.
>
> Per poter utilizzare, lei dovrà prima di tutto creare un'applicazione
> <https://developers.fattureincloud.it/docs/basics/create-an-app> sulla
> pagina Developers <https://secure.fattureincloud.it/settings-developers>
> di Fatture in Cloud. *Qui per applicazione intendiamo semplicemente
> delle credenziali che permetteranno alla sua desktop application di
> generare dei token, e quali flussi autorizzativi vuole utilizzare.* Se
> il caso d'uso che ho ipotizzato è corretto, lei potrà lasciare
> tranquillamente l'applicazione privata senza richiedere la pubblicazione.
>
> Le prossime operazioni solitamente vengono svolte da un'utente terzo che
> vuole utilizzare la sua applicazione. Nel suo caso invece (se ho capito
> bene) lei sta sviluppando questa applicazione per un suo cliente specifico,
> quindi può essere tranquillamente lei ad eseguire il processo.
> Per il flusso manuale, dovrà inviare all'utente il Client ID della sua
> applicazione. L'utente dovrà quindi generare il token come segue:
>
> - Accedere alla pagina "Applicazioni collegate
> <https://secure.fattureincloud.it/settings-apps>" di Fatture in Cloud
> - Cliccare su "Collegare una nuova applicazione"
> - Inserire il Client ID da lei fornito
> - Assegnare i permessi (scope) al token -> la lista dei token deve
> essere fornita da lei
> - Copiare il token e fornirlo alla sua applicazione
>
> Le faccio notare che questo token non scade, ma può essere annullato
> dalla pagina di Fatture in Cloud.
>
> Questo token potrà essere utilizzato dalla sua applicazione per
> autorizzare le richieste. Noti che tutti i metodi di autorizzazione
> <https://developers.fattureincloud.it/docs/basics/authentication> da noi
> proposti utilizzano lo stesso header, quindi potrà tranquillamente adottare
> un altro flusso in futuro se lo desidera.
>
> Ottenuto il token, potrà effettuare le chiamate REST. In particolare, il
> metodo da lei indicato è stato sostituito dal metodo Create Issued
> Document
> <https://developers.fattureincloud.it/api-reference#post-/c/-company_id-/issued_documents>,
> che è una POST esattamente come in precedenza.
>
> Questa chiamata deve ricevere i seguenti parametri:
>
> - L'header di autorizzazione (come spiegato prima)
> - Come parametro di percorso, l'ID della company
> <https://developers.fattureincloud.it/docs/basics/company-scoped-methods>
> - all'interno del body della richiesta, il JSON rappresentante la
> risorsa da realizzare
>
> Le API V2 sono molto più complete delle V1, e possono quindi risultare un
> po' più complicate da utilizzare. Per questo abbiamo creato una guida
> dedicata alla creazione delle fatture
> <https://developers.fattureincloud.it/docs/guides/invoice-creation> e
> alla gestione delle e-invoice
> <https://developers.fattureincloud.it/docs/guides/e-invoice-xml-customisation>
> .
>
> Spero di esserle stato utile. Ci faccia sapere se avrà altre domande a
> riguardo.
>
> Grazie
> Mauro
>
> P.S.: In questa community solitamente cerchiamo di utilizzare l'inglese
> quando possibile.
>
> —
> Reply to this email directly, view it on GitHub
> <#19 (comment)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/A2DGJ2GKQ437YLVWRSRBLHLVUQTIBANCNFSM53Z3B7TQ>
> .
> You are receiving this because you were mentioned.Message ID:
> ***@***.***>
>
|
Beta Was this translation helpful? Give feedback.
-
Perdonatemi . l'ANSIA non mi fa ragionare . ho fatto qualche passetto- ho
creato applicazione e ho il client ID e access token .
Il giorno lun 18 lug 2022 alle ore 08:31 Giacomo Iannelli <
***@***.***> ha scritto:
… Mauro Buongiorno. mi scuso per il mancato uso dell'inglese ma dalle sue
delucidazioni chiarissime mi inchiodo già al primo passaggio. CLIENT ID .,
dove si trova ? mi vedo proprio affogato .
GRAZIE
Il giorno dom 17 lug 2022 alle ore 18:36 Giacomo Iannelli <
***@***.***> ha scritto:
> La ringrazio infinitamente. Ora rileggerò attentamente il tutto passo per
> passo e eventualmente abbia pazienza se le rivolgo ulteriori domande. Ha
> centrato in pieno. Applicazione desktop che usa un solo utente. Grazie a
> presto
>
> Il dom 17 lug 2022, 17:47 Mauro Valota ***@***.***> ha
> scritto:
>
>> Buongiorno @Giacomino70 <https://github.com/Giacomino70>
>> non si preoccupi, i flussi OAuth2
>> <https://www.cyber-security-libro.it/articoli/come-funziona-oauth-2/>possono
>> essere molto difficili da comprendere la prima volta, ma vedrà che una
>> volta compreso il flusso diventa molto più intuitivo.
>>
>> Le API V2 rispetto alle V1 sono molto più standardizzate, quindi potrà
>> trovare facilmente documentazione anche all'esterno del nostro developer
>> hub, se non l'ha trovato di semplice comprensione. Può trovare la guida
>> alla migrazione a questo link
>> <https://developers.fattureincloud.it/docs/api-v2-migration>.
>>
>> Le API V2 sono delle semplici API REST
>> <https://dinotraining.it/api-rest-cosa-sono-e-perche-usarle/>, che
>> utilizzano diversi metodi HTTP (GET, POST, PUT, DELETE) a seconda di ciò
>> che deve fare.
>> Per autorizzare le chiamate ai vari metodi utilizziamo dei token, che
>> devono essere passati come Bearer Token Header
>> <https://it.linkedin.com/pulse/jwt-e-bearer-token-facciamo-chiarezza-guido-spadotto>:
>> ciò significa solamente che dovrà aggiungere alle sue richieste un header
>> chiamato "authorization" e con il contenuto la concatenazione di "Bearer "
>> e del token (ad esempio "Bearer
>> a/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyZWYiOiJUMElqc1pVWEpUZkxCSkZ3aG5iZmpSYTRJRktYTDk3ayIsImV4cCI6MTU4OTY0MjAzMX0.qn869ICUSS3_hx84ZTToMsB5slWQZjGZXGklSIiBkB4").
>>
>> Ad ogni token sono associati dei permessi, chiamati *scope*
>> <https://developers.fattureincloud.it/docs/basics/scopes>, che
>> permettono all'utente di dichiarare esplicitamente quali sono le azioni che
>> possono essere compiute da chi possiede quel token. Funziona come una
>> whitelist, quindi se il token ha associato un certo permesso potrà compiere
>> una determinata azione, altrimenti no.
>>
>> Per iniziare, le suggerirei di utilizzare il flusso che abbiamo chiamato *autenticazione
>> manuale*
>> <https://developers.fattureincloud.it/docs/authentication/manual-authentication>.
>> Tra l'altro da quanto ho capito la sua è un'applicazione desktop sviluppata
>> per un cliente ben specifico; in tal caso quindi l'autenticazione manuale
>> sarebbe la soluzione ideale. Le chiedo conferma di questo.
>>
>> Per poter utilizzare, lei dovrà prima di tutto creare un'applicazione
>> <https://developers.fattureincloud.it/docs/basics/create-an-app> sulla
>> pagina Developers <https://secure.fattureincloud.it/settings-developers>
>> di Fatture in Cloud. *Qui per applicazione intendiamo semplicemente
>> delle credenziali che permetteranno alla sua desktop application di
>> generare dei token, e quali flussi autorizzativi vuole utilizzare.* Se
>> il caso d'uso che ho ipotizzato è corretto, lei potrà lasciare
>> tranquillamente l'applicazione privata senza richiedere la pubblicazione.
>>
>> Le prossime operazioni solitamente vengono svolte da un'utente terzo che
>> vuole utilizzare la sua applicazione. Nel suo caso invece (se ho capito
>> bene) lei sta sviluppando questa applicazione per un suo cliente specifico,
>> quindi può essere tranquillamente lei ad eseguire il processo.
>> Per il flusso manuale, dovrà inviare all'utente il Client ID della sua
>> applicazione. L'utente dovrà quindi generare il token come segue:
>>
>> - Accedere alla pagina "Applicazioni collegate
>> <https://secure.fattureincloud.it/settings-apps>" di Fatture in Cloud
>> - Cliccare su "Collegare una nuova applicazione"
>> - Inserire il Client ID da lei fornito
>> - Assegnare i permessi (scope) al token -> la lista dei token deve
>> essere fornita da lei
>> - Copiare il token e fornirlo alla sua applicazione
>>
>> Le faccio notare che questo token non scade, ma può essere annullato
>> dalla pagina di Fatture in Cloud.
>>
>> Questo token potrà essere utilizzato dalla sua applicazione per
>> autorizzare le richieste. Noti che tutti i metodi di autorizzazione
>> <https://developers.fattureincloud.it/docs/basics/authentication> da
>> noi proposti utilizzano lo stesso header, quindi potrà tranquillamente
>> adottare un altro flusso in futuro se lo desidera.
>>
>> Ottenuto il token, potrà effettuare le chiamate REST. In particolare, il
>> metodo da lei indicato è stato sostituito dal metodo Create Issued
>> Document
>> <https://developers.fattureincloud.it/api-reference#post-/c/-company_id-/issued_documents>,
>> che è una POST esattamente come in precedenza.
>>
>> Questa chiamata deve ricevere i seguenti parametri:
>>
>> - L'header di autorizzazione (come spiegato prima)
>> - Come parametro di percorso, l'ID della company
>> <https://developers.fattureincloud.it/docs/basics/company-scoped-methods>
>> - all'interno del body della richiesta, il JSON rappresentante la
>> risorsa da realizzare
>>
>> Le API V2 sono molto più complete delle V1, e possono quindi risultare
>> un po' più complicate da utilizzare. Per questo abbiamo creato una guida
>> dedicata alla creazione delle fatture
>> <https://developers.fattureincloud.it/docs/guides/invoice-creation> e
>> alla gestione delle e-invoice
>> <https://developers.fattureincloud.it/docs/guides/e-invoice-xml-customisation>
>> .
>>
>> Spero di esserle stato utile. Ci faccia sapere se avrà altre domande a
>> riguardo.
>>
>> Grazie
>> Mauro
>>
>> P.S.: In questa community solitamente cerchiamo di utilizzare l'inglese
>> quando possibile.
>>
>> —
>> Reply to this email directly, view it on GitHub
>> <#19 (comment)>,
>> or unsubscribe
>> <https://github.com/notifications/unsubscribe-auth/A2DGJ2GKQ437YLVWRSRBLHLVUQTIBANCNFSM53Z3B7TQ>
>> .
>> You are receiving this because you were mentioned.Message ID:
>> ***@***.***>
>>
>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno, Se ha ricevuto l'access token, ora può fare chiamate REST verso le nostre API. Può vedere degli esempi qui:
Le ricordo anche che può testare le nostre API utilizzando la nostra API reference: https://developers.fattureincloud.it/api-reference A disposizione per ulteriori domande |
Beta Was this translation helpful? Give feedback.
-
Carissimo Mauro sentiti ringraziamenti per la sua disponibilità ma credo
che mi trovo nel mondo arabo e che mi sa dovrò abdicare. il mio vecchio
codice era il seguente
Imports System
Imports System.Net
Imports System.Text
Imports System.IO
Imports MySql.Data.MySqlClient
Const API_ID As String = Chr(34) & "api_uid" & Chr(34) & ":" & Chr(34) &
"431892" & Chr(34)
Const API_KEY As String = Chr(34) & "api_key" & Chr(34) & ":" & Chr(34) &
"790cf579cc2dc0c892c7bb523d277aa3" & Chr(34)
' erano i due valori identificativi del cliente di fattureincloud
'POST
goURL.Text = "https://api.fattureincloud.it:443/v1/fatture/nuovo"
Dim Req As WebRequest = WebRequest.Create(goURL.Text)
Req.Method = "POST"
Dim Dados As String = TextCMD.Text *' in questa text
inserivo la sintassi >JSON con i dati delle fattura che dovevo caricare e
il gioco era fatto.*
Dim By As Byte() = Encoding.UTF8.GetBytes(Dados)
Req.ContentType = "application/x-www-form-urlencoded"
Req.ContentLength = By.Length
Dim dStream As Stream = Req.GetRequestStream
dStream.Write(By, 0, By.Length)
dStream.Close()
'----------------------------------------------------
Dim Rep As WebResponse = Req.GetResponse
'MsgBox(CType(Rep, HttpWebResponse).StatusDescription)
dStream = Rep.GetResponseStream
Dim Ler As New StreamReader(dStream)
Dim RIS As String = Ler.ReadToEnd
urlResponseText.Text = RIS
Ler.Close()
dStream.Close()
Rep.Close()
*e nella variabile RIS trovavo la risposta se OK o eventuali descrizioni
errori . *
*Ah . *dimenticavo . il tutto è scritto in VB 2010 . magari un po
vecchiotto. quindi secondo me visto che la mia procedura usava
FATTUREINCLOUD solo per invio di fatture elettroniche
ma in realtà fa una lunga serie di elaborazioni dal magazzino a pagamenti e
via dicendo praticamente sono in ROVINA .
Il giorno lun 18 lug 2022 alle ore 10:46 Mauro Valota <
***@***.***> ha scritto:
… Buongiorno,
perfetto, quindi non stia nemmeno a pensare a OAuth2, l'autenticazione
manuale è perfetta per il suo caso.
Se ha ricevuto l'access token, ora può fare chiamate REST verso le nostre
API.
Si ricordi semplicemente di copiare l'access token all'interno della sua
applicazione (può farlo perché è per un cliente unico) e di inserirlo come
header nella chiamata REST.
Può vedere degli esempi qui:
-
https://www.mattepuffo.com/blog/articolo/3632-consumare-api-rest-vbnet-restsharp.html
-
https://www.programmingnotes.org/6229/vb-net-how-to-send-post-process-a-rest-api-web-request-using-vb-net/
Le ricordo anche che può testare le nostre API utilizzando la nostra API
reference: https://developers.fattureincloud.it/api-reference
A disposizione per ulteriori domande
Mauro
—
Reply to this email directly, view it on GitHub
<#19 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2H4TZUZXIJL6QWWECDVUUKVBANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno Mauro sempre molto gentile. Oggi a dire il vero avrei problemi
familiari quindi mi fermo . Ma se non è troppo chiedere cosa significa
impostare header ? Mi fa un esempio?in modo che proverò. Buona giornata
Il lun 18 lug 2022, 22:21 Mauro Valota ***@***.***> ha
scritto:
… Buongiorno @Giacomino70 <https://github.com/Giacomino70>,
mi spiace che stia pensando di arrendersi. Ha comunque tempo fino al 31
gennaio prima della dismissione delle API, quindi ha tutto il tempo per
modificare la chiamata effettuata.
A dire il vero, il codice non cambia molto da quello che ha appena
pubblicato.
L'URL diventa:
https://api-v2.fattureincloud.it/c/{company_id}/issued_documents
ricordi di sostituire {company_id} con l'id della sua company.
Il JSON della richiesta è diverso, ma può essere impostato allo stesso
modo. può vedere degli esempi a questo link
<https://developers.fattureincloud.it/docs/guides/invoice-creation#-create-the-document>
Il content type invece deve essere modificato a "application/json".
L'unica vera differenza è che deve anche impostare l'header come già detto
in precedenza.
Mi faccia sapere se riesce a risolvere.
A disposizione
Mauro
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2CWW4RKSMUAHPLRYYLVUW4FDANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
I also have an authorization problem, let me explain: The problem is setting the token for the Configuration object, here is the code: This request always goes in 401 Unauthorized while if I try the same request in Postman (Authorization Type: Bearer Token, Token: token generated on Fatture in Cloud) everything works correctly. I suspect I am setting the wrong variables/methods in VB.NET to set the token. Any help would be much appreciated. |
Beta Was this translation helpful? Give feedback.
-
buongiorno sig emanuele. ho seguito i suoi consigli e sinceramente sono
stati molto chiari. unico dubbio che ho e se debba mettere il carattere {
dopo Bearer per access_token o no. ma vengo al dunque . il mio codice è
questo :
goURL.Text = "
https://api-v2.fattureincloud.it/c/{7mpXdtWdsGE1Jdbr8yawG45e6A7iTggH}/issued_documents
"
Dim Req As WebRequest = WebRequest.Create(goURL.Text)
Req.Method = "POST"
Dim Dados As String = TextCMD.Text
Dim By As Byte() = Encoding.UTF8.GetBytes(Dados)
'NUOVO Comando
Req.ContentType = "application/json"
Req.ContentLength = By.Length
'Nuova aggiunta di autorizzazione TOKEN
Req.Headers.Add("Authorization", "Bearer ACCESS_TOKEN")
Dim dStream As Stream = Req.GetRequestStream
in questa posizione mi da errore ovvero " Connessione sottostante chiusa:
Errore imprevisto durante un'operazione di invio "
e si inchioda .
dStream.Write(By, 0, By.Length)
dStream.Close()
inoltre nella text box textCMD.text dove scrivo il JSON leggendo i dati
dalle tabella mysql dove scrivo la mia fattura esiste un campo che non
comprendo. la posto (questo però e solo un esempio)
si trova alla fine e si chiama attachment_token . cosa ci si deve
scrivere ? Access Token ?
{
"data": {
"type": "invoice",
"entity": {
"id": 1,
"name": "Mario Rossi",
"vat_number": "47803200154",
"tax_code": "RSSMRA91M20B967Q",
"address_street": "Via Italia, 66",
"address_postal_code": "20900",
"address_city": "Milano",
"address_province": "MI",
"address_extra": "",
"country": "Italia"
},
"date": "2022-01-20",
"number": 2000,
"numeration": "/fatt",
"subject": "internal subject",
"visible_subject": "visible subject",
"currency": {
"id": "EUR",
"exchange_rate": "1.00000",
"symbol": "€"
},
"language": {
"code": "it",
"name": "Italiano"
},
"items_list": [
{
"product_id": 4,
"code": "TV3",
"name": "Tavolo in legno",
"net_price": 100,
"category": "cucina",
"discount": 0,
"qty": 1,
"vat": {
"id": 0
}
}
],
"payment_method":{
"id": 386683
},
"payments_list": [
{
"amount": 122,
"due_date": "2022-01-23",
"paid_date": "2022-01-22",
"status": "paid",
"payment_account": {
"id": 110
}
}
],
"attachment_token": "//"
"template": {
"id": 150
}
}
}
non so prorpio come ringraziare ma brancolo nel buio . Grazie Infinite
Il giorno mar 19 lug 2022 alle ore 09:08 Emanuele Saccomandi <
***@***.***> ha scritto:
… Buongiorno @Giacomino70 <https://github.com/Giacomino70>, impostare
l'header di autorizzazione è molto semplice, le basta aggiungere questa
riga di codice: Req.Headers.Add("Authorization", "Bearer ACCESS_TOKEN}")
prima di fare la chiamata, ovvero nel suo caso dopo Req.ContentLength =
By.Length , sostituendo ACCESS_TOKEN con il suo token ottenuto in
precedenza.
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2DBFAUT77MYRCSE5MTVUZH6BANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Grazie infinite proverò a cercare. Ma il codice JSON è quello giusto per
poter scrivere la fattura vero ?
Sempre molto disponibili. Grazie ancora. Se ho successo vi posto il codice
Il mer 20 lug 2022, 17:28 Emanuele Saccomandi ***@***.***> ha
scritto:
… Ciao @Giacomino70 <https://github.com/Giacomino70>, prima cosa abbiamo
rimosso l'access token dalla tua domanda perché un dato sensibile che *non
va assolutamente divulgato*, per quanto riguarda invece la questione
della } dopo l'access token, no, non va messa, mentre il campo
attachment_token va usato se si vuole allegare un file alla fattura.
Per quanto riguarda l'errore che ti viene dato, purtroppo, non possiamo
aiutarti in quanto è un errore del tuo codice che non abbiamo la
possibilità di debuggare, immagino ti venga restituito un errore più
esplicativo che potresti usare per cercare problemi simili su internet.
Grazie,
Emanuele
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2DNOORVVLHJKA5UTVTVVALLBANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
grazie infinite. Sperando in un futuro in qualcuno che sviluppa in VB.NET
in modo da darmi qualche dritta se non riesco a risolvere
Il giorno gio 21 lug 2022 alle ore 08:09 Emanuele Saccomandi <
***@***.***> ha scritto:
… Si, il json è corretto, tenga a mente che quello è un esempio, perciò non
funzionerà la creazione così come è, per esempio il payment method con quel
id non esisterà sicuramente nel suo profilo.
Emanuele
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2C5RXNSEQBYMFEDOX3VVDSR7ANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno Mauro. le mail del sig Emanuele mi hanno fatto andare un po
avanti ma ora il codice si ferma su un problema di autenticazione che
emenuele dice di non poter debuggare evidentemente perche
è scritto in vb.net. ora le chiedo . se copio il mio url come scritto da
lei goURL.Text = "https://api-v2.fattureincloud.it/c/{ client _ id
}/issued_documents" nel browser mi da questo errore :
{"error":{"message":"Non autorizzato."}}
ma per company_id intendiamo il client id che restituisce applicazione
che ho creato ?
Infinite grazie
Il giorno lun 18 lug 2022 alle ore 22:21 Mauro Valota <
***@***.***> ha scritto:
… Buongiorno @Giacomino70 <https://github.com/Giacomino70>,
mi spiace che stia pensando di arrendersi. Ha comunque tempo fino al 31
gennaio prima della dismissione delle API, quindi ha tutto il tempo per
modificare la chiamata effettuata.
A dire il vero, il codice non cambia molto da quello che ha appena
pubblicato.
L'URL diventa:
https://api-v2.fattureincloud.it/c/{company_id}/issued_documents
ricordi di sostituire {company_id} con l'id della sua company.
Il JSON della richiesta è diverso, ma può essere impostato allo stesso
modo. può vedere degli esempi a questo link
<https://developers.fattureincloud.it/docs/guides/invoice-creation#-create-the-document>
Il content type invece deve essere modificato a "application/json".
L'unica vera differenza è che deve anche impostare l'header come già detto
in precedenza.
Mi faccia sapere se riesce a risolvere.
A disposizione
Mauro
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2CWW4RKSMUAHPLRYYLVUW4FDANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno @diegonogaretti Anche della documentazione generica potrebbe andare bene. Grazie |
Beta Was this translation helpful? Give feedback.
-
capisco. le sdk sviluppano in C . quindi dovro' migrare al C . . provero'
quando mi arriva VS 2017 Grazie Mille vi farò sapere
Il giorno ven 22 lug 2022 alle ore 17:21 Mauro Valota <
***@***.***> ha scritto:
… Grazie mille @diegonogaretti <https://github.com/diegonogaretti>
@Giacomino70 <https://github.com/Giacomino70> per favore, fammi sapere se
ti può essere d'aiuto.
Con le SDK dovrebbe essere molto più semplice integrare le nostre API.
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2FEGS4LSS6UDG6JLKTVVK37BANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno. Ho letto vs POST e sicuramente a breve mi rimetterò a lavorare
su questa situazione. Ora sono fuori per lavoro . Nel frattempo consiglio
di cambiare ambiente VB da 2010 a versione
più recente . tipo 2017. Ha diverse potenzialità in piu' .
Il giorno sab 1 ott 2022 alle ore 09:40 Luigi ***@***.***> ha
scritto:
… Buongiorno a tutti ed un saluto particolare a te @valmoz
<https://github.com/valmoz>
mi scuso tanto per non avermi fatto sentire prima, ma ero sicuramente
acerbo come informazioni.
sono passati ormai 2 mesi dal mio ultimo post e praticamente sono allo
stesso punto di partenza ,
perché non riesco a partire da un punto certo e sicuro,
unica nota positiva è che ho letto parecchie pagine e post per cercare di
imparare quello che devo fare e dove devo arrivare.
Nell'augurarmi che ho capite bene provo a spiegare il punto "buoi" in cui
mi trovo:
- io ho realizzato un mio programma (che uso solo io per capirci) che
crea fatture ai miei clienti gli invia una copia di cortesia via email e
che la sera in automatico invia a FattureInCloud tramite le chiamate API
(una alla volta , ma cmq tutte nello stesso momento)
Diciamo pure che avevo trovato degli esempi su internet che ho
implementato (dimenticavo io scrivo con visual basic v.2010)
la chiamata API veniva creata in automatico con la creazione di una
stringa che contiene tutte le informazioni necessarie
(numero/data/cliente/importo, ecc.) compreso ovviamente in testa anche del
codice api UID e api KEY.
Quello che ho imparato dai vari msg e che io:
- devo nel mio account fatture in cloud entrare in modalita
"sviluppatore"
- creare quindi una 'applicazione' con autenticazione 'token
personale' e tenere questa app come 'privata' tanto serve solo a me ed al
mio programma locale su pc (dimenticavo windows form non web).
- a questo punto il programma attuale di invio dati a fattureincloud
deve essere implementato aggiungendo all'inizio questa autenticazione una
volta stabilita la connessione la trasmissione dei dati dovrebbe essere
rimasta invariata.
- essendo con autenticazione manuale non ho bisogno di una ulteriore
chiave di sicurezza (basta solo il client ID che ha generato fatture in
cloud)
quello che non ho ancora trovato e come si può integrare questa parte di
comunicazione all'interno di quella attuale, perchè non ho trovato un
esempio completo (e magari semplice) scritto in VB. Lo so bene che ormai il
VB è obsoleto (o magari morto) come linguaggio ma persone come me che lo
hanno utilizzato da oltre 20 anni....e con tutto quello che ho scritto nel
programma attuale non me la sento di aggiornare tutto ad un nuovo
linguaggio (anche per via della età)
ritornando a noi , io pensavo che la scelta migliore riguardo alla tua
risposta e che io mi devo inserire nella versione numero (2) per quanto
riguardano le strade percorribili.....è corretto ?
Diciamo pure che posso tranquillamente anche postare il codice che
utilizzo come comunicazione , trovando qualcuno che possa darmi una mano,
confido anche in @Giacomino70 <https://github.com/Giacomino70> nel caso
in cui ci sia già passato.
Vorrei tanto riuscire in questo mese di ottobre a sistemare questo mio
problema per non pensarci piu, anche perchè poi il tempo non basta per
poter scegliere una altra strada.....
ringrazio anticipatamente tutti quelli che possono dare una mano
(ovviamente partendo da @valmoz <https://github.com/valmoz> )
ilTato
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2F7IL774SDXZNYIIOLWA7TGJANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno Valmoz, In questo modo potrei poter continuare e quindi modificare tutto l'applicativo tramite l'utilizzo dell'SDK ringrazio anticipatamente. questo il codice: ovviamente è quello iniziale al quale bisogna togliere la riga attach e nell'ultima riga mettere come minimo id:0 incrociando le dita, auguro a tutti una buona serata |
Beta Was this translation helpful? Give feedback.
-
Aspetto versione VB.net
2017. Credo riprenderò i miei studi i primi di settembre. Grazie per
interessamento. Mi farò risentire sicuramente. Ma forse ho sbagliato
qualcosa in questa discussione . Non vorrei mancare di rispetto verso il
lavoro degli altri
Il gio 28 lug 2022, 14:49 Mauro Valota ***@***.***> ha
scritto:
… Ciao @Giacomino70 <https://github.com/Giacomino70> sei stato in grado di
fare qualche progresso?
—
Reply to this email directly, view it on GitHub
<#19 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2HPQVNJQTNE5YME62TVWJ6WPANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Gentile Mauro non so dove trova tanta pazienza con me e la ringrazio a
priori . il company id e il numero di cliente che si usava prima anche con
le api v1 . e abbiamo risolto.
sono riuscito anche a fare qualche interrogazione ma non da codice ma bensì
da guida api reference . e funziona con il token giusto.
purtroppo il codice da lei postato non ha sintassi vb.net inteso che non va
. proverò magari a farlo girare su vb 2017 quando mi arriverà . magari è
piu' recente . per ora ancora grazie
infinite
Il giorno gio 21 lug 2022 alle ore 11:13 Mauro Valota <
***@***.***> ha scritto:
… Buongiorno @Giacomino70 <https://github.com/Giacomino70>
no, la company_id è l'id della sua company, il client_id è un'altra cosa.
Per recuperare il company_id può provare ad eseguire la chiamata List
User Company dall'api reference
<https://developers.fattureincloud.it/api-reference#get-/user/companies>,
in modo tale da non doverla implementare prima. Si ricordi prima di fare
questa chiamata di inserire l'access token in cima alla pagina (nella
sezione Authentication - HTTP BEARER), altrimenti otterrà ancora un errore
Non autorizzato.
Qualora non dovesse riuscire nemmeno così, può contattare il supporto
clienti che ha visibilità della sua utenza Fatture in Cloud, in modo tale
da poter recuperare il suo Company ID.
Ovviamente dal browser il link non funziona perché non ha potuto impostare
l'header di autenticazione.
Ho preparato un semplice esempio di GET con VB.NET. Non ho potuto
testarlo, ma dovrebbe funzionare. Prima di provarlo si ricordi di
sostituire COMPANY_ID e ACCESS_TOKEN
Per creare questo esempio ho creato una chiamata semplice (la Get Company
Info
<https://developers.fattureincloud.it/api-reference#get-/c/-company_id-/company/info>)
ma può rimpiazzarla con il metodo che le serve.
' WebRequest - GET
' Dichiarare URL
Dim url = "https://api-v2.fattureincloud.it/c/COMPANY_ID/company/info
' Optional: Specificare le opzioni di richiesta
Dim options = New Utils.WebRequest.Options With {
.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0",
.Headers = New System.Net.WebHeaderCollection From {
{"Authorization", "Bearer ACCESS_TOKEN"}
}
}
' Esegui una GET Request all'URL
Dim response = Await Utils.WebRequest.GetAsync(url)
' Stampa lo status code e il corpo della risposta
Debug.Print($"
Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription}
Bytes Received: {response.Bytes.Length}
Body: {response.Body}
")
Per la POST invece può provare l'esempio seguente. Anche questo non è
stato testato.
Per l'esempio ho usato la Create Issued Document
<https://developers.fattureincloud.it/api-reference#post-/c/-company_id-/issued_documents>.
Si ricordi ancora di sostituire il COMPANY_ID e l'ACCESS_TOKEN.
Non ho scritto il contenuto della richiesta per intero, spetta a lei
cercarlo sulla API Reference o sulle nostre guide.
' WebRequest - POST
' Dichiara URL
Dim url = $"https://api-v2.fattureincloud.it/c/COMPANY_ID/issued_documents"
' Optional: Specifica i parametri di richiesta
Dim options = New Utils.WebRequest.Options With {
.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0",
.ContentType = Utils.WebRequest.ContentType.ApplicationJson,
.Headers = New System.Net.WebHeaderCollection From {
{"Authorization", "Bearer ACCESS_TOKEN"}
}
}
' Serializza oggetto a JSON per creare un nuovo documento
Dim payload = "
{
""data"": {
""type"": ""receipt"",
...
}
...
}
"
' Esegui una POST all'URL indicato
Dim response = Await Utils.WebRequest.PostAsync(url, payload, options)
' Mostra lo status code e il corpo della risposta
Debug.Print($"
Status: {CInt(response.Result.StatusCode)} - {response.Result.StatusDescription}
Bytes Received: {response.Bytes.Length}
Body: {response.Body}
")
Spero che questo possa aiutarla a risolvere.
Grazie
Mauro
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2BY6ZRYZHWGT4KOJVLVVEICPANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Se posso dare un suggerimento a @Giacomino70 , @ilTato e a chi lo ritenesse utile: qualora si sentisse la necessità di aggiornare il proprio linguaggio, e si volesse passare a qualcosa di più moderno di VB.NET, io mi sentirei di suggerire un passaggio a Python. Python è un linguaggio Open Source, quindi gratuito, e per la sua semplicità è spesso utilizzato in corsi di programmazione base. In alternativa, è anche possibile provare ad utilizzare Go. Anch'esso è Open Source, anche se a mio avviso è leggermente più complicato di Python. |
Beta Was this translation helpful? Give feedback.
-
Ringrazio per i suggerimenti avuti e a breve mi rimetto al lavoro. Grazie a
tutti per i messaggi.
Il mar 11 ott 2022, 10:25 Mauro Valota ***@***.***> ha
scritto:
… Buongiorno @Giacomino70 <https://github.com/Giacomino70> non credo che
qualcuno si sia sentito offeso da un suo commento, tantomeno io.
Siamo semplicemente qui per cercare di risolvere i problemi in fase di
integrazione.
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2F3PTSWFPRY4SSLFWTWCUQAVANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Buongiorno a tutti, volevo solo avvisare tutte le persone che hanno contribuito ad aiutarmi in qualche modo che sono finalmente riuscito a creare una fattura di prova da vb.net (utilizzando SDK). Grazie alla guida che mi ha indicato @emajo ho implementato una funzione per il calcolo dei totali ed in tutti i miei esempi mi sono accorto che effettivamente il calcolo era errato (mannaggia alle api reference), anche in questo caso non capivo come mai (anche perché il classico prodotto da 100 euro con iva sappiamo tutti che fa 122), poi sbirciando qui e là mi sono imbattuto in un paio di parametri nella configurazione del mio 'personale' account su fatture in cloud (dal menu impostazioni ho scelto: profilo fiscale) qui per caso mi sono accorto di 2 valori "rivalsa inps" e "ritenuta di acconto" entrambi con valore (15% e 18%).....una volta riportati a 0 il programma ha funzionato. E' pensare che non sapevo proprio più dove picchiare la testa. Per fortuna finalmente ce l'ho fatta, un grazie particolare a @valmoz che mi ha indicato la strada da percorrere fin da luglio ma anche tutti gli altri per le informazioni utili. NB: @Giacomino70 rinnovo il mio invito in qualche modo nel poterti aiutare (se posso) essendo un programmatore vb da una vita ....immagino cosa tu stia passando e se posso da una mano volentieri a chi utilizza ancora VB come linguaggio proprietario nel proprio programma. |
Beta Was this translation helpful? Give feedback.
-
Ringrazio anticipatamente
Il mar 11 ott 2022, 11:11 Luigi ***@***.***> ha scritto:
… Buongiorno a tutti,
volevo solo avvisare tutte le persone che hanno contribuito ad aiutarmi in
qualche modo che sono finalmente riuscito a creare una fattura di prova da
vb.net (utilizzando SDK).
Grazie alla guida che mi ha indicato @emajo <https://github.com/emajo> ho
implementato una funzione per il calcolo dei totali ed in tutti i miei
esempi mi sono accorto che effettivamente il calcolo era errato (mannaggia
alle api reference), anche in questo caso non capivo come mai (anche perché
il classico prodotto da 100 euro con iva sappiamo tutti che fa 122), poi
sbirciando qui e là mi sono imbattuto in un paio di parametri nella
configurazione del mio 'personale' account su fatture in cloud (dal menu
impostazioni ho scelto: profilo fiscale) qui per caso mi sono accorto di 2
valori "rivalsa inps" e "ritenuta di acconto" entrambi con valore (15% e
18%).....una volta riportati a 0 il programma ha funzionato.
E' pensare che non sapevo proprio più dove picchiare la testa. Per fortuna
finalmente ce l'ho fatta, un grazie particolare a @valmoz
<https://github.com/valmoz> che mi ha indicato la strada da percorrere
fin da luglio ma anche tutti gli altri per le informazioni utili.
NB: @Giacomino70 <https://github.com/Giacomino70> rinnovo il mio invito
in qualche modo nel poterti aiutare (se posso) essendo un programmatore vb
da una vita ....immagino cosa tu stia passando e se posso da una mano
volentieri a chi utilizza ancora VB come linguaggio proprietario nel
proprio programma.
—
Reply to this email directly, view it on GitHub
<#19 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2A7UAYOSBXJPBCUOZ3WCUVKRANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Gentile LUIGI dopo una gran fatica per comprendere questi SDK potrei avere
un aiutino per poi iniziare a scrivere in autonomia ? sono riuscito a
recuperare codice azienda ma per creare una fattura si allega il codice
scritto in json oppure come hai scritto tu esistono metodi dove si
richiamano i campi della fattura ? ne ho trovato uno ma e' solo per la
testa non per il dettaglio . Grazie
Il giorno mar 11 ott 2022 alle ore 10:30 Luigi ***@***.***>
ha scritto:
… Ciao @Giacomino70 <https://github.com/Giacomino70>
prova con questo, io ho scaricato la versione community di visualstudio
(che è gratuita)
(2010/2017/2019) ti confermo che funziona a me su tutte.
questo semplice esempio (con commenti in italiano) ti crea un cliente su
fattureincloud:
'CREO LA CONFIGURAZIONE PER ACCESSO A FATTURE IN CLOUD
Dim config As New Configuration()
config.BasePath = basePath
config.AccessToken = accessToken
'SERVE PER IMPOSTARE IL CODICE AZIENDA
Dim idcompany As Integer = 0
'RECUPERO TRAMITE QUESTA RICHIESTE IL CODICE AZIENZA
Try
Dim userApi As New UserApi(config)
Dim listUserCompaniesResponse = userApi.ListUserCompanies() 'call the required API method and return/use the data
'prendo ID della compagnia (codice cliente)
idcompany = listUserCompaniesResponse.Data.Companies(0).Id
Catch ex As ApiException
MessageBox.Show(String.Format("{0}: {1}", ex.ErrorCode, ex.Message))
End Try
Try
'IMPOSTO IL NUOVO CLIENTE, INSERENDO TUTTE LE INFO TRAMITE IL TRACCIATO RECORD
Dim nuovoCliente As New CreateClientRequest With {.Data = New ModelClient}
'imposto tutti i campi e valori.....
With nuovoCliente.Data
.Code = "ABC123"
.Name = "LUIGI"
'1=azienda, 2=persona fisica
.Type = 2
'i prossimi 2 SOLO in caso di persona fisica
.FirstName = "Gigio"
.LastName = "Rossi"
.ContactPerson = ""
.VatNumber = "IT12345678901"
.TaxCode = "DLLLLL70A14F205C"
.AddressStreet = "Via Emilia Romagna"
.AddressPostalCode = "20100"
.AddressCity = "Milano"
.AddressProvince = "MI"
.AddressExtra = "citofono 1234"
.Country = "Italia"
.Email = ***@***.***"
.CertifiedEmail = ***@***.***"
.Phone = "3401234567"
.Fax = "02020202"
.Notes = "nessuna, tranne che è bravo"
.DefaultPaymentTerms = 1
'.DefaultPaymentTermsType = "standard"
.BankName = "MPS"
.BankIban = "IT40P123456781000000123456"
.BankSwiftCode = "ABCDEF"
.ShippingAddress = "Via delle Biglie, 2"
.EInvoice = True
.EiCode = "12345678"
End With
'Dim nuovoCliente As New CreateClientRequest With {.Data = trCiente}
'nuovoCliente2.Data.Code = "LLL"
Dim clienteManager As New ClientsApi(config)
Dim ritornoCliente = clienteManager.CreateClient(idcompany, nuovoCliente)
MessageBox.Show(String.Format("Creato il cliente con riferimento ID {0}", ritornoCliente.Data.Id))
Catch ex As ApiException
MessageBox.Show(String.Format("{0}: {1}", ex.ErrorCode, ex.Message))
End Try
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2ARJORPRWSCIDN22LLWCUQRLANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Grazie mille . Ora sono fuori per assistenza. Ti scrivo in serata
Il Lun 12 Dic 2022, 10:06 Luigi ***@***.***> ha scritto:
… Ciao @Giacomino70 <https://github.com/Giacomino70>
ti allego un semplice esempio in cui puoi tranquillamente fare copia ed
incolla all'interno di un semplice Bottone creato sul form,
nel quale inserisci tutto il codice per la creazione di una fattura (sia
testata che righe, in tutto una riga)
Private Sub btnCreaFatturaV2_Click(sender As Object, e As EventArgs) Handles btnCreaFatturaV2.Click
'CREO LA CONFIGURAZIONE PER ACCESSO A FATTURE IN CLOUD
Dim config As New Configuration()
config.BasePath = basePath
config.AccessToken = accessToken
'SERVE PER IMPOSTARE IL CODICE AZIENDA
Dim idcompany As Integer = 123456
'ANAGRAFICO CLIENTE INTESTATARIO FATTURA
Dim newEntity As New Entity
With newEntity
'.Id = 1 (NON SERVE)
.Type = EntityType.Company
.Name = "Mario Rossi"
.AddressStreet = "Via Italia, 66"
.AddressPostalCode = "20900"
.AddressCity = "Milano"
.AddressProvince = "MI"
.Country = "Italia"
'partita iva
.VatNumber = "47803200154"
'codice fiscale
.TaxCode = "RSSMRA91M20B967Q"
'codice univoco
.EiCode = "codeuni"
'indirizzo pec
.CertifiedEmail = "pec"
'"fattura elettronica"
.EInvoice = True
End With
'RIGHE IN DETTAGLIO DELLA FATTURA
Dim itemsList As New List(Of IssuedDocumentItemsListItem)
Dim elemento As New IssuedDocumentItemsListItem
With elemento
'.ProductId = 4 (NON SERVE)
'.Code = "VENDITA e ASSISTENZA" (NO)
.Name = "VENDITA e ASSISTENZA"
.Description = "Ricambi e riparazioni"
'.NetPrice = 45.5
.GrossPrice = 55.51
.Category = "cucina"
.Discount = 0
.Qty = 1
' .Vat = New VatType With {.Id = 0}
End With
itemsList.Add(elemento)
'TERMINI DI PAGAMENTO DELLA FATTURA
Dim paymentsList As New List(Of IssuedDocumentPaymentsListItem)
Dim pagamento As New IssuedDocumentPaymentsListItem
With pagamento
.Amount = 55.51
.DueDate = New DateTime(2022, 10, 11)
.PaidDate = New DateTime(2022, 10, 11)
.Status = IssuedDocumentStatus.NotPaid
'.PaymentAccount = New PaymentAccount With {.Id = 0}
.Id = 0
End With
paymentsList.Add(pagamento)
'-------------------------------------------------------
'CREO FATTURA
'-------------------------------------------------------
Dim newInvoice As New CreateIssuedDocumentRequest With {.Data = New IssuedDocument}
With newInvoice.Data
'intestatario fattura
.Entity = newEntity
'tipo documento
.Type = IssuedDocumentType.Invoice
'data documento
.Date = New DateTime(2022, 10, 11)
'numer odocumento
.Number = 1
'(principale), oppure impostare la numerazione desiderata
'.Numeration = "/A"
'prima mette questo (NON SERVE)
'.Subject = "visibile solointernamente"
'poi mette questo.... (NON SERVE)
'.VisibleSubject = "descrizione iniziale...."
'valuta
.Currency = New Currency With {.Id = "EUR"}
'lingua utilizzata nella fattura
.Language = New Language With {.Code = "it", .Name = "italiano"}
'righe di dettaglio della fattura
.ItemsList = itemsList
'Parte bassa chiamata: pagamenti
.PaymentsList = paymentsList
'Fatturazione elettronica, oltre al codice univoco e/o pec, indica MP01=contanti, iban e intestatario conto banca
.EInvoice = True
.EiData = New IssuedDocumentEiData With {.PaymentMethod = "MP01", .BankIban = "ITITIT", .BankBeneficiary = "GIGIO"}
'metodo di pagamento (personalizzato + descrizione a piacere)
.PaymentMethod = New PaymentMethod With {.Id = 0, .Name = "XYZ"}
'visualizza il check di "mostra dettagli di pagamento"
.ShowPaymentMethod = True
'nasconde il check di "mosrta scadenze"
.ShowPayments = False
'ricalcola tutto dall importo totale
.UseGrossPrices = True
End With
Try
If 1 = 2 Then
'serve per controllare gli importi se tutto è corretto
Dim sss As New GetNewIssuedDocumentTotalsRequest With {.Data = newInvoice.Data}
Dim apiInstance As New IssuedDocumentsApi(config)
Dim result As GetNewIssuedDocumentTotalsResponse = apiInstance.GetNewIssuedDocumentTotals(idcompany, sss)
End If
Dim fatturaManager As New IssuedDocumentsApi(config)
Dim ritornoFattura = fatturaManager.CreateIssuedDocument(idcompany, newInvoice)
Dim tabUrl As String()
tabUrl = Split(ritornoFattura.Data.Url, "/")
Dim url As String = tabUrl(UBound(tabUrl))
'prendo solo gli ultimi 50 caratteri (non si sa mai che aumenti e poi va in errore)
url = (Space(50) + url).PadLeft(50)
url = url.Substring(Len(url) - 50, 50).Trim
MessageBox.Show(String.Format("Creata la fattura {0}", ritornoFattura.Data.Id))
Catch ex As ApiException
MessageBox.Show(String.Format("{0}: {1}", ex.ErrorCode, ex.Message))
End Try
End Sub
Spero tanto di esserti stato utile,
facci sapere se ci sei riuscito ....e se hai qualche problemino.
Grazie un saluto
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2CRUEVLDEDYJVAC4PTWM3TJHANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Gentilissimi Mauro e Luigi grazie infinite per la vs pazienza. ho provato
con sdk e funziona ora vorrei riuscire anche con la stringa JSON magari
per cultura personale. Se possibile chiedo a Luigi indirizzo mail
in modo tale se in futuro posso sdebitarmi con il codice viste le migliaia
di righe scritte fino ad oggi. Buona Giornata
Il giorno lun 12 dic 2022 alle ore 10:06 Luigi ***@***.***>
ha scritto:
… Ciao @Giacomino70 <https://github.com/Giacomino70>
ti allego un semplice esempio in cui puoi tranquillamente fare copia ed
incolla all'interno di un semplice Bottone creato sul form,
nel quale inserisci tutto il codice per la creazione di una fattura (sia
testata che righe, in tutto una riga)
Private Sub btnCreaFatturaV2_Click(sender As Object, e As EventArgs) Handles btnCreaFatturaV2.Click
'CREO LA CONFIGURAZIONE PER ACCESSO A FATTURE IN CLOUD
Dim config As New Configuration()
config.BasePath = basePath
config.AccessToken = accessToken
'SERVE PER IMPOSTARE IL CODICE AZIENDA
Dim idcompany As Integer = 123456
'ANAGRAFICO CLIENTE INTESTATARIO FATTURA
Dim newEntity As New Entity
With newEntity
'.Id = 1 (NON SERVE)
.Type = EntityType.Company
.Name = "Mario Rossi"
.AddressStreet = "Via Italia, 66"
.AddressPostalCode = "20900"
.AddressCity = "Milano"
.AddressProvince = "MI"
.Country = "Italia"
'partita iva
.VatNumber = "47803200154"
'codice fiscale
.TaxCode = "RSSMRA91M20B967Q"
'codice univoco
.EiCode = "codeuni"
'indirizzo pec
.CertifiedEmail = "pec"
'"fattura elettronica"
.EInvoice = True
End With
'RIGHE IN DETTAGLIO DELLA FATTURA
Dim itemsList As New List(Of IssuedDocumentItemsListItem)
Dim elemento As New IssuedDocumentItemsListItem
With elemento
'.ProductId = 4 (NON SERVE)
'.Code = "VENDITA e ASSISTENZA" (NO)
.Name = "VENDITA e ASSISTENZA"
.Description = "Ricambi e riparazioni"
'.NetPrice = 45.5
.GrossPrice = 55.51
.Category = "cucina"
.Discount = 0
.Qty = 1
' .Vat = New VatType With {.Id = 0}
End With
itemsList.Add(elemento)
'TERMINI DI PAGAMENTO DELLA FATTURA
Dim paymentsList As New List(Of IssuedDocumentPaymentsListItem)
Dim pagamento As New IssuedDocumentPaymentsListItem
With pagamento
.Amount = 55.51
.DueDate = New DateTime(2022, 10, 11)
.PaidDate = New DateTime(2022, 10, 11)
.Status = IssuedDocumentStatus.NotPaid
'.PaymentAccount = New PaymentAccount With {.Id = 0}
.Id = 0
End With
paymentsList.Add(pagamento)
'-------------------------------------------------------
'CREO FATTURA
'-------------------------------------------------------
Dim newInvoice As New CreateIssuedDocumentRequest With {.Data = New IssuedDocument}
With newInvoice.Data
'intestatario fattura
.Entity = newEntity
'tipo documento
.Type = IssuedDocumentType.Invoice
'data documento
.Date = New DateTime(2022, 10, 11)
'numer odocumento
.Number = 1
'(principale), oppure impostare la numerazione desiderata
'.Numeration = "/A"
'prima mette questo (NON SERVE)
'.Subject = "visibile solointernamente"
'poi mette questo.... (NON SERVE)
'.VisibleSubject = "descrizione iniziale...."
'valuta
.Currency = New Currency With {.Id = "EUR"}
'lingua utilizzata nella fattura
.Language = New Language With {.Code = "it", .Name = "italiano"}
'righe di dettaglio della fattura
.ItemsList = itemsList
'Parte bassa chiamata: pagamenti
.PaymentsList = paymentsList
'Fatturazione elettronica, oltre al codice univoco e/o pec, indica MP01=contanti, iban e intestatario conto banca
.EInvoice = True
.EiData = New IssuedDocumentEiData With {.PaymentMethod = "MP01", .BankIban = "ITITIT", .BankBeneficiary = "GIGIO"}
'metodo di pagamento (personalizzato + descrizione a piacere)
.PaymentMethod = New PaymentMethod With {.Id = 0, .Name = "XYZ"}
'visualizza il check di "mostra dettagli di pagamento"
.ShowPaymentMethod = True
'nasconde il check di "mosrta scadenze"
.ShowPayments = False
'ricalcola tutto dall importo totale
.UseGrossPrices = True
End With
Try
If 1 = 2 Then
'serve per controllare gli importi se tutto è corretto
Dim sss As New GetNewIssuedDocumentTotalsRequest With {.Data = newInvoice.Data}
Dim apiInstance As New IssuedDocumentsApi(config)
Dim result As GetNewIssuedDocumentTotalsResponse = apiInstance.GetNewIssuedDocumentTotals(idcompany, sss)
End If
Dim fatturaManager As New IssuedDocumentsApi(config)
Dim ritornoFattura = fatturaManager.CreateIssuedDocument(idcompany, newInvoice)
Dim tabUrl As String()
tabUrl = Split(ritornoFattura.Data.Url, "/")
Dim url As String = tabUrl(UBound(tabUrl))
'prendo solo gli ultimi 50 caratteri (non si sa mai che aumenti e poi va in errore)
url = (Space(50) + url).PadLeft(50)
url = url.Substring(Len(url) - 50, 50).Trim
MessageBox.Show(String.Format("Creata la fattura {0}", ritornoFattura.Data.Id))
Catch ex As ApiException
MessageBox.Show(String.Format("{0}: {1}", ex.ErrorCode, ex.Message))
End Try
End Sub
Spero tanto di esserti stato utile,
facci sapere se ci sei riuscito ....e se hai qualche problemino.
Grazie un saluto
—
Reply to this email directly, view it on GitHub
<#19 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A2DGJ2CRUEVLDEDYJVAC4PTWM3TJHANCNFSM53Z3B7TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Signori buonasera. Ho appreso della migrazione da API V1 ad API V2. sinceramente barcollo nel buio totale. prima io da applicazione desktop in vb.net con una web request mandavo un POST su web dove tramite VB leggevo una tabella mysql per la testa della fattura e una con un ciclo per il corpo , scrivevo in JSON (credo ) dentro una textbox e la inviavo via WEb ed il gioco era fatto .
per identificare azienda per la quale ho lavorato avevo i parametri :
Const API_ID As String = Chr(34) & "api_uid" & Chr(34) & ":" & Chr(34) & "-------" & Chr(34)
Const API_KEY As String = Chr(34) & "api_key" & Chr(34) & ":" & Chr(34) & "--------------------------------------------" & Chr(34)
il POST veniva fatto a indirizzo : goURL.Text = "https://api.fattureincloud.it:443/v1/fatture/nuovo"
e sempre con codice inviavo la fattura da caricare diciamo in sintassi JSON .
Ma ora di parla di Creare un'APP , DI CLIENT SECRET AUTORIZZAZIONI . MA DOPO ORE DI LETTURA NON HO CAPITO NIENTE.
sarà età ? Vi chiedo umilmente aiuto almeno per cominciare a chiarire le idee per iniziare la migrazione.
Ripeto io leggo solamente la fattura in locale e la inserisco su fattureincloud . successivamente viene inviata a SDI . GRAZIE MILLE
Beta Was this translation helpful? Give feedback.
All reactions