Utilizar Webservices da AT - Page 431 - Dúvidas e Discussão de Programação - Portugal-a-Programar
Temos um cliente com windows XP que até há alguns dias comunicava documentos de transporte sem problemas e hoje começou a receber a seguinte mensagem:
"could not establish trust relationship for the ssl/tls secure channel on servico.portaldasfinancas.pt:401"
Estive a verificar os serviços no portal do efactura e parecem estar a funcionar correctamente. Também ninguém mais se queixou.
Verifiquei o nosso certificado e está registado na store correctamente e com validade até 2022.
A chave publica da AT termina em Julho mas para já ainda está válida.
Alguém sabe o que poderá ter acontecido?
Também parece o problema do certificado root expirado discutido neste tópico recentemente (vê as mensagens do início do mês).
12 hours ago, Rui Carlos said:
Parece o problema com o certificado root expirado discutido na página anterior.
Vê, por exemplo, esta mensagem: https://www.portugal-a-programar.pt/forums/topic/57734-utilizar-webservices-da-at/?do=findComment&comment=618370
Obrigado Rui!! Não tinha visto o post! Eu bem que procurei por aqui mas não procurei o suficiente. Instalei os 2 certs no dispositivo e fez a comunicação. Já me safei, obrigadíssimo!!
desconfiado 46
Tive que instalar os certifcados "Sectigo's USERTrust RSA CA root certificate" que fiz download aqui https://www.ssl.com/blogs/addtrust-external-ca-root-expired-may-30-2020/ .
Isso resolveu-me o problema.
Suponho que isto vá acontecer a mais clientes.
Já consegui alguma evolução face ao meu último post e finalmente obtive resposta do lado de lá 😀
No entanto ainda continuo com problemas:
<AuthenticationFailed>
<Message>Nonce: Cifra da chave pública inválida</Message>
As credenciais que estou a usar são as de teste (supostamente) 599999993/37 com a password teste1234.
PS: Código que pode ser relevante (estou a fazer load da sapubkey.testes que está dentro da saPubKey.jks e a assinar o nonce com ela)
public static Key getPublicKeyFromKeystore(String keystorePath, String keystorePwd, String keyAlias) throws
KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
KeyStore ks = KeyStore.getInstance(KSConfiguration.KEYSTORE_TYPE.getValue());
Resource resource = new ClassPathResource(keystorePath);
ks.load(fis, keystorePwd.toCharArray());
Key key = ks.getCertificate(keyAlias).getPublicKey();
Edited June 24 by Mr Rick
virgilio baldaia 3
A chave publica da AT. tem validade ate 23 de Julho de 2020
( Chave Cifra Publica AT (Produção).cer ).
temos de esperar que envia outra ?
ou temos de pedir um novo certificado ?
29 minutes ago, virgilio baldaia said:
Sim, temos que esperar. Já da última vez foi à última da hora!
Submeti um pedido no e-Balcão e a resposta foi esta:
Uma vez que se aproxima a data de expiração do certificado "Chave Publica da AT" (23/07/2020), gostaria de saber se existe alguma previsão de disponibilização da mesma aos produtores de software, que têm que a disponibilizar aos seus clientes.
17-06-2020 10:29:51
O processo de renovação do certificado de chave pública encontra-se em execução.
Os produtores de softwre serão informados da disponibilização do Certificado no Portal das Fimanças e/ou por envio de mensagem de correio eletrónico.
4 horas atrás, md mad disse:
bem, termos de aguardar...
Estou basicamente a enviar um pedido semelhante ao que está no exemplo e estou a ter a resposta abaixo. Alguém me pode ajudar?
<env:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body xmlns:ns0="http://servicos.portaldasfinancas.gov.pt/faturas/">
<ns0:RegisterInvoiceResponseElem>
O código para fazer build do request:
<wss:Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wss:Password>FKB1JMr+7QDg4jG1lbCsxQ==</wss:Password>
<wss:Nonce>KvldnTFtXGMb1j7sJjY1XTY57kbS6AxIU750pR4FQrig9CgeXwkkPHEQtErjRzuP2IcZYvV4Rp+4&#13;
NT6s5OpNSGrFPg2w08r+jJBPIvWGvFqUK2huJF1KLQzkAQHbctZFjiG29GN3tvYcdCTQylIkdAtp&#13;
QV/o4PHgU1VYFg0472MkJ1oeHnR99VJA7/mcbLsG/giRp48DnsVKrkVnmxXOdOfXJWSoGX3N3N3S&#13;
r8igeUZ6ijp5YflU2lHHojCurOFwUY67IvZ4BKn8knnqHtVR1SH+JXdBA2VQqeinNwgU7PmibHEN&#13;
DWWLUUWZHVQ3M6NDKcO7ifOv8wkTT2b0ZHrptg==</wss:Nonce>
<wss:Created>qb0mB47WzmHs9PZZ1JMlNuK3SF7FXLVQ+JA/UFjxkRg=</wss:Created>
<S:Body xmlns:ns2="http://servicos.portaldasfinancas.gov.pt/faturas/">
<ns2:RegisterInvoiceElem>
Boa tarde pessoal, estou com um problema que já tinha sido reportado antes, desde há uns tempos para cá que o pedido de comunicação de guias está a retornar "Could not connect to host" aconteceu de uma momento para o outro sem razão aparente. alguém sabe se alguma coisa foi alterada ?
url de produção
url de desenvolvimento
não funciona em nenhuma das situações
Edited June 26 by jmta_92
Boas pessoal, estou aqui com um dilema 😂😂
Tenho um cliente que tem um cliente que têm a sede em UK, e um armazém em PT para onde vai a mercadoria, ora ele diz que a guia de transporte deve ser comunicada a AT pois o local de descarga é em PT, até aqui tudo bem, mas se enviar o XML para o WebService da este erro:
33 element 5.2.2.2: element Country has value GB, not fixed value PT sgdtws.gdgt
O meu XML esta assim:
<TaxRegistrationNumber>123456789</TaxRegistrationNumber>
<CompanyName>Teste 2</CompanyName>
<Addressdetail>Rua Teste, n.º 00 1</Addressdetail>
<DocumentNumber>GT X/1</DocumentNumber>
<MovementDate>2020-06-29</MovementDate>
<CustomerTaxID>GB156185302</CustomerTaxID>
<Addressdetail>MAGIC MOUNTAIN RD, n.º 24</Addressdetail>
<PostalCode>9542-000</PostalCode>
<CustomerName>Paypal</CustomerName>
<Addressdetail>Rua X 4000-022, Porto</Addressdetail>
<PostalCode>4000-022</PostalCode>
<MovementEndTime>2020-06-29T10:43:00.00</MovementEndTime>
<MovementStartTime>2020-06-29T10:43:00.00</MovementStartTime>
<ProductDescription>Simples 11</ProductDescription>
<UnitOfMeasure>m2</UnitOfMeasure>
<UnitPrice>112</UnitPrice>
O XSD das finanças esta fixo o PT na validação do campo Contry! Alguém têm este caso o que fazem? Mandam o Country PT a mesma? Metem o local de descarga na morada do cliente? Não enviam os documentos (nós não enviávamos)
RicPe 0
6 minutes ago, laboss said:
Isso será um caso de negócio, de qualquer forma as mercadorias para localizações não nacionais, deverão ter declarações de exportação, seja de transito comunitário ou não e creio que neste caso especifico já não se aplica o comunitário.
Existindo uma declaração de exportação ela já contém a descrição dos bens e identificação dos transportes, até a fronteira e de saída do país.
11 minutos atrás, laboss disse:
O Webservice para Documentos de Transporte, só permite envio de documentos que se refiram a mercadoria transportada no território Nacional
Toda a mercadoria que segue de imediato para fora do País ( nestes casos a Guia de Transporte menciona o cliente e morada estrangeira ), não obriga a envio do documento por Webservice
A mercadoria é para ser deixada num armazém em PT dai a duvida, mas entretanto encontrei no documento da OCC o seguinte texto :
12. As transações intracomunitárias estarão abrangidas pela obrigação da emissão do documento de transporte do RBC? Não. No entanto dever-se-á atender a que caso o transporte intracomunitário seja acompanhado com os CMR (ou factura intracomunitária, etc..) emitidos com os destinatários finais localizados em território nacional, ainda que o transporte seja efectuado até um armazém e expedidos desse armazém para os clientes finais noutra viatura ou noutro dia, o CMR continua a servir para acompanhar os bens continuando a não ser necessária a emissão de um DT nos termos do RBC. Outra situação diferente poderá ser a emissão do CMR com o destinatário do armazém logístico e posteriormente a expedição de bens para os clientes finais. Neste caso, no transporte posterior, os bens já terão que ter um DT nos termos do RBC.
https://www.occ.pt/fotos/editor2/sebc013c.pdf
Olá a todos. Sou novo no forum, mas usei bastante informação daqui (obrigado :) para avançar com a minha implementação em NodeJS do cliente WS da AT, para envio de declarações periódicas de IVA.
Consegui ultrapassar vários obstáculos: certificados SSL, certificados de cliente, etc etc. No entanto, já numa fase em que tudo "deveria funcionar", bati numa parede: Tenho o erro que já apareceu aqui varias vezes (com o endpoint de testes - não posso experimentar com o de produção ) :
{ Fault:
{ faultcode: 'Client.Authentication',
faultstring: 'Ocorreu um erro na autenticação dos contribuintes.',
faultactor: null,
{ AuthenticationException:
{ AuthenticationFailed:
{ Code: '8',
Message: 'Nonce: Cifra da chave pública inválida',
NumberOfTriesRemaining: '-1',
Actor: 'http://at.pt/actor/SPA' } } } } }
Estou a fazer tudo segundo o manual da AT: 128 random bits, cifrados com RSA com PubKey da AT, tudo codificado em Base64 no fim.
No entanto, recebo sempre este erro. Estou a utilizar a chave pública que vem no ZIP de certificados de teste no E-Factura (https://faturas.portaldasfinancas.gov.pt/testarLigacaoWebService.action). Também já experimentei extrair a chave do PFX de testes (e converter para PEM), mas recebo o mesmo erro.
Segue o meu código para criar o Nonce:
Webservice.js:
// AT defines these initial 16 random bytes (128 random bits) as "Ks", so we're doing the same for clarity
const ks = getRandomBytes(16);
// Note: Nonce = base64 ( Rsa ( randomBytes, AtPubKey  ) )
debug({ serverPublicKey: this.serverPublicKey.toString('utf8'), ks });
const nonce = rsaEncrypt64(ks, this.serverPublicKey);
// 16 bytes = 128 bits
export const getRandomBytes = (size = 16) => {
return crypto.randomBytes(size);
export const rsaEncrypt64 = (byteBuffer, key) => {
let encryptBuff = crypto.publicEncrypt(key, byteBuffer);
return encryptBuff.toString('base64');
Alguém tem alguma ideia do que possa estar a fazer errado? Começo a pender para a ideia de ter a chave pública errada, porque não encontro mais explicações possíveis.
13 minutos atrás, jmsimoes disse:
Tendo estado envolvido no desenvolvimento em NodeJS a única solução que consegui encontrar para contornar esse problema, foi alterar uns ficheiros PHP que alguém disponibilizou aqui para que em vez de fazer a comunicação, recebe como argumento o ficheiro com o body e completa com a informação do cabeçalho e devolve o xml completo.
No NodeJS construo então o body, corro o ficheiro PHP e envio o XML que recebo para o WebService da AT.
Tentei imensos packages que fui encontrando mas tinha sempre esse erro a única solução que encontrei foi a que descrevi.
Edited June 29 by jmsimoes
Engraçado que em Android também não consigo passar desse patamar, mesmo usando as funções deles para encriptar, aparece esse mesmo erro :///
Isto foi a resposta que me deram da AT:
O erro descrito indica que o erro poderá estar na construção do header do pedido SOAP. Verifique se a estrutura do pedido cumpre as regras do "Manual de Integração de Software - Comunicação dos Documentos de Transporte à AT" publicado no portal das finanças (endereço: http://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Documents/Comunicacao_Dados_Documentos_Transporte.pdf).
Os ficheiros para testes tens que requisitar, enviando um mail para lá. Está no manual como fazer isso. Em 24h devem enviar isso.
Edited June 29 by m_s_f_@hotmail.com
1 hour ago, m_s_f_@hotmail.com said:
Pois. Pensei em enviar uma questão para o e-balcão também, mas imaginei que a resposta fosse algo no género dessa. É basicamente "Estás a fazer qualquer coisa errada", que ajuda imenso. De qualquer forma obrigado pela info!
Pois, não pedi certificados de teste, apenas de produção. Assumi que o ZIP com certs de teste do e-factura fosse suficiente. Acabei de fazer o pedido. O engraçado é que o e-mail que está no manual devolve uma resposta automática a dizer que foi abandonado, e para se fazer o pedido no e-balcão, mas responderam na mesma:
Em resposta à vossa mensagem, enviamos o seguinte:
1. Certificado digital de testes ("TesteWebservices.pfx")
2. Chave publica para a cifra da password de acesso ("ChaveCifraPublicaAT2020.cer")
A chave para instalação do certificado referido no ponto 1, é "TESTEwebservice".
As instruções para comunicação de dados por Webservice à Autoridade Tributária e Aduaneira podem ser consultadas no documento disponível no Portal das Finanças, selecionando 'Apoio ao Contribuinte', e a opção respectiva.
Ou seja, estou de volta à estaca zero. Já estou a usar este certificado (chave pública), mas continuo com o erro "Nonce: Cifra da chave pública inválida".
[ EDIT: A chave que me enviaram é a mesma que está no ZIP do portal de produtores de software ]
Quaisquer ideias são bem-vindas. Obrigado pelo feedback até agora
albertosilva 23
1 hora atrás, jmsimoes disse:
Apesar de fortemente desaconselhado pela AT, a única forma efetiva que encontro de fazer testes é mesmo em produção, e passando algo de "errado", como uma data de envio ultrapassada, para que seja devolvido um erro "controlado", ou então anulando em seguida no portal.