Jump to content
cjulio

Utilizar Webservices da AT

Recommended Posts

jorang
3 horas atrás, pedrokins disse:

Bom dia mais uma vez! Desculpem voltar ao mesmo...mas faça continuo a nao conseguir comunicar e a nao perceber o que está a acontecer....olhando para este código alguém consegue detetar o que me poderá estar a falhar?

Comunicação de faturas À AT....

Não sei se estará relacionado com o erro ou não, mas as faturas são documentos a crédito e, por isso, deve ser usado o ns2:CreditAmount e não o ns2:DebitAmount.

Edited by jorang

Share this post


Link to post
Share on other sites
Samuel

Alguém com problemas em usar o webservice de produção dos documentos de transporte?
Estou a obter um erro 33 com a string: "Servidor de Autenticacao Indisponivel""

Share this post


Link to post
Share on other sites
JacsonPaz
2 hours ago, Samuel said:

Alguém com problemas em usar o webservice de produção dos documentos de transporte?
Estou a obter um erro 33 com a string: "Servidor de Autenticacao Indisponivel""

Estou com problema a semanas com o mesmo erro no webservice dos DOCUMENTOS DE TRANSPORTES, mas no AMBIENTE DE TESTES:

<faultcode>33</faultcode>
<faultstring>Falha comunicacao com Servidor de Autenticacao (500)</faultstring>

 

Share this post


Link to post
Share on other sites
pedrokins
Em 08/09/2020 às 08:44, jorang disse:

Não sei se estará relacionado com o erro ou não, mas as faturas são documentos a crédito e, por isso, deve ser usado o ns2:CreditAmount e não o ns2:DebitAmount.

Antes de mais, muito obrigado pela resposta, mas infelizmente não era disso...continuo a obter o erro

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><ns0:RegisterInvoiceResponseElem xmlns:ns0="http://servicos.portaldasfinancas.gov.pt/faturas/"><ReturnCode>-99</ReturnCode><ReturnMessage>Erro de sistema. Por favor volte a tentar mais tarde.</ReturnMessage></ns0:RegisterInvoiceResponseElem></env:Body></env:Envelope>

 

Alguém com mais alguma ideia do que poderá ser?

Não acredito que isto possa ser tão complicado assim....deve-me estar a falhar alguma coisa básica....O mais estranho é ser com código postado aqui que em teoria funciona para outros utilizadores...

Share this post


Link to post
Share on other sites
Jorge Guimaraes

Boa Tarde ,

Consegui criar uma DLL que comunica Guias de Transporte , no entanto esta retorna-me um código -3 quando tento passar o valor de A no MovementStatus, deduzi que talvez fosse necessário enviar tambem o ATCodeDocID, no entanto ao enviar este a seguir ao DocumentNumber o servico indica-me que um codigo -33 , ou seja que o xml está mal formatado.

Queria saber se é possivel anular uma guia de transporte antes do StartTime da mesma, e se sim porque é que me retornam uma msg de erro a dizer que a Guia já existe (por isso é que a quero anular)

Share this post


Link to post
Share on other sites
jorang
Em 09/09/2020 às 19:16, Jorge Guimaraes disse:

Boa Tarde ,

Consegui criar uma DLL que comunica Guias de Transporte , no entanto esta retorna-me um código -3 quando tento passar o valor de A no MovementStatus, deduzi que talvez fosse necessário enviar tambem o ATCodeDocID, no entanto ao enviar este a seguir ao DocumentNumber o servico indica-me que um codigo -33 , ou seja que o xml está mal formatado.

Queria saber se é possivel anular uma guia de transporte antes do StartTime da mesma, e se sim porque é que me retornam uma msg de erro a dizer que a Guia já existe (por isso é que a quero anular)

O nome do campo a enviar é ATDocCodeID.

Share this post


Link to post
Share on other sites
Vitor Pereira
Em 09/09/2020 às 19:26, jorang disse:

O nome do campo a enviar é ATDocCodeID.

Sim, utilizamos de quando em vez a anulação de uma Guia, e se a data de carga não tiver sido ultrapassada é anulada corretamente.

Nunca utilizei o ATDocCodeID 

Share this post


Link to post
Share on other sites
Jorge Guimaraes
59 minutos atrás, jorang disse:

O nome do campo a enviar é ATDocCodeID.

