Search the Community
Showing results for tags 'at'.
-
Olá! Eu estou tentando registrar uma fatura usando o webservice da AT, entretanto estou a receber a seguinte resposta: <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <env:Body> <env:Fault> <faultcode>env:Client</faultcode> <faultstring>Internal Error</faultstring> </env:Fault> </env:Body> </env:Envelope> Ou seja, é muito genérico e não sei exatamente o que pode ser. Segue abaixo o meu xml de requisição: <?xml version='1.0' encoding='UTF-8'?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext"> <SOAP-ENV:Header> <wss:Security> <wss:UsernameToken> <wss:Username>5.....98/1</wss:Username> <wss:Password>wmA9UG...</wss:Password> <wss:Nonce>puvgt4OsVjdtScFES...</wss:Nonce> <wss:Created>lxhp8k+wv8SnqM2cvOkSRAInAa1YSf6liC7zOF2QUzU=</wss:Created> </wss:UsernameToken> </wss:Security> </SOAP-ENV:Header> <S:Body> <RegisterInvoiceRequest xmlns="http://factemi.at.min_financas.pt/documents"> <eFaturaMDVersion>0.0.1</eFaturaMDVersion> <AuditFileVersion>1.04_01</AuditFileVersion> <TaxRegistrationNumber>314322051</TaxRegistrationNumber> <TaxEntity>Global</TaxEntity> <SoftwareCertificateNumber>0</SoftwareCertificateNumber> <InvoiceData> <InvoiceNo>FT 2026/99255</InvoiceNo> <ATCUD>0</ATCUD> <InvoiceDate>2026-01-30</InvoiceDate> <InvoiceType>FT</InvoiceType> <SelfBillingIndicator>0</SelfBillingIndicator> <CustomerTaxID>999999990</CustomerTaxID> <CustomerTaxIDCountry>PT</CustomerTaxIDCountry> <DocumentStatus> <InvoiceStatus>N</InvoiceStatus> <InvoiceStatusDate></InvoiceStatusDate> </DocumentStatus> <HashCharacters>0</HashCharacters> <CashVATSchemeIndicator>0</CashVATSchemeIndicator> <PaperLessIndicator>1</PaperLessIndicator> <SystemEntryDate></SystemEntryDate> <LineSummary> <TaxPointDate>2026-01-30</TaxPointDate> <DebitCreditIndicator>C</DebitCreditIndicator> <Amount>10.00</Amount> <Tax> <TaxType>IVA</TaxType> <TaxCountryRegion>PT</TaxCountryRegion> <TaxCode>NOR</TaxCode> <TaxPercentage>23.00</TaxPercentage> </Tax> </LineSummary> <DocumentTotals> <TaxPayable>2.30</TaxPayable> <NetTotal>10.00</NetTotal> <GrossTotal>12.30</GrossTotal> </DocumentTotals> </InvoiceData> </RegisterInvoiceRequest> </S:Body> </S:Envelope> Por acaso eu estou deixar de passar algo? Obrigado pela atenção.
-
Bom dia, Eu comecei a desenvolver um projeto em c# para comunicar com a AT faturas/notas de crédito, guias de transporte, séries, etc. Existe alguma libraria ou template/projeto que me ajudem a ter a base do meu projeto para comunicação com a AT. Estou a ter alguma dificuldade em construir a parte dos headers e conseguir comunicar com a AT. Desde já obrigado e bom dia.
-
- webservices
- csharp
-
(and 1 more)
Tagged with:
-
Boa tarde a todos, Tenho estado a criar uma web api em .NET que vai buscar dados e ficheiro de entidades como AT, SS, ViaCTT, IEFP, IAPMEI, etc. Atualmente estou a utilizar a biblioteca Playwright para simular o browser em modo headless e retirar os dados dessa maneira mas para a AT e SS, pelo menos, gostaria de conseguir tirar a informação de maneira mais confiável e estive a procurar e encontrei um webservice da AT em SOAP mas parece me ser apenas para meia duzia de funcionalidades e ligado ao e-fatura logo mais focado em faturação e eu queria algo mais geral para tirar recibos de renda, declarações IVA e DMR. Na SS encontrei algo tambem de um webservice mas novamente parece me limitado. Tentei ainda fazer na AT através de HttpClient e usando o Burp para ver os parametros que eram passados e o caminho que se percorre nomeadamente redirects mas apesar de ter feito uma copia do processo em que retirava o csrf, o path, pathID, selectedAuthMethod e authVersion acabo por receber o erro 404 ou uma pagina em que diz "Tentou aceder a uma página apenas para utilizadores autenticados" quando faço o ultimo GET/POST a pagina final. Alguem sabe se existe alguma web api para retirar os dados da AT e/ou SS ou o que me falta para conseguir retirar estes dados com o HttpClient ?
-
Bom dia, Estou a começar a desenvolver a comunicação da Declaração Modelo 10 à Autoridade Tributária (AT). Pelo que estou a perceber da pouca informação que encontrei é necessário gerar um ficheiro .txt (estrutura de 172 caracteres por registo, ASCII, conforme o manual da AT). Agora, queria integrar o envio via WebService da AT Alguém já implementou o envio SOAP do Modelo 10? Procuro: O WSDL oficial ou endpoint atualizado da AT; Exemplo de SOAP request/response; Orientações sobre validação do certificado digital e formato esperado (PFX / PEM); Confirmação se é possível ambiente de homologação/teste para esta integração. Na AT nao consigo aceder a muitas informaçoes sobre o Modelo 10. Qualquer ajuda que possam dar agradeço.
-
Boas malta, tudo bem? Estou a trabalhar com PHP e a gerar PDFs, e queria saber que lógica vocês costumam usar para fazer quebras de página quando precisam que apareça no final de cada página uma linha do género: "A transportar: 123€" (ou seja, o subtotal que vai continuar na página seguinte). As bibliotecas de PDF que uso (tipo mPDF ou TCPDF) não fazem isto automaticamente, e queria implementar uma solução dinâmica. O problema é que não posso simplesmente definir um número fixo de linhas por página, porque as descrições dos artigos podem variar muito — umas são curtas e outras são enormes. Por isso, também não posso estar a definir alturas fixas nas linhas da tabela. Alguém já lidou com este problema e pode partilhar um pouco da lógica que implementou? Agradecia mesmo qualquer dica! Obrigado desde já 🙌
-
Boas, Estou a usar uma aplicação original das financas, em java, para a comunicação com a at. Esta aplicação usava um ficheiro saPubKey.jks e funcionava. Agora deixou de funcionar e o problema é que não sei como encaixar na aplicação e o que fazer com este certificado que nos mandaram (chave cifra publica at 2027.cer). Será que alguém me pode ajudar? Insiro abaixo o java SOAPClientMessageHeaderHandler que penso será onde tem de ser usado. Obrigado, JoãoDinis package pt.at.factemipf.core.webservices.proxy; import sun.misc.BASE64Encoder; import javax.xml.namespace.QName; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPFactory; import javax.xml.soap.SOAPHeader; import javax.xml.ws.handler.MessageContext; import javax.xml.ws.handler.soap.SOAPHandler; import javax.xml.ws.handler.soap.SOAPMessageContext; import java.io.PrintWriter; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.security.Key; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.TimeZone; import java.util.logging.Logger; public class SOAPClientMessageHeaderHandler implements SOAPHandler<SOAPMessageContext> { public enum CERTIFICATE { PROD("P", "sapubkey.prod", "Producao"), TESTES("T", "sapubkey.testes", "Testes"); private final String key, keyAlias, descricao; private CERTIFICATE(String key, String keyAlias, String desc) { System.out.println("36SoapMsgHandler"); this.key = key; this.keyAlias = keyAlias; this.descricao = desc; } public String getKeyAlias() { return keyAlias; } public String getDescricao() { return descricao; } public static CERTIFICATE get(String mode) { for (CERTIFICATE certificate : CERTIFICATE.values()) { if (certificate.key.equals(mode)) return certificate; } throw new IllegalArgumentException("certificado inexistente nao validado."); } } private static final String AUTH_NS = "http://schemas.xmlsoap.org/ws/2002/12/secext"; private static final String AUTH_PREFIX = "wss"; private static final String KS_PATH = "saPubKey.jks"; private static final String KS_PWD = "saKeyPubPass"; //private static final String KEY_ALIAS = "sapubkey.testes"; private Logger logger; private String userName; private String password; private CERTIFICATE ambienteCert; public SOAPClientMessageHeaderHandler(Logger logger, String userName, String password, CERTIFICATE ambienteCert) { System.out.println("73SoapMsgHandler"); this.logger = logger; this.userName = userName; this.password = password; this.ambienteCert = ambienteCert; } public boolean handleFault(SOAPMessageContext smc) { return true; } public void close(MessageContext mc) { } /** * adiciona header para autenticacao */ public boolean handleMessage(SOAPMessageContext smc) { boolean direction = (Boolean) smc.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY); if (direction) { try { // ---------------------- // ---- AUTENTICACAO ---- // ---------------------- // Generate simetric key used for this request. Nonce! final byte[] simetricKey = generateAESKey(); // logger.info("Chave sim�trica gerada"); // Encrypt with the simetric key and B64 encode the password final byte[] encryptedPassword = WSAutenticaTestCypherUtil.cypherCredential(simetricKey, password); final String b64EncryptedPassword = new BASE64Encoder().encodeBuffer(encryptedPassword); // logger.info("Password field encrypted and encoded: " + b64EncryptedPassword); // Encrypt with the simetric key and B64 encode the timestamp final byte[] encryptedTimestamp = WSAutenticaTestCypherUtil.cypherCredential(simetricKey, getTimestamp()); final String b64EncryptedTimestamp = new BASE64Encoder().encodeBuffer(encryptedTimestamp); // logger.info("timestamp encrypted and encoded: " + b64EncryptedTimestamp); // Encrypt with the SA public key and B64 encode the request simetric key (nonce) final Key publicKey = WSAutenticaTestCypherUtil.getPublicKeyFromKeystore(KS_PATH, KS_PWD, ambienteCert.getKeyAlias()); final byte[] encriptedSimetricKey = WSAutenticaTestCypherUtil.cypherRequestKey((PublicKey) publicKey, simetricKey); final String b64EncryptedSimetricKey = new BASE64Encoder().encodeBuffer(encriptedSimetricKey); // logger.info("Request simetric key encrypted and encoded:\n" + b64EncryptedSimetricKey); // ---------------------- SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope(); SOAPFactory soapFactory = SOAPFactory.newInstance(); // WSSecurity <Security> header SOAPElement wsSecHeaderElm = soapFactory.createElement( "Security", AUTH_PREFIX, AUTH_NS); SOAPElement userNameTokenElm = soapFactory.createElement("UsernameToken", AUTH_PREFIX, AUTH_NS); // Username SOAPElement userNameElm = soapFactory.createElement("Username", AUTH_PREFIX, AUTH_NS); userNameElm.addTextNode(userName); // Password SOAPElement passwdElm = soapFactory.createElement("Password", AUTH_PREFIX, AUTH_NS); passwdElm.addTextNode(b64EncryptedPassword); //Nonce SOAPElement nonceElm = soapFactory.createElement("Nonce", AUTH_PREFIX, AUTH_NS); nonceElm.addTextNode(b64EncryptedSimetricKey); //Created SOAPElement createdElm = soapFactory.createElement("Created", AUTH_PREFIX, AUTH_NS); createdElm.addTextNode(b64EncryptedTimestamp); userNameTokenElm.addChildElement(userNameElm); userNameTokenElm.addChildElement(passwdElm); userNameTokenElm.addChildElement(nonceElm); userNameTokenElm.addChildElement(createdElm); // add child elements to the root element wsSecHeaderElm.addChildElement(userNameTokenElm); // create SOAPHeader instance for SOAP envelope //SOAPHeader sh = envelope.addHeader(); SOAPHeader sh = envelope.getHeader(); // add SOAP element for header to SOAP header object sh.addChildElement(wsSecHeaderElm); } catch (Exception ex) { StringWriter sw = new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); String stacktrace = sw.toString(); logger.severe("Could not intercept and add WS Security Header\n\n" + stacktrace); } } return true; } private byte[] buildPasswordDigest(byte[] simetricKey, String timestamp, String password) throws UnsupportedEncodingException, NoSuchAlgorithmException { byte[] bytesNonce = simetricKey; byte[] bytesCreated = timestamp.getBytes("UTF-8"); byte[] bytesPassword = password.getBytes("UTF-8"); byte[] digestInput = new byte[bytesNonce.length + bytesCreated.length + bytesPassword.length]; System.arraycopy(bytesNonce, 0, digestInput, 0, bytesNonce.length); System.arraycopy(bytesCreated, 0, digestInput, bytesNonce.length, bytesCreated.length); System.arraycopy(bytesPassword, 0, digestInput, bytesNonce.length + bytesCreated.length, bytesPassword.length); MessageDigest md = MessageDigest.getInstance("SHA-1"); return md.digest(digestInput); } public java.util.Set<QName> getHeaders() { return null; } // --------------- // Utility Methods // --------------- private static byte[] generateAESKey() throws NoSuchAlgorithmException { return WSAutenticaTestCypherUtil.generateRequestKey(); } private static final SimpleDateFormat TIMESTAMP_FORMATER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'"); static { TIMESTAMP_FORMATER.setTimeZone(TimeZone.getTimeZone("UTC")); } private static String getTimestamp() throws ParseException { Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC")); return TIMESTAMP_FORMATER.format(c.getTime()); } }
-
Boa tarde, Peço ajuda para resolver o problema que estou a ter na comunicação com a AT utilizando o novo certificado de testes de 4096 bits. Não estou a conseguir obter resposta a partir da ajuda das finanças. O erro retornado é sempre o mesmo há vários dias. Obrigado PEDIDO <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header> <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wss:UsernameToken xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wss:Username>599999993/0037</wss:Username> <wss:Password>iC+7kWiVWwr02AiW0J1kPA==</wss:Password> <wss:Nonce>v+guvQbTgg3bPa1jw5nCr1dfMQE5CvgM8MqUkR1jQa2R2RiUFpLOrG8TmcNdXjNzfWHXBxlczLNavzpL7DteSCZgJ8Tr9ATc+T3OPdrC6ZYCAVCFdcPTgXI7vvrc4DHb3+etjQQFcgv4Id++PGr2Js5r5AoKXEuClLcKPF0wGL19gmzbYuqOaU4uhVVXV2NS9y6g71d3GldizP8BFvl17eqPvWpeRCfg1FCeeD2RWrqirx/+ixBgCyNzA1kG0lwPA6sLgrSCACzd14QeLClstc1L2YVzlCN9fEr3zzx+UWv9ISykkBKpnj95Nd3KQmQxrKejnzL46H3hJaIy+78xq1gSxfaQ+0LCJd5/La8D3jVxDt5xSER8idrqVmh6iq7kczSmNqfAuddWYXXtX+RDYw+Dxa92cerYTZS9I8L6BBpvWJrsWR2s1tUuuj0BBBQnpyVQ2b9idAwDSS5Co/reNIFt0UDtibf4ilJ56rwVjlFpLBx2sxegCYJBQABTj2tkDgwiKwGgXpr6EqGdeXj3VhuTmY1Vi3ojm5VEUoGVqhH65JV/F8xgy/sQP2x+T0kg1hn5Yja+cCv2NBvWBct+H5wyvRCB0+u0oM6BXQivhtSqyXSXucMUJBuMGj5RSG9hLkkzSU88pU7Cs4rGE2cElKm550BVh5KJHf4+JwkXyu4=</wss:Nonce> <wss:Created>PyLrqlZvg5mipAiXJTC5IWLpobBPYkxxu9WXyg17Xzs=</wss:Created> </wss:UsernameToken> </Security> <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://at.gov.pt/SeriesWS/consultarSeriesRequest</Action> </s:Header> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <consultarSeries xmlns="http://at.gov.pt/"> <dataRegistoDe xmlns="">2022-12-01</dataRegistoDe> <dataRegistoAte xmlns="">2025-12-31</dataRegistoAte> </consultarSeries> </s:Body> </s:Envelope> RESPOSTA HTTP Status: InternalServerError Internal Server Error Message Headers: X-Backside-Transport: OK OK Connection: close Strict-Transport-Security: max-age=31536000; includeSubDomains Content-Type: text/xml Empty ?: False Contents: <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <env:Fault> <faultcode>env:Server</faultcode> <faultstring>Erro - Resposta do Servidor </faultstring> <detail> <transactionID>0000000:5c457ae96857018607d649e7</transactionID> <timestamp>2025-06-21 19:01:32.000+00:00</timestamp> </detail> </env:Fault> </env:Body> </env:Envelope>
-
-
ChaveCifraPublicaAT2027 Ver Ficheiro Chave pública do Sistema de Autenticação de cifra para a comunicação via Web Services da AT. Ficheiros incluídos: Chave Cifra Publica AT 2027.cer Chave Cifra Publica AT 2027.p7b Validade: 15/04/2025–15/04/2027 Submetido por Rui Carlos Submetido em 05/06/2025 Categoria Outros Licença Website https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Pages/default.aspx Submetido pelo Autor? Não
-
Imagino que alguns de vós já tenham feito este processo. Disseram-me que é relativamente simples o processo. Eu tenho um projecto que necessita desta componente, e não quero dependências de terceiros. Alguém que já fez teria interesse em vender o que fez, ou ajudar a certificar? Abraço a todos
-
Bom dia a todos. Tenho um software de gestão de cursos/workshops. Os meus clientes são professores ou qualquer pessoa que queira vender cursos online – utilizam a plataforma para gerir os seus cursos e integram-na no seu website para que os seus clientes possam comprar os cursos. Atualmente, estou integrado com o Stripe Connect – ou seja, todas as compras são processadas através deste gateway (sei que não é o mais indicado para Portugal, mas... é o que utilizo por agora). Comecei a vender este software em Portugal e percebi que ele precisa de passar pelo processo de certificação pela Autoridade Tributária (AT) para a emissão de faturas válidas – atualmente, é emitido um simples recibo sem valor fiscal. A minha dúvida é como proceder neste processo. Imagino que o meu software precise de gerar faturas com os elementos obrigatórios exigidos pela AT, certo? Uma equipa de inspetores da AT também terá de analisar o software? Preciso estimar o tempo e os custos que terei com a equipa de programadores para a certificação deste software. É um processo muito difícil? Devo consultar um contabilista? Penso em alternativas, como integrar o meu software com um software de faturação já certificado, como o Moloni. Não sei se isso seria mais rápido do que certificar o meu próprio software. Resido em Espanha e não conheço bem a legislação portuguesa. Alguém poderia ajudar-me? Muito obrigado.
-
Olá a todos do fórum. Desde esta manhã que temos problemas na ligação Webservice AT para envio da guia de circulação. Está funcionando há anos até hoje. Assim que carregamos o certificado e nos conectamos ao AT obtemos este erro: "WSRequestBuilder.comunicacionHTTPS:java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found." A data está correta, o certificado não expirou... Isso já aconteceu com alguém? Você pode me ajudar por favor?
-
Boa Tarde! Como sabem certamente existem vários serviços Webservices de comunicações a AT (WS Guias, WS Faturas , WS Series, etc..) Com tantos serviços e permissões necessárias que o utilizador criado para o efeito têm de ter, queria saber se alguém sabe se existe uma maneira de validar se o utilizador têm permissões / Acessos a determinados WebServices. Visto que são WebServices diferentes será que existe alguma maneira de validar quais as permissões que ele tem ou nao? Desde já obrigado Com os melhores cumprimentos
-
Boa tarde. Alguém sabe se existe e onde obter a definição do webservice para consulta na AT da situação de cliente fornecedor pelo NIF ? Se tem atividade aberta ou não ? Na gestão de utilizadores do portal da AT existe uma opção de acesso ICF - consulta de clientes / fornecedores. Será apenas para o portal ou existe também webservice ? Obrigado.
-
Bom dia Alguém poderia disponibilizar o código para envio de GT à AT via Webservice em C# ou VB? Obrigado
-
Boa tarde, Ando a tentar perceber como colocar no meu SW a comunicação de faturas taxfree, mas não encontro a documentação das finanças a descrever a implementação do WS https://servicos.portaldasfinancas.gov.pt:715/TaxFreeServiceImplService, Alguém que tem declaração de TaxFree, como está a realizar o processo?
-
Bom dia! Como faturar um pagamento parcial feito num restaurante quando alguém pretende pagar um valor fixo que não corresponde exatamente a uma combinação de artigos? Exemplo: Estou a almoçar com um amigo, vieram para a minha mesa 2 bitoques (15 € cada um) e 2 jolas (2 € cada uma). Total a pagar 34 €. Eu preciso de ir embora mais cedo, chego à caixa e digo que quero pagar sobre a minha mesa 20 €, o meu amigo depois pagará o restante. Como é que eu faturo isto? Que linha(s) de venda é que a Fatura simplificada é suposto apresentar? Devo aplicar regras de três simples sobre as quantidades consumidas até acertar no valor entregue, é isso? Coloco uma linha genérica com o valor total pago? Nesse caso, com que descrição? Muito obrigado desde já 🙏
-
Para quem esta a testar o endpoint de testes, este endpoint não esta a funcionar! Retorna o código 99 - Erro interno. Solucionei o problema ao gerar o certificado digital para aceder o endpoint de produção este é o endpoint que realmente funciona. Em resumo os endpoints de testes da AT não são muito confiaveis, caso retorne o código mencionado acima, tente sempre o de produção.
-
Bom dia, Estou a tentar desenvolver um módulo em C# que permita o envio automático de documentos emitidos para a AT. Utilizei o ficheiro fatcorews.wsdl e utilizando o utilitário svcutil.exe crie o respectivo ficheiro em .CS. O problema agora é utilizar este ficheiro gerado. Sei que primeiramente é necessário um pedido de autenticação e só depois é possível fazer o envio de um documento. Para já cria somente utilizar o método RegisterInvoiceRequest e ver o que dá. Alguém por aqui consegue-me dar uma ajuda ? Obrigado
-
Boas a todos, Tenho duvida no campo: 1.6.14.4 – Indicador Débito/Crédito (DebitCreditIndicator). Segundo a documentação a AT - https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Faturacao/Fatcorews/Documents/Comunicacao_dos_elementos_dos_documentos_de_faturacao.pdf Ao enviar uma Factura ou Nota de débito para o Webservice, este indicador deve ser D ou C
