Jump to content
cjulio

Utilizar Webservices da AT

Recommended Posts

antseq

bom dia,

se alguém puder ajudar, agradeço.

existe alguma forma oficial / webservice (documentado) pela AT que permita um contribuinte consultar as faturas (de outros / fornecedores) registadas no e-fatura ?

já vi aplicações que o fazem, mas a minha dúvida é se OU o fazem por um webservice (documentado) OU se o fazem por "simularem" a interação do contribuinte junto ao portal e capturam o output OU se o fazem por algum "reverse engineering" do site da AT de forma a saber o que\quando\como\parâmetros chamar de forma a obter os dados ?

alguma ideia ou "luz" sobre como fazer?

desde já obrigado e aproveito para desejar Boas Entradas em 2016.

cumprimentos,

Share this post


Link to post
Share on other sites
antseq

Não há nada oficial.

Tanto quanto sei, quem o faz é por simulação da interacção com o browser.

obrigado.

era o que eu receava ter de fazer... mas ainda tinha uma pequena esperança de poderia haver algo oficial que permitisse um acesso documentado e mais fácil.

cumprimentos e continuação de bom ano.

Share this post


Link to post
Share on other sites
Breo

Experimenta este email : portal-qt@at.gov.pt talvez respondam.

Cumprimentos,

Enviaron a mesma resposta :confused: Intentarei de novo no serviço e-balcao

cumprimentos!

Share this post


Link to post
Share on other sites
tiago.f

Olá phenrique,

quando dizes:

existe alguma forma oficial / webservice (documentado) pela AT que permita um contribuinte consultar as faturas (de outros / fornecedores) registadas no e-fatura ?

está a referir-te apenas a faturas que dizem respeito ao próprio contribuinte, certo? por "(de outros /fornecedores)" devo entender que são faturas registadas pelos fornecedores e que dizem respeito ao contribuinte, certo?

Se sim, o que já vi feito (e faço) é utilizar as respostas JSON enviadas pelo site efatura para o browser. Infelizmente (que eu saiba) não existe nenhuma forma oficial/API de extrair esta informação.

Se tiveres interesse posso enviar um excel que "saca" as fatura de um contribuinte consumidor e as "despeja" numa tabela.

Cumprimentos.

Share this post


Link to post
Share on other sites
JARCAMPOS

Boas

Sou neste site, tigao

Olá phenrique,

quando dizes:

está a referir-te apenas a faturas que dizem respeito ao próprio contribuinte, certo? por "(de outros /fornecedores)" devo entender que são faturas registadas pelos fornecedores e que dizem respeito ao contribuinte, certo?

Se sim, o que já vi feito (e faço) é utilizar as respostas JSON enviadas pelo site efatura para o browser. Infelizmente (que eu saiba) não existe nenhuma forma oficial/API de extrair esta informação.

Se tiveres interesse posso enviar um excel que "saca" as fatura de um contribuinte consumidor e as "despeja" numa tabela.

Cumprimentos.

Boas

Podes enviar-me esse excel tiago.f?

de facto devia haver uma API para fazer essa ligação. Entao como faz o sujeito que desenvolveu a app efatura?

Abraços

Share this post


Link to post
Share on other sites
edith

Boas

Agora entrei em parafuso!

Preciso de renovar o certificado de WS, e já fiz o pedido a AT e já recebi 2 ficheiros o xxx.cer e o PublicChainCA2.p7b

mas para gerar o xxx.PFX

utilizo o comando 'openssl.exe pkcs12 -export -in xxx.cer -inkey xxx.KEY -out xxx_2016.PFX'

e o output é:

Loading 'screen' into random state - Done

Enter Export Password:

não me lembro da password, nem me lembro nos outros anos ter colocado nenhuma password

Alguém me pode ajudar, obrigado

Share this post


Link to post
Share on other sites
nunopicado

Mas puseste...

Mas salvo erro, nesse ecrã, pões a pass que queres.

Tens é depois de no programa usar a mesma.

O melhor é veres qual estás a usar no programa quando envias as guias, e por a mesma, para não mexeres no programa por causa disso.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
edith

Mas puseste...

Mas salvo erro, nesse ecrã, pões a pass que queres.

Tens é depois de no programa usar a mesma.