Sim , peço desculpa, escrevi isto por alto, no meu XML o campo está com o nome correto, no entanto recebo um -3 em resposta

Share this post


Link to post
Share on other sites
Jorge Guimaraes
Em 09/09/2020 às 19:41, Vitor Pereira disse:

Sim, utilizamos de quando em vez a anulação de uma Guia, e se a data de carga não tiver sido ultrapassada é anulada corretamente.

Nunca utilizei o ATDocCodeID 

Obrigado Vitor, neste caso de uma anulação envia exatamente o mesmo documento XML, mas o Movement passa de N para A correto ?

Share this post


Link to post
Share on other sites
davdew05

Bom dia a todos,

Estou a usar PHC e hoje não comunica, diz servidor de autentificação indisponível. Alguém está com problemas de comunicação?

 

Já resolvi :) Estava a faltar o certificado da chave publica numa das máquinas :(

Edited by davdew05
Resolvido

Share this post


Link to post
Share on other sites
spires

Alguém está a ter problemas com a comunicação das Guias de Transporte à AT?

Share this post


Link to post
Share on other sites
pmmachado
10 minutos atrás, spires disse:

Alguém está a ter problemas com a comunicação das Guias de Transporte à AT?

Última enviada às 10:30 sem problemas...

Share this post


Link to post
Share on other sites
Rui Patronillo
Em 27/05/2020 às 18:13, General disse:

Boa tarde não estou a conseguir comunicar com webservice GuiasTransporte alguém pode ajudar por favor?

Estou a utilizar o seguinte código, parte verificado nas 427 páginas deste tópic mas ainda nao consegui ultrapassar. Estou a utilizar framework 4.5. A maior parte dos posts externos a este forum referem-se para utilizar SecurityProtocolType.Tls12 mas continua a não dar.


  this.SenhaPF = "testes1234";

            buildCredentials();
            try
            {
                Uri EnderecoWebService = new Uri("https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte/");
                ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(EnderecoWebService);
                request.Headers.Add("SOAPAction", "https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte/");
                            
               
                X509Certificate2 cert = new X509Certificate2();
               
                cert.Import(CaminhoCertificado, SenhaCertificado, X509KeyStorageFlags.DefaultKeySet);

                request.ClientCertificates.Add(cert);

                request.Method = "POST";
                request.ContentType = "text/xml; charset=utf-8";
                request.Accept = "text/xml";
          
                string oRequest = GenerateXmlString_GUIATRANSP("599999993/0037"); 

                TB_SentXML.Text = System.Xml.Linq.XDocument.Parse(oRequest).ToString();

                string postData = oRequest;
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                request.ContentLength = byteArray.Length;

                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                TB_ReceivedXML.Text = System.Xml.Linq.XDocument.Parse(responseFromServer).ToString();

                reader.Close();
                dataStream.Close();
                response.Close();

                //return responseFromServer;
            }
            catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.ProtocolError)
                {
                    WebResponse resp = ex.Response;
                    StreamReader sr = new StreamReader(resp.GetResponseStream());
                    // return sr.ReadToEnd();
                    TB_ReceivedXML.Text = "::::ERROR::::\n" + System.Xml.Linq.XDocument.Parse(sr.ReadToEnd()).ToString(); ;
                }
                else
                {
                    //  return ex.Message;
                    TB_ReceivedXML.Text = "::::ERROR::::\n" + ex.Message;
                }
            }

O Resulta do pedido é:

 


