Jump to content

Utilizar Webservices da AT


cjulio
Go to solution Solved by thoga31,

Recommended Posts

Bom dia,

Estou a utilizar o novo certificado de testes... e obtenho a seguinte resposta "<faultstring>Rejected: | Codigo: 11 | Erro: Validade da credencial expirada(2012-12-31T12:47:00.0Z) | Tentativas Restantes: -1</faultstring>". Tudo estava a funcionar correctamente ate dia 31! Alguem com o mesmo problema?

Na aplicação de teste de conectividade aparece também o erro "javax.net.ssl.SSLHandshakeException" ,não obtendo qualquer resposta, por isso acredito que mais uma vez o erro seja do lado deles...

Link to comment
Share on other sites

Bom dia,

Estou a utilizar o novo certificado de testes... e obtenho a seguinte resposta "<faultstring>Rejected: | Codigo: 11 | Erro: Validade da credencial expirada(2012-12-31T12:47:00.0Z) | Tentativas Restantes: -1</faultstring>". Tudo estava a funcionar correctamente ate dia 31! Alguem com o mesmo problema?

Na aplicação de teste de conectividade aparece também o erro "javax.net.ssl.SSLHandshakeException" ,não obtendo qualquer resposta, por isso acredito que mais uma vez o erro seja do lado deles...

Verifica novamente, pois esse erro está relacionado apenas com o certificado digital. Vê se não estás a carregar via código, forçar em algum lado ou assim.

O que eu fiz foi criar uma DLL para lidar com o processo, e recebo como parâmetros o certificado digital e a respectiva senha. Mas em fase de testes, fixei uma linha de código para carregar o certificado e a senha.

Instala o certificado no computador, e vai ao browser e entra em https://servicos.portaldasfinancas.gov.pt:700/fews/faturas. Quando aparecer uma janela para selecionar o certificado, seleciona o "Testes Web Services (DGITA Issuing CA1)". Se der erro, esse certificado não é o correcto. Se aparecer uma mensagem XML, esse está correcto.

Link to comment
Share on other sites

Boas,

Desde já quero agradecer ajuda de rmartyn e fernandods. Com a vossa ajuda, usando o curl já estou a receber resposta por parte do webservice da AT.

Contudo recebo como resposta um "35Unknown SSl Protocol error in connection to servicos.portaldasfinanças.gov.pt:700". Alguém me pode ajudar com isto?

Olá,

Os erros do tipo ERR_SSL_PROTOCOL_ERROR têm haver com o certificado digital que é associado à mensagem no momento do envio. Caso este esteja expirado ou não tendo permissões de acesso ao servidor, então dá erro.

Aconselho-te a verificar se estás a usar o certificado digital de testes deste ano e que estás a adicionar correctamente o certificado ao xmlrequest.

Cumps.

Link to comment
Share on other sites

Bom dia,

Estou a utilizar o novo certificado de testes... e obtenho a seguinte resposta "<faultstring>Rejected: | Codigo: 11 | Erro: Validade da credencial expirada(2012-12-31T12:47:00.0Z) | Tentativas Restantes: -1</faultstring>". Tudo estava a funcionar correctamente ate dia 31! Alguem com o mesmo problema?

Na aplicação de teste de conectividade aparece também o erro "javax.net.ssl.SSLHandshakeException" ,não obtendo qualquer resposta, por isso acredito que mais uma vez o erro seja do lado deles...

Eu instalei o certificado, carrego-o correctamente por código a semelhança do k fazia com o anterior... ao aceder directamente via browser, aparece por defeito o certificado correcto com validade ate junho...

Link to comment
Share on other sites

Olá,

Os erros do tipo ERR_SSL_PROTOCOL_ERROR têm haver com o certificado digital que é associado à mensagem no momento do envio. Caso este esteja expirado ou não tendo permissões de acesso ao servidor, então dá erro.

Aconselho-te a verificar se estás a usar o certificado digital de testes deste ano e que estás a adicionar correctamente o certificado ao xmlrequest.

Cumps.

Eu instalei o certificado, carrego-o correctamente por código a semelhança do k fazia com o anterior... ao aceder directamente via browser, aparece por defeito o certificado correcto com validade ate junho...

Boas João,

Eu chamo no código o ficheiro .cer designado por chave pública, pois vou usá-la para cifrar os campos

que eles assim designam para cifrar. E estou a usar a mesma que possui a validade até 2017. O que me enviaram de

novo foi o ficheiro .pfx designado de Teste Webservice mas penso que só tenho de instalar o certificado, que chamado