O melhor é veres qual estás a usar no programa quando envias as guias, e por a mesma, para não mexeres no programa por causa disso.

Tens razão Nuno, muito obrigada!

Share this post


Link to post
Share on other sites
nunopicado

Tens razão Nuno, muito obrigada!

Sempre às ordens! ;)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
tiago.f

Aqui fica: https://www.dropbox.com/s/njsz90tdakhj848/Access%20GOV.PT.xlsm?dl=0

O e-fatura acho que faz desta maneira.... :)

Nota que está ainda "em bruto": mensagens de erro podem não ser as mais certas, não está user-friendly, etc, etc

On 1/12/2016 at 10:26 PM, JARCAMPOS said:

Boas

Sou neste site, tigao

Boas

Podes enviar-me esse excel tiago.f?

de facto devia haver uma API para fazer essa ligação. Entao como faz o sujeito que desenvolveu a app efatura?

Abraços

Edited by tiago.f
  • Vote 1

Share this post


Link to post
Share on other sites
bugFree

Aqui fica: https://dl.dropboxusercontent.com/u/6551/Access%20GOV.PT.xlsm

O e-fatura acho que faz desta maneira.... :)

Nota que está ainda "em bruto": mensagens de erro podem não ser as mais certas, não está user-friendly, etc, etc

Parece-me um bom ponto de partida.

Sabes se é possível colocar as credenciais na url, junto com as datas?


What's better: Coding solo or as part of a team?

A team means you have to fix someone else's bugs. Coding solo means you have to write all the bugs yourself.

Share this post


Link to post
Share on other sites
tiago.f

Diria que não.

As credenciais têm que ir no POST.

Mais concretamente:

- Fazer um POST para https://www.acesso.gov.pt/jsp/loginRedirect.jsp com "partID=EFPF&username=USER&password=PASS" - substituindo USER e PASS claro.

- A resposta é uma página html

- Guardar os cookies da resposta e retirar do html os campos <input type="hidden">

- Fazer um POST para https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action com os cookied guardados + os campos input retirados.

- Devemos receber uma resposta que faz set de um cookie "SINGLE_DOMAIN_SSO_COOKIE".

- Se recebemos então estamos logados, senão houve um erro.

A partir daí é só enviar este cookie sempre que fazemos uma chamada a qq url do site

Edited by tiago.f

Share this post


Link to post
Share on other sites
JARCAMPOS

Diria que não.

As credenciais têm que ir no POST.

Mais concretamente:

- Fazer um POST para https://www.acesso.gov.pt/jsp/loginRedirect.jsp com "partID=EFPF&username=USER&password=PASS" - substituindo USER e PASS claro.

- A resposta é uma página html

- Guardar os cookies da resposta e retirar do html os campos <input type="hidden">

- Fazer um POST para https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action com os cookied guardados + os campos input retirados.

- Devemos receber uma resposta que faz set de um cookie "SINGLE_DOMAIN_SSO_COOKIE".

- Se recebemos então estamos logados, senão houve um erro.

A partir daí é só enviar este cookie sempre que fazemos uma chamada a qq url do site

Não entendi o excel. O que devo por no PROXY?

Share this post


Link to post
Share on other sites
nunopicado

Não entendi o excel. O que devo por no PROXY?

Nada... A não ser que para acederes à internet precises de um servidor proxy, aí metes o endereço desse servidor.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
tiago.f

E já agora, se não me engano, é necessário que pelo menos os filtros "data início", "data fim" e "setor de actividade" teem que estar preenchidos...

Nada... A não ser que para acederes à internet precises de um servidor proxy, aí metes o endereço desse servidor.

Share this post


Link to post
Share on other sites
zabo69

Bom dia,

Eu estou a receber o erro (502) Gateway incorrecto no ambiente de produção a comunicar as guias, alguém sabe o que pode ser?

Obrigado.

Share this post


Link to post
Share on other sites
George De Luca

Olá Todos,

Estou com um problema num cliente que ele tem uns 10 computadores e somente 2 não consegue enviar dados pelo webservice da AT.

O erro que retorna é o abaixo:

Erro: Rejected: | Codigo: 10 | Erro: Validade da credencial expirada(2016-01-21T16:05:23.543Z) | Tentativas Restantes: -1

