Jump to content

Envio DMR (AT) via webservices.


desconfiado

Recommended Posts

Vocês sabem se o certificado para testes disponibilizado em https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Faturacao/Paginas/default.aspx, pode ser utilizado para os serviços da declaração mensal de remunerações ou é preciso solicitar outro à at?

Edited by Rafael Faria
Link to comment
Share on other sites

4 horas atrás, Rafael Faria disse:

Vocês sabem se o certificado para testes disponibilizado em https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Faturacao/Paginas/default.aspx, pode ser utilizado para os serviços da declaração mensal de remunerações ou é preciso solicitar outro à at?

Sim, o certificado de testes é único para todos os Webservices

 

  • Thanks 1
Link to comment
Share on other sites

Em 11/10/2022 às 16:37, Rafael Faria disse:

Boas, fiz isto:

byte[] ksBytes = ks.Key;
byte[] time = Encoding.UTF8.GetBytes(timestamp);
byte[] pwd = Encoding.UTF8.GetBytes("pass");

byte[] combined = new byte[ksBytes.Length + time.Length + pwd.Length];
Array.Copy(ksBytes, combined, ksBytes.Length);
Array.Copy(time, 0, combined, ksBytes.Length, time.Length);
Array.Copy(pwd, 0, combined, ksBytes.Length + time.Length, pwd.Length);

 

E funcionou?

Supostamente não consegues fazer depois o SHA1 de um array.

Link to comment
Share on other sites

2 horas atrás, p3druh77 disse:

E funcionou?

Supostamente não consegues fazer depois o SHA1 de um array.

Sim funcionou, eu vou colocar aqui o código para perceberes melhor:

private HeaderInfo getHeaderInfo(string username, string password, string timestamp)
		{
			HeaderInfo headerInfo;

			RijndaelManaged ks, rm;

			Critografia criptografia;

			string encryptedBase64Password, encryptedDigestedBase64, nonce;

			byte[] utf8EncodedPassword, utf8EncodedTimestamp, utf8EncodedKs, encryptedUtf8EncodedPassword, combinedPassTimeAndKs, sha1CombinedPassTimeAndKs;

			ks = new RijndaelManaged { KeySize = 128, BlockSize = 128 };

			criptografia = new Critografia();

			rm = criptografia.GetRijndaelManaged(ks.Key);

			utf8EncodedPassword = Encoding.UTF8.GetBytes(password);

			encryptedUtf8EncodedPassword = criptografia.Encrypt(utf8EncodedPassword, rm);

			encryptedBase64Password = Convert.ToBase64String(encryptedUtf8EncodedPassword);

			utf8EncodedPassword = Encoding.UTF8.GetBytes(password);

			utf8EncodedTimestamp = Encoding.UTF8.GetBytes(timestamp);

			utf8EncodedKs = ks.Key;

			combinedPassTimeAndKs = new byte[utf8EncodedKs.Length + utf8EncodedTimestamp.Length + utf8EncodedPassword.Length];

			Array.Copy(utf8EncodedKs, combinedPassTimeAndKs, utf8EncodedKs.Length);

			Array.Copy(utf8EncodedTimestamp, 0, combinedPassTimeAndKs, utf8EncodedKs.Length, utf8EncodedTimestamp.Length);

			Array.Copy(utf8EncodedPassword, 0, combinedPassTimeAndKs, utf8EncodedKs.Length + utf8EncodedTimestamp.Length, utf8EncodedPassword.Length);

			using (SHA1Managed sha1 = new SHA1Managed())
			{
				sha1CombinedPassTimeAndKs = sha1.ComputeHash(combinedPassTimeAndKs);
			}

			encryptedDigestedBase64 = Convert.ToBase64String(criptografia.Encrypt(sha1CombinedPassTimeAndKs, rm));

			nonce = criptografia.RSA(ks.Key);

			headerInfo = new HeaderInfo()
			{
				Username = username,
				Password = encryptedBase64Password,
				Nonce = nonce,
				Digest = encryptedDigestedBase64,
				Timestamp = timestamp
			};

			return headerInfo;
		}
		private string getTimestamp()
		{
			return String.Format("{0:yyyy-MM-ddTHH:mm:ssZ}", DateTime.UtcNow);
		}
public class HeaderInfo
	{
		public string Username { get; set; }

		public string Password { get; set; }

		public string Nonce { get; set; }

		public string Timestamp { get; set; }

		public string Digest { get; set; }
	}