pelo browser responde correctamente. Depois chamo é um endpoint:https://servicos.portaldasfinancas.gov.pt:700/fews/facturas.

Isso não basta?

Edited by jokimen
Link to comment
Share on other sites

Em 1/7/2013 às 16:20, jokimen disse:

Boas João,

Eu chamo no código o ficheiro .cer designado por chave pública, pois vou usá-la para cifrar os campos

que eles assim designam para cifrar. E estou a usar a mesma que possui a validade até 2017. O que me enviaram de

novo foi o ficheiro .pfx designado de Teste Webservice mas penso que só tenho de instalar o certificado, que chamado

pelo browser responde correctamente. Depois chamo é um endpoint:https://servicos.portaldasfinancas.gov.pt:700/fews/facturas.

Isso não basta?

Boas,

Não. Tens de enviar o certificado no pedido...

Algo deste tipo :

string CaminhoCertificado = @"C:\Users\jm\Desktop\FICHEIROS\TestesWebServices.pfx";
string SenhaCertificado = "TESTEwebservice";
....

			HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(EnderecoWebService);
			request.Headers.Add("SOAPAction", "http://servicos.portaldasfinancas.gov.pt/faturas/RegisterInvoice");
			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 postData = oRequest;
			byte[] byteArray = Encoding.UTF8.GetBytes(postData);
			request.ContentLength = byteArray.Length;


			 Stream dataStream = request.GetRequestStream();
			dataStream.Write(byteArray, 0, byteArray.Length);
			dataStream.Close();
...
Link to comment
Share on other sites

Mas alguém neste momento está a conseguir obter resposta do webservice da AT em ambiente de testes? em debug vejo as propriedades do certificado a emitir,nomeadamente a validade do certificado que esta correcta... As cifras e chaves mantive, não estou a ver qual será o problema.

Edited by joaoMoreira
Link to comment
Share on other sites

Bom dia,

Estou a utilizar o novo certificado de testes... e obtenho a seguinte resposta "<faultstring>Rejected: | Codigo: 11 | Erro: Validade da credencial expirada(2012-12-31T12:47:00.0Z) | Tentativas Restantes: -1</faultstring>". Tudo estava a funcionar correctamente ate dia 31! Alguem com o mesmo problema?

Na aplicação de teste de conectividade aparece também o erro "javax.net.ssl.SSLHandshakeException" ,não obtendo qualquer resposta, por isso acredito que mais uma vez o erro seja do lado deles...

Boas,

Já escrevi antes no forum sobre esse erro 11 ... é preciso ter cuidado com a data do sistema. Se houver uma diferença grande (tipo meio minuto) dá esse erro (no campo H4 - Created)

O meu primeiro problema foi esse e andei horas e horas até reparar que o meu pc tinha o relógio atrasado 2 minutos ....

Na documentação faz referencia a isso na página 11 e deves ter a hora sincronizada com o Observatório Astronómico de Lisboa ...

Confirma e deixa feedback

Mas alguém neste momento está a conseguir obter resposta do webservice da AT em ambiente de testes? em debug vejo as propriedades do certificado a emitir,nomeadamente a validade do certificado que esta correcta... As cifras e chaves mantive, não estou a ver qual será o problema.

Boas,

Acabei de inserir 2 faturas no ambiente de testes sem problema, utilizando o mesmo código que tinha em 31/12/2012 e com o certificado de testes novo (validade de junho/2013)

Ainda tens problemas ?

Edited by pmmachado
Link to comment
Share on other sites

Olá,

Os erros do tipo ERR_SSL_PROTOCOL_ERROR têm haver com o certificado digital que é associado à mensagem no momento do envio. Caso este esteja expirado ou não tendo permissões de acesso ao servidor, então dá erro.

Aconselho-te a verificar se estás a usar o certificado digital de testes deste ano e que estás a adicionar correctamente o certificado ao xmlrequest.

Cumps.

Olá a todos,

Desculpem mas isso não é verdade. O ERR_SSL_PROTOCOL_ERROR é um erro de protocolo e não do certificado.

No entanto esse erro pode ser gerado por FALTA do certificado no pedido porque o protocolo utilizado no servidor requer o certificado.

Penso que também existem algumas versões do openssl que podem gerar esse error arbitrariamente (bug).

Aproveito para agradecer a todos os que têm partilhado informação sobre este assunto! Já que o suporte da AT tem sido muito escasso. Pessoalmente ainda não consegui ultrapassar o erro 8.

Edited by woozy
Link to comment
Share on other sites

Olá a todos,

Recentemente também me pediram para ajudar a desenvolver esta funcionalidade, já li alguma documentação mas tenho algumas questões que ainda não percebi bem pois não tenho muita experiência em criptografia/certificados, etc.

Antes de meter mãos à massa, gostaria de perceber as coisas a um nível "superior", saber o que estou a fazer.

Pelo que vejo, usam-se dois esquemas criptográficos,

1) Encriptação assimétrica, RSA, no acesso ao webservice, ou seja, um esquema de chave pública + chave privada de ambas as entidades, estas chaves são geralmente fixas

2) Encriptação simétrica, AES, chave única e que muda a cada request

A filosofia é então usar o RSA (chave publica/privada) para enviar em cada request a chave simétrica (AES) que muda constantemente (random), e os dados confidenciais propriamente ditos são encriptados com a chave simétrica (ou ambas na prática).

Usam um esquema para mandar a chave de outro.

Agora a parte que ainda não entendi bem, a chave publica das Finanças vem no tal certificado, no de testes por exemplo ? E ao instalarmos o certificado no nosso PC o Windows cria/anexa ao mesmo certificado a nossa chave privada ?

Ou tudo isso é independente do certificado, que tem outra finalidade, e as finanças além do certificado enviam uma chave pública ?

Outra questão é a forma de envio, vejo que todos estão a optar pelo construção e post do xml, e que não conseguiram usar service reference, que me pareceria a forma mais apropriada. Já alguém percebeu quais são as dificuldades nesse aspecto ?

Agradecia alguma "luz" sobre o assunto. Obrigado desde já.

Edited by Alfa
Link to comment
Share on other sites

Olá a todos,

.........

Outra questão é a forma de envio, vejo que todos estão a optar pelo construção e post do xml, e que não conseguiram usar service reference, que me pareceria a forma mais apropriada. Já alguém percebeu quais são as dificuldades nesse aspecto ?

........

Referes-te a usar Soap/proxy com base no ficheiro WSDL ? Se é isso tambem gostaria de perceber. Nunca tinha usado web services e pouco percebo do assunto .... mas com a recente e rapida experiencia adquirida as tentativas de me ligar com o auxilio do WSDL falharam porque o software que uso não reconhece a estrutura do WSDL da AT. (funciona perfeitamente com outros webservices).

Link to comment
Share on other sites

Alguém consegue anular um documento submetido? ao tentar faze-lo, retorna-me o erro -99 - erro inesperado! :s

Bem, ao menos dá o erro -99 🙂

Eu não tenho a certeza, mas penso que quando foi inserido o campo InvoiceStatus, se manda-se-mos 2 vezes o mesmo documento mas um com "N" e outro com "A" no estado do documento, o 2º retornava "Documento duplicado". Se assim era, quer dizer que estão a mexer nisso..

Eles não respondem aos emails!! Coloquei essa questão já no início de Dezembro, novamente no fim do mês, e hoje tornei a mandar, e dizem sempre o mesmo.. relativamente a este tipo de assunto é encaminhado para os serviços competentes. Claro que não mando sempre o mesmo texto 🙂 vou acrescentando outras dúvidas.

Edited by RaulLima
Link to comment
Share on other sites

Bom dia, sou novo aqui no forum, mas gostaria de parabenizar o ótimo trabalho de todos vcs!!! .

Bom antes de mas nada me deram a missão de criar um modulo para AT!!??, bom tive a ler um bocado a documentação deles e os posts de vcs e fiquem com umas duvidas:

1º como crio o CSR (Certificate Signing Request)?

2º como utilizo o TestesWebservices.pfx disponibilizados por eles ( username,password)

3 º copie uns códigos aqui de vcs (nomeadamente em vb.net) e só me retorna o erro (O servidor remoto devolveu um erro: (500) Erro interno de servidor.) no webresponse fica assim

<?xml version='1.0' ?>
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
 <env:Body>
   <env:Fault>
     <faultcode>env:Client</faultcode>
     <faultstring>Internal Error</faultstring>
   </env:Fault>
 </env:Body>
</env:Envelope>

me ajudem tenho pouco tempo para entregar isso!!

Link to comment
Share on other sites

Boas pessoal sou novo a programar em PHP e tenho tido problemas em conseguir por o módulo da AT a funcionar.

Mas penso que o meu problema poderá estar relacionado com o facto de no pedido eu não enviar o certificado "TesteWebservices".

Alguém me pode dar um exemplo de como o posso fazer? E já agora uma pergunta os campos H1 e H3 tém de ser válidos não pode

ser algo de teste?

Abraço

Link to comment
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.