Jump to content
cjulio

Utilizar Webservices da AT

Recommended Posts

jncevcosta
1 hora atrás, jose.cordeiro disse:

@jncevcosta

boas em nodejs fiz assim:
 


....

var https = require('https');
var parseString = require('xml2js').parseString;
...

var financasOptions = 
{
  hostname: "servicos.portaldasfinancas.gov.pt",
  port: 401,  //PRODUCAO
  path: "/sgdtws/documentosTransporte",
  method: "POST",
  pfx: fs.readFileSync('/opt/FinancasCert/' + GTData.taxRegistrationNumber + '.pfx'),
  cert: fs.readFileSync('/opt/FinancasCert/ChaveCifraPublicaAT_Prod.cer'),	
  passphrase: 'password ou passphrase',
  agent: false,
  rejectUnauthorized: false,
  /*secureProtocol: 'SSLv3_method',*/
  headers: 
  {
    "Accept": "text/xml",
    "Content-length": message.length,
    "Content-Type": "text/xml;charset=UTF-8",
    "SOAPAction": "https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/"
  }
};

var requestCode = https.request(financasOptions, function(requestCode)
{
  requestCode.on('data', function (chunk) 
  {
	parseString(chunk, function (err, result)
    {
	//tratas da resposta das finanças	
....
	
	});
  }).on('error', function(e)
  {
  	console.log("ReqError: " + e);
  }
});
requestCode.end(message); //o message é o XML (a guia de transporte)

na parte do ENVELOPE a password, nonce e created gero em Java simplesmente porque nao consigo fazer o mesmo algoritmo em JS 🤨

Espero que ajude.

Obrigado.

O XML passas como uma string ou lês com o readFileSync?

Estou a enviar como uma string e está a dar erro:

[ { faultcode: [ '33' ],
0|dcweb  |     faultstring:
0|dcweb  |      [ 'Incomplete markup or missing document element at offset 2490 of ' ],
0|dcweb  |     detail: [ 'sgdtws.gdgtqua' ] } ]

Pensei que estivesse alguma tag mal fechada, mas já validei o formato xml e diz que está bem construído.

Edited by jncevcosta

Share this post


Link to post
Share on other sites
jose.cordeiro
37 minutos atrás, jncevcosta disse:

Obrigado.

O XML passas como uma string ou lês com o readFileSync?

Estou a enviar como uma string e está a dar erro:


[ { faultcode: [ '33' ],
0|dcweb  |     faultstring:
0|dcweb  |      [ 'Incomplete markup or missing document element at offset 2490 of ' ],
0|dcweb  |     detail: [ 'sgdtws.gdgtqua' ] } ]

Pensei que estivesse alguma tag mal fechada, mas já validei o formato xml e diz que está bem construído.

string

Ve se tens acentos na string

....replace(/à/g, 'a').replace(/á/g, 'a').replace(/ã/g, 'a').replace(/â/g, 'a').
            replace(/ç/g, 'c').
            replace(/è/g, 'e').replace(/é/g, 'e').replace(/ê/g, 'e').
            replace(/ì/g, 'i').replace(/í/g, 'i').
            replace(/ò/g, 'o').replace(/ó/g, 'o').replace(/õ/g, 'o').replace(/ô/g, 'o').
            replace(/ù/g, 'u').replace(/ú/g, 'u');

cuidado que por exemplo a morada  nao pode passar os 50 chars

curiosamente em JS se mando com acentos falha (em Java nao falhava).

Edited by jose.cordeiro
acrescentar um detalhe

Share this post


Link to post
Share on other sites
jncevcosta
24 minutos atrás, jose.cordeiro disse:

string

Ve se tens acentos na string


....replace(/à/g, 'a').replace(/á/g, 'a').replace(/ã/g, 'a').replace(/â/g, 'a').
            replace(/ç/g, 'c').
            replace(/è/g, 'e').replace(/é/g, 'e').replace(/ê/g, 'e').
            replace(/ì/g, 'i').replace(/í/g, 'i').
            replace(/ò/g, 'o').replace(/ó/g, 'o').replace(/õ/g, 'o').replace(/ô/g, 'o').
            replace(/ù/g, 'u').replace(/ú/g, 'u');

cuidado que por exemplo a morada  nao pode passar os 50 chars

Retirando do cabeçalho o content-length já comunico.

Agora tenho o seguinte erro vindo da AT

[ 'Rejected:   |  Codigo: 10  |  Erro: Validade da credencial expirada(2019-07-31T15:12:44.0Z)  |  Tentativas Restantes: -1' ]

Que credencial é esta ? 

Estou a usar o pfx de testes da AT.

Share this post


Link to post
Share on other sites
jorang
2 minutos atrás, jncevcosta disse:

 


[ 'Rejected:   |  Codigo: 10  |  Erro: Validade da credencial expirada(2019-07-31T15:12:44.0Z)  |  Tentativas Restantes: -1' ]

Que credencial é esta ? 

Estou a usar o pfx de testes da AT.

Esse erro ocorre quando a hora do server não está em sincronia com o OAL e/ou o pedido é enviado muito depois de ser gerado.

Share this post


Link to post
Share on other sites
jncevcosta
2 minutos atrás, jorang disse:

Esse erro ocorre quando a hora do server não está em sincronia com o OAL e/ou o pedido é enviado muito depois de ser gerado.

Fui agora ver e realmente o servidor está 2 minutos adiantado face ao correcto 🤦‍♂️

Share this post


Link to post
Share on other sites
americob
17 horas atrás, Raul Macedo disse:

Sim, confirma-se que o servidor de testes da AT não está a funcionar. Depois de obter vezes sem conta o erro 52, contactei a AT e confirmaram-me que o ambiente de testes não está a funcionar e não adiantam prazo para resolução. Pena que não deem essa informação de forma clara no site... perdemos imenso tempo a despistar o erro quanto afinal o servidor está inoperacional... enfim...

Mesmo no Portal da AT, em testes, aparece o erro 52!

>>>RECEIVED<<<
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<work:WorkContext xmlns:work="http://oracle.com/weblogic/soap/workarea/">rO0ABXdLABN3ZWJsb2dpYy5hcHAuc2dkdHdzAAAA1gAAACN3ZWJsb2dpYy53b3JrYXJlYS5TdHJpbmdXb3JrQ29udGV4dAAHMS4yMC4zMwAA</work:WorkContext>
</S:Header>
<S:Body>
<ns0:envioDocumentoTransporteResponseElem xmlns:ns0="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/">
<ResponseStatus>
<ReturnCode>52</ReturnCode>
<ReturnMessage>Não foi possível verificar se o utilizador tem permissões para aceder a esta operação.</ReturnMessage>
</ResponseStatus>
</ns0:envioDocumentoTransporteResponseElem>
</S:Body>
</S:Envelope>

Não estou a ver como alguém consiga comunicar em testes sem problemas.

Share this post


Link to post
Share on other sites
marcolopes
2 hours ago, americob said:

Mesmo no Portal da AT, em testes, aparece o erro 52!

Não estou a ver como alguém consiga comunicar em testes sem problemas.

Jul 31, 2019 7:57:33 PM org.dma.services.at.SOAPMessageHandler interceptAndRecordSoapMessage
INFO: 
>>>SENT<<<
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<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 Digest="SiFjD+vfTzU5suG5sF6XomUz9EEwgHDx1WHtCG5ANCE=">jSYNbsYgTf98+wChie7d2g==</wss:Password>
<wss:Nonce>mWXj6dg46AFXEqv3B8pePftcKFADzf6YCEabVEs4pP3gSZ2KoHNz/ul+3PknLM9d/4MHgdnodKbuRTIOE4U1/J+Wg4zMgRpq5P022da5MBpeS2gk0aNmeYtPJTn0GftNB8uLKTinBOfaRHrHvpOsQlBBfOUGls5kMXBlJN0pEcrGZTwS9i32Icx1nturHytfs4OPtVo764pNV7O0Gc7d+rwPbzim4Z5vzmz7H0BSEpk5DzzjcgMvGJhzSRPKIT0UuFeJK/mGutLDAtFAPJaFbsXX7LSN4opbKHDL4kHiCZXODnTaj2BFVe5sUDbW51YHwm06DSVrlwpxrqST40H7hA==</wss:Nonce>
<wss:Created>2019-07-31T18:57:39.670Z</wss:Created>
</wss:UsernameToken>
</wss:Security>
</S:Header>
<S:Body>
<ns2:RegisterInvoiceElem xmlns:ns2="http://servicos.portaldasfinancas.gov.pt/faturas/">
<TaxRegistrationNumber>599999993</TaxRegistrationNumber>
<ns2:InvoiceNo>CFA 2018/526726</ns2:InvoiceNo>
<ns2:InvoiceDate>2018-12-18</ns2:InvoiceDate>
<ns2:InvoiceType>FT</ns2:InvoiceType>
<ns2:InvoiceStatus>N</ns2:InvoiceStatus>
<CustomerTaxID>999999990</CustomerTaxID>
<Line>
<ns2:DebitAmount>100</ns2:DebitAmount>
<ns2:Tax>
<ns2:TaxType>IVA</ns2:TaxType>
<ns2:TaxCountryRegion>PT</ns2:TaxCountryRegion>
<ns2:TaxPercentage>23</ns2:TaxPercentage>
</ns2:Tax>
</Line>
<DocumentTotals>
<ns2:TaxPayable>23</ns2:TaxPayable>
<ns2:NetTotal>100</ns2:NetTotal>
<ns2:GrossTotal>123</ns2:GrossTotal>
</DocumentTotals>
</ns2:RegisterInvoiceElem>
</S:Body>
</S:Envelope>

Jul 31, 2019 7:57:35 PM org.dma.services.at.SOAPMessageHandler interceptAndRecordSoapMessage
INFO: 
>>>RECEIVED<<<
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<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>0</ReturnCode>
<ReturnMessage>Documento registado com sucesso.</ReturnMessage>
</ns0:RegisterInvoiceResponseElem>
</env:Body>
</env:Envelope>

0
Documento registado com sucesso.

Ninguém falou em documentos de transporte! :\

Testei a comunicação de FACTURAS.

Portanto, nem todas as comunicações estão com problemas... o WS de Transportes está down... o de facturas está UP!

Edited by marcolopes

The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
marcolopes
Jul 31, 2019 8:01:39 PM org.dma.services.at.SOAPMessageHandler interceptAndRecordSoapMessage
INFO: 
>>>SENT<<<
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<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 Digest="aO5dylompxM4rdKCVIAzS8mN7TUeMYYtc3w8pUURAPQ=">U5traY9OCKPg5w1sjz0pRQ==</wss:Password>
<wss:Nonce>SN98AF7IywH5qihdF53NmAprKQowlpN6Zvyu7JjEar/jvooGSZL8qlvpvA6dOB9hohSDYbSrF1TPSDoWWfaiuZ5AEaJANi/UXau3uk42BedTqNLJ0AZS0AxHk2XciwvR5Cr6jlC/7bkZaObBZcVVYOYNOGuaibA2U5ExVxKODFJULCHXPmUnYy2RZtzq8Rsnnh+SBeiXGoILRR2oEWwQpvQiABcdXKy05uUE9J7/Rx+6/C9bk+PRSya5vJOawVLnvxLcrUE5eVVrmEdWyMnWl2X/QXIL6YutKkf3LdHtLa71EBh9yJXTwoNdVVbKESYE82ySmuVjM6Ff7h20H7OBZw==</wss:Nonce>
<wss:Created>2019-07-31T19:01:45.91Z</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>Empresa</CompanyName>
<CompanyAddress>
<Addressdetail>Rua</Addressdetail>
<City>Localidade</City>
<PostalCode>1000-001</PostalCode>
<Country>PT</Country>
</CompanyAddress>
<DocumentNumber>CGT 2013/565891</DocumentNumber>
<MovementStatus>N</MovementStatus>
<MovementDate>2018-12-18</MovementDate>
<MovementType>GT</MovementType>
<CustomerTaxID>999999990</CustomerTaxID>
<CustomerAddress>
<Addressdetail>Rua</Addressdetail>
<City>Localidade</City>
<PostalCode>1000-001</PostalCode>
<Country>PT</Country>
</CustomerAddress>
<CustomerName>Cliente</CustomerName>
<AddressTo>
<Addressdetail>Rua</Addressdetail>
<City>Localidade</City>
<PostalCode>1000-001</PostalCode>
<Country>PT</Country>
</AddressTo>
<AddressFrom>
<Addressdetail>Rua</Addressdetail>
<City>Localidade</City>
<PostalCode>1000-001</PostalCode>
<Country>PT</Country>
</AddressFrom>
<MovementEndTime>2018-12-18T07:20:59</MovementEndTime>
<MovementStartTime>2018-12-18T07:20:00</MovementStartTime>
<VehicleID>XX-YY-ZZ</VehicleID>
<Line>
<ProductDescription>Artigo</ProductDescription>
<Quantity>10</Quantity>
<UnitOfMeasure>UN</UnitOfMeasure>
<UnitPrice>100</UnitPrice>
</Line>
</ns2:envioDocumentoTransporteRequestElem>
</S:Body>
</S:Envelope>

Jul 31, 2019 8:01:39 PM org.dma.services.at.SOAPMessageHandler interceptAndRecordSoapMessage
INFO: 
>>>RECEIVED<<<
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<work:WorkContext xmlns:work="http://oracle.com/weblogic/soap/workarea/">rO0ABXdLABN3ZWJsb2dpYy5hcHAuc2dkdHdzAAAA1gAAACN3ZWJsb2dpYy53b3JrYXJlYS5TdHJpbmdXb3JrQ29udGV4dAAHMS4yMC4zMwAA</work:WorkContext>
</S:Header>
<S:Body>
<ns0:envioDocumentoTransporteResponseElem xmlns:ns0="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/">
<ResponseStatus>
<ReturnCode>52</ReturnCode>
<ReturnMessage>Não foi possível verificar se o utilizador tem permissões para aceder a esta operação.</ReturnMessage>
</ResponseStatus>
</ns0:envioDocumentoTransporteResponseElem>
</S:Body>
</S:Envelope>

null
null
52
Não foi possível verificar se o utilizador tem permissões para aceder a esta operação.

Resutlado da comunicação de Documentos de Transporte


The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques

Boa noite

Chegou a altura de renovar o meu certifcado e assim fiz.

Integrei a chave privada com o .cer que AT devolveu e transformei o .pfx em dois .pem para o PHP, segundo o código do eskiso.

os comandos:

openssl pkcs12 -in 555555555.pfx -nocerts -out pfxKey21.pem

openssl pkcs12 -in 196515165.pfx -clcerts -nokeys -out pfxcert21.pem

e, agora, obtenho esta resposta: 

*   Trying 213.13.158.240:401...
* TCP_NODELAY set
* Connected to servicos.portaldasfinancas.gov.pt (213.13.158.240) port 401 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* Falling back from TLSv1.3 to max supported SSL version (TLSv1.2)
*   CAfile: none
  CApath: none
* loaded libnssckbi.so
* unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
* NSS error -8178 (SEC_ERROR_BAD_KEY)
* Peer's public key is invalid.
* Closing connection 0

Alguém já passou por isto?

Obrigado

 

Share this post


Link to post
Share on other sites
Nuno Bagulho Marques
15 horas atrás, Nuno Bagulho Marques disse:

Boa noite

Chegou a altura de renovar o meu certifcado e assim fiz.

Integrei a chave privada com o .cer que AT devolveu e transformei o .pfx em dois .pem para o PHP, segundo o código do eskiso.

os comandos:

openssl pkcs12 -in 555555555.pfx -nocerts -out pfxKey21.pem

openssl pkcs12 -in 196515165.pfx -clcerts -nokeys -out pfxcert21.pem

e, agora, obtenho esta resposta: 

*   Trying 213.13.158.240:401...
* TCP_NODELAY set
* Connected to servicos.portaldasfinancas.gov.pt (213.13.158.240) port 401 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* Falling back from TLSv1.3 to max supported SSL version (TLSv1.2)
*   CAfile: none
  CApath: none
* loaded libnssckbi.so
* unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
* NSS error -8178 (SEC_ERROR_BAD_KEY)
* Peer's public key is invalid.
* Closing connection 0

Alguém já passou por isto?

Obrigado

 

Resolvido. É necessário transformar a chave privada em RSA, no meu caso uso a biblioteca CURL + NSS

openssl rsa -in pfxKey21.pem -out newpfxKey21.pem

Share this post


Link to post
Share on other sites
Karina

Bom dia,

Estou recebendo a mensagem de erro:  "52 - Não foi possível verificar se o utilizador tem permissões para aceder a esta operação" na comunicação das guias à AT no nosso ambiente de teste. Alguém já passou por este problema?

 

Obrigada.

Share this post


Link to post
Share on other sites
kalin
4 horas atrás, Karina disse:

Bom dia,

Estou recebendo a mensagem de erro:  "52 - Não foi possível verificar se o utilizador tem permissões para aceder a esta operação" na comunicação das guias à AT no nosso ambiente de teste. Alguém já passou por este problema?

 

Obrigada.

Penso que o ambiente de testes não está a funcionar, ou seja temos que testar em produção ....

Share this post


Link to post
Share on other sites
Karina
38 minutos atrás, kalin disse:

Penso que o ambiente de testes não está a funcionar, ou seja temos que testar em produção ....

Este erro somente ocorre no ambiente de teste. Em produção as guias estão sendo autorizadas.

 

Share this post


Link to post
Share on other sites
jncevcosta

Andei vários dias com o erro de credêncial expirada. Contudo o relógio estava certo pelo unl.

Agora está a dar erro de ligação. Alguém está a conseguir usar o ambiente de testes para as guias?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.