O problema que o mesmo certificado funciona em outras tantas empresas, com o mesmo programa e o mesmo certificado.

O programa foi desenvolvido em Delphi 2010 e utilizo a DLL da Chilkat.

Um dos computadores está com o Windows 7 e outro com o Windows 8. Já tive o mesmo problema com o Windows XP também em outra empresa.

Alguém pode ajudar? Sabe se falta algum componente para ser instalado no computador para que funcione corretamente?

Grato pela atenção,

George


Grato pela atenção,

George De Luca

www.deluca.eti.br

Share this post


Link to post
Share on other sites
Sirene

Olá Todos,

Estou com um problema num cliente que ele tem uns 10 computadores e somente 2 não consegue enviar dados pelo webservice da AT.

O erro que retorna é o abaixo:

Erro: Rejected: | Codigo: 10 | Erro: Validade da credencial expirada(2016-01-21T16:05:23.543Z) | Tentativas Restantes: -1

O problema que o mesmo certificado funciona em outras tantas empresas, com o mesmo programa e o mesmo certificado.

O programa foi desenvolvido em Delphi 2010 e utilizo a DLL da Chilkat.

Um dos computadores está com o Windows 7 e outro com o Windows 8. Já tive o mesmo problema com o Windows XP também em outra empresa.

Alguém pode ajudar? Sabe se falta algum componente para ser instalado no computador para que funcione corretamente?

Grato pela atenção,

George

A hora desse PC está errada.. pode estar atrasada ou adiantada alguns segundos...

Já me aconteceu a mim e era esse erro que me dava...

  • Vote 1

Share this post


Link to post
Share on other sites
George De Luca

A hora desse PC está errada.. pode estar atrasada ou adiantada alguns segundos...

Já me aconteceu a mim e era esse erro que me dava...

Funcionou! Parece que era isso mesmo! Muito obrigado! ;)


Grato pela atenção,

George De Luca

www.deluca.eti.br

Share this post


Link to post
Share on other sites
nunopicado

Funcionou! Parece que era isso mesmo! Muito obrigado! ;)

Se meteres o Windows a actualizar a hora no OAL (ntp04.oal.ul.pt ou ntp02.oal.ul.pt), ou se a fores buscar directamente a estes servidorers a partir do programa, é mais certo de não teres esse tipo de problemas.

Tens aqui uma função que te devolve a data e hora do OAL já formatada para o envio por webservice.

function ZNow:String;
var
  myxsDT: TXSDatetime;
  IdSNTP: TIdSNTP;
  ServerTZID: String;
  TZ: TTimeZone;
begin
    try
       Result := '';

       IdSNTP := TIdSNTP.Create(Nil);
       IdSNTP.ReceiveTimeout := 3000;

       // retrieve server timezone info
       ServerTZID := 'Portugal';

       // look up the retrieved timezone
       TZ := TBundledTimeZone.GetTimeZone(ServerTZID); // nil if not found

       myxsDT := TXSDatetime.Create;
       try
          try
             IdSNTP.Host := 'ntp04.oal.ul.pt';
             myxsDT.AsUTCDateTime := TZ.ToUniversalTime(IdSNTP.DateTime);
             if myxsDT.Year  = 1899
                then begin
                          IdSNTP.Active := False;
                          IdSNTP.Host := 'ntp02.oal.ul.pt';
                          myxsDT.AsUTCDateTime := TZ.ToUniversalTime(IdSNTP.DateTime);
                          if myxsDT.Year  = 1899
                             then myxsDT.AsUTCDateTime := TZ.ToUniversalTime(Now);
                     end;
          except
             try
                myxsDT.AsUTCDateTime := TZ.ToUniversalTime(Now);
             except
             end;
          end;
       finally
          Result := myxsDT.NativeToXS;
          myxsDT.Free;
          IdSNTP.Active := False;
          IdSNTP.Free;
       end;
    except
       raise Exception.Create('ZNow');
    end;
end;

(poderás precisar de algumas units extra, facilmente encontradas no Google)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
josejfferreira

Alguém com problemas a fazer comunicações? Estamos sem conseguir enviar documentos desde as 13.24h.

Share this post


Link to post
Share on other sites
pmsimoes

Sim, com o erro 'The underlying connection was closed: An unexpected error occurred on a send.'

Share this post


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