<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
    <wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext/">
      <wss:UsernameToken>
        <wss:Username>599999993/0037</wss:Username>
        <wss:Password>g3dPTOsGIWab6IHNW8Tn+g==</wss:Password>
        <wss:Nonce>EqrH+L+7G/q/JkJCafZzwum8DqDTAa+tsKD9ufSuhNrfQdXzg4B8guw96R0YwYIsen+cIBBHqvZEPnFCoj+k2t2qqwErvN3NMp5T11o5Dc4UWXVuG8ntxBf0Gpc7t7b/pTAHPvT/VzEqOnTpQAvO4EIA0BCFvpLf8by9i4+F8VrudbDD5uQ0iqe698QLHheSav5MXPngC3EXJMvdc0jWzaOeskxAgxY/UxJZ1eo3Y5A7AQz446RpPS6zeZLzf9dl6HGPT+vfLsBvYlWDdg0zFQMaq/j7IDRY2/gCeErdq77mTjpt6itl9y9UqRHFSD9pbNEWlGNzAXjXuqP2veQ9vg==</wss:Nonce>
        <wss:Created>b8VK3rrFsomycxi7Mit//ZXS3v4NVwbH5pMLSb8EsKk=</wss:Created>
      </wss:UsernameToken>
    </wss:Security>
  </S:Header>
  <S:Body>
    <ns2:envioDocumentoTransporteRequestElem xmlns:ns2="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/">
      <TaxRegistrationNumber>599999993</TaxRegistrationNumber>
      <CompanyName>Bla</CompanyName>
      <CompanyAddress>
        <Addressdetail>Morada Empresa</Addressdetail>
        <City>Cidade Empresa</City>
        <PostalCode>1000-100</PostalCode>
        <Country>PT</Country>
      </CompanyAddress>
      <DocumentNumber>999</DocumentNumber>
      <MovementStatus>N</MovementStatus>
      <MovementDate>2015-04-08Z</MovementDate>
      <MovementType>GR</MovementType>
      <CustomerTaxID>999999990</CustomerTaxID>
      <CustomerAddress>
        <Addressdetail>Morada Cliente</Addressdetail>
        <City>Cidade Cliente</City>
        <PostalCode>1000-100</PostalCode>
        <Country>PT</Country>
      </CustomerAddress>
      <AddressTo>
        <Addressdetail>Morada Descarga</Addressdetail>
        <City>Cidade Descarga</City>
        <PostalCode>1000-100</PostalCode>
        <Country>PT</Country>
      </AddressTo>
      <AddressFrom>
        <Addressdetail>Morada Carga</Addressdetail>
        <City>Cidade Carga</City>
        <PostalCode>1000-100</PostalCode>
        <Country>PT</Country>
      </AddressFrom>
      <MovementEndTime>2015-05-08T12:10:26.719+01:00</MovementEndTime>
      <MovementStartTime>2015-05-08T11:10:26.719+01:00</MovementStartTime>
      <VehicleID>10-10-AA</VehicleID>
      <Line>
        <ProductDescription>Produto1</ProductDescription>
        <Quantity>1</Quantity>
        <UnitOfMeasure>KG</UnitOfMeasure>
        <UnitPrice>1.1</UnitPrice>
      </Line>
    </ns2:envioDocumentoTransporteRequestElem>
  </S:Body>
</S:Envelope>

O erro que dá é:

"Unable to read data from the transport connection : An existing connection was forcibly closed by the remote host"
A ligação subjacente foi fechada: Erro inesperado ao enviar.

 

Agradeço desde já a vossa ajuda.

EU estou a fazer assim e funciona na perfeição.

    Private Function GetATGTCode(ByVal pSoapFile As String, ByVal pWebService As String, ByVal pServiceAction As String, ByVal pCertifPath As String, ByVal pCertifPassword As String)

        Dim EnderecoWebService As String = pWebService
        Dim CaminhoCertificado As String = pCertifPath
        Dim SenhaCertificado As String = pCertifPassword
        Try
            Dim request As HttpWebRequest = CType(HttpWebRequest.Create(EnderecoWebService), HttpWebRequest)
            request.Headers.Add("SOAPAction", pServiceAction)
            Dim cert As New X509Certificates.X509Certificate2
            cert.Import(CaminhoCertificado, SenhaCertificado, X509Certificates.X509KeyStorageFlags.DefaultKeySet)
            request.ClientCertificates.Add(cert)
            request.Method = "POST"
            request.ContentType = "text/xml; charset=utf-8"
            request.Accept = "text/xml"
            Dim postData As String = pSoapFile
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
            request.ContentLength = byteArray.Length
            Dim dataStream As IO.Stream = request.GetRequestStream
            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()
            Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
            dataStream = response.GetResponseStream
            Dim reader As New IO.StreamReader(dataStream)
            Dim responseFromServer As String = reader.ReadToEnd
            reader.Close()
            dataStream.Close()
            response.Close()
            Return  responseFromServer
        Catch ex As WebException
            If ex.Status = WebExceptionStatus.ProtocolError Then
                Dim resp As WebResponse = ex.Response
                Dim sr As IO.StreamReader = New IO.StreamReader(resp.GetResponseStream())
                Return  sr.ReadToEnd
            Else
                Return  ex.Message
            End If
        End Try

    End Function

 

Edited by Rui Patronillo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.