public class Critografia
	{
		public string RSA(byte[] key)
		{
			RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

			X509Certificate2 certificate = new X509Certificate2(@"Files\Certificates\TestesAT\ChaveCifraPublicaAT2023.cer");

			RSA = (RSACryptoServiceProvider)certificate.PublicKey.Key;
			return Convert.ToBase64String(RSA.Encrypt(key, false));
		}

		public RijndaelManaged GetRijndaelManaged(byte[] secretKeyBytes)
		{
			var keyBytes = new byte[16];
			Array.Copy(secretKeyBytes, keyBytes, Math.Min(keyBytes.Length, secretKeyBytes.Length));
			return new RijndaelManaged
			{
				Mode = CipherMode.ECB,
				Padding = PaddingMode.PKCS7,
				KeySize = 128,
				BlockSize = 128,
				Key = keyBytes,
				IV = keyBytes
			};
		}

		public byte[] Encrypt(byte[] plainBytes, RijndaelManaged rijndaelManaged)
		{
			return rijndaelManaged.CreateEncryptor()
				.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
		}

		public byte[] Decrypt(byte[] encryptedData, RijndaelManaged rijndaelManaged)
		{
			return rijndaelManaged.CreateDecryptor()
				.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
		}
	}
Edited by Rafael Faria
Link to comment
Share on other sites

Em 12/10/2022 às 16:44, americob disse:

Sim, o certificado de testes é único para todos os Webservices

 

Boas, podes-me ajudar?

Eu criei um sub-utilizador na at para usar no ambiente de testes e tenho os meus webservices a funcionar, só que quando consumo um serviço qualquer relacionado com a dmr recebo a mensagem de que o utilizador não tem permissão para realizar aquela operação ("O autor SPA autenticado no security header não tem permissões para aceder a uma determinada operação").

Já entrei no portal das finanças com o super utilizador e dei as permissões todas ao sub utilizador, mas mesmo assim ainda recebo a tal mensagem.

Será que existe alguma opção escondida no Portal das Finanças que eu não tenha conhecimento?

Link to comment
Share on other sites

14 horas atrás, Rafael Faria disse:

Boas, podes-me ajudar?

Eu criei um sub-utilizador na at para usar no ambiente de testes e tenho os meus webservices a funcionar, só que quando consumo um serviço qualquer relacionado com a dmr recebo a mensagem de que o utilizador não tem permissão para realizar aquela operação ("O autor SPA autenticado no security header não tem permissões para aceder a uma determinada operação").

Já entrei no portal das finanças com o super utilizador e dei as permissões todas ao sub utilizador, mas mesmo assim ainda recebo a tal mensagem.

Será que existe alguma opção escondida no Portal das Finanças que eu não tenha conhecimento?

Eu ainda não tenho as DMR 100% testadas. 100% testadas e a distribuir só as DPIVA e Documentos de Transporte.

As DMR ainda são muito recentes.

Olhando para a lista das operações autorizadas, parece-me que ainda não está lá uma operação do género DMR por Webservice ou Declarações de Obrugações Acessórias por Webservice, portanto, por enquanto, só deves conseguir usar com o utilizador principal.

  • Thanks 1
Link to comment
Share on other sites

Boas a todos,

 

Estou a tentar ler Consultar as declaração DMR enviadas para a AT, mas estou a obter o erro "O servidor remoto devolveu um erro: (500) Erro interno de servidor."

não consigo fazer qualquer debug, porque dá erro la ligação ao servidor.

Este é o XML gerado no pedido:

<?xml version="1.0" encoding="utf-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:at="http://at.pt/wsp/auth" 
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" S:Actor="http://at.pt/actor/SPA" at:Version="2">
<wss:UsernameToken>
 <wss:Username>599999993/0037</wss:Username>
 <wss:Password Digest="2ayZlZTnnVQLbSFIHp1wc/YrYSc=">tNW90jDgfstkEYQ9nYsh+A===</wss:Password>
 <wss:Nonce>
UOxGfy0LfWaoLB/5Bi6maMrcJozScEvdpPWxWizL3MXDbxo7+I/DfYcD36UEgrlCqtqMGqOnFhwV4O5b1CEitEBxNoDg80Z9OOppIDyCkbexRz1neY91QHzCxwZifADx6/4+jIZom2X9ouQ6qV806lc+H4D64rINxYN7HDBQmUkjCpBNzg/1cd8LFMAudvtqKyC5hFtGipKqxlysZRRJax6O/u7aDsQHk5F7neqmoTTlcv9i8wHnFqmJsDab8fH1V6YGaZnzf92KabKmE5Fp+wolJkUfgJ0nCnBUo7TC9TUqFQilW+H2HCMIgHLc9RzxcDTDp1UNaf1sIHrKGDqC2w==
 </wss:Nonce>
 <wss:Created>2022-11-28T17:36:10.31Z</wss:Created>
 </wss:UsernameToken>
 </wss:Security>
</env:Header>
<S:Body>
<ns1:consultarDeclaracoesRequest xmlns:ns1="https://servicos.portaldasfinancas.gov.pt/oaatws/GestaoDeclarativaOAWebService/2021" 
 xmlns:ns0="https://servicos.portaldasfinancas.gov.pt/GestaoDeclarativaWebService/2021/beans">
<modelo>DMR</modelo>
</ns1:consultarDeclaracoesRequest>
</S:Body>
</S:Envelope>

Alguém consegue ajudar?

Link to comment
Share on other sites

Parece-me que ainda não funciona a DMR-AT.

Depois de várias tentativas em testes e em produção, tentei usar o teste direto no Portal e este responde:

"O ator SPA autenticado no Security Header não tem permissões para aceder a uma determinada operação."

mesmo usando a senha principal da empresa que, em princípio, deverá ter permissão para tudo.

Alguem tem mais informação?

Link to comment
Share on other sites

Em 06/12/2022 às 15:52, americob disse:

Parece-me que ainda não funciona a DMR-AT.

Depois de várias tentativas em testes e em produção, tentei usar o teste direto no Portal e este responde:

"O ator SPA autenticado no Security Header não tem permissões para aceder a uma determinada operação."

mesmo usando a senha principal da empresa que, em princípio, deverá ter permissão para tudo.

Alguem tem mais informação?

Tenta no ambiente de produção. Obtive o mesmo erro no Servidor de teste e quando alterei para o de produção funcionou.

Link to comment
Share on other sites

Em 07/12/2022 às 15:22, s0me0ne disse:

Tenta no ambiente de produção. Obtive o mesmo erro no Servidor de teste e quando alterei para o de produção funcionou.

Obrigado.

De facto já fiz tantas tentativas que me baralhei. Em produção funciona.

Quer dizer que vou ter de fazer os testes em ambiente de produção com dados reais.

Tenho até segunda-feira dia 12, ultimo dia do prazo, em que posso fazer todas as substituições que quiser e mais alguma sem penalizações. Se não conseguir, lá terá de ficar para o próximo mês.

Outro assunto,
Entretanto, já deste uma olhada na Tabela de Retenção na Fonte de IRS para o 2º semestre de 2023? Aquelas formulas são tipicas da matemática que aprendi na faculdade, não faço a mínima ideia onde foram inventar aqueles valores e coeficientes.
Se um empregado "normal" quiser conferir se a sua retenção foi bem feita vai ter de usar calculadora científica.

 

Link to comment
Share on other sites

Em 07/12/2022 às 16:41, americob disse:

Outro assunto,

Entretanto, já deste uma olhada na Tabela de Retenção na Fonte de IRS para o 2º semestre de 2023? Aquelas formulas são tipicas da matemática que aprendi na faculdade, não faço a mínima ideia onde foram inventar aqueles valores e coeficientes.
Se um empregado "normal" quiser conferir se a sua retenção foi bem feita vai ter de usar calculadora científica.

 

Isto faz-me lembrar os jogadores de sueca, baralhar para ficar tudo na mesma. Ou seja, é semear agora para ir colher mais tarde, ou pior, o cinismo de colocar uma formula mais complexa para que os contribuintes desistam de solicitar a nova formula de cálculo, e no entretanto fez o "papelaço" de estar preocupado com as dificuldades do contribuinte.

Link to comment
Share on other sites

Em 02/02/2023 às 15:16, Cu5co disse:

Isso é considerado uma Obrigação Acessória, o mesmo serviço serve para várias declarações, entre elas a DMR:

https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Obrigacoes_Acessorias_Webservice/Paginas/default.aspx

 

Link to comment
Share on other sites

Em 02/02/2023 às 21:52, americob disse:

Isso é considerado uma Obrigação Acessória, o mesmo serviço serve para várias declarações, entre elas a DMR:

https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Obrigacoes_Acessorias_Webservice/Paginas/default.aspx

 

Sim eu sei, mas qual o link do wsdl para esse serviço ? O Link disponível no site da AT aponta para um ZIP e queria saber se existe algum link que aponte diretamente para o WSDL.

Edited by Cu5co

Carlos Matos 💪

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.