Jump to content
nportugal

Enviar valores para formulário em Angular

Recommended Posts

nportugal

Boas,

O portal das finanças alterou a forma de emitir os recibos verdes e agora é através de um formulário em angular. No formato anterior, formulário HTML, utilizava uma base de dados em mysql para os clientes e serviços e "postava" via PHP directamente para a página da A.T e o recibo "autopreenchia-se" mas agora com o Angular já não funciona.

Já tentei enviar os valores via JSON mas também não aceita. Alguém sabe uma técnica para enviar dados externos para angular ?

Share this post


Link to post
Share on other sites
Knitter

O pedido é feito na mesma em POST, tens é de encontrar o URL que está a ser usado e garantir que estás a usar os mesmos cabeçalhos no pedido, mas não muda nada em relação a um form "normal". Tens é de encontrar o URL no código JS ou analisar um pedido na página da portal para veres onde está a ser feito o acesso ao servidor, pode ser em mais que um pedido.

  • Vote 1

Share this post


Link to post
Share on other sites
nportugal
20 horas atrás, Knitter disse:

O pedido é feito na mesma em POST, tens é de encontrar o URL que está a ser usado e garantir que estás a usar os mesmos cabeçalhos no pedido, mas não muda nada em relação a um form "normal". Tens é de encontrar o URL no código JS ou analisar um pedido na página da portal para veres onde está a ser feito o acesso ao servidor, pode ser em mais que um pedido.

 
 
 

Olá Knitter,

Obrigado pela resposta.
Estou há 3 dias a ler a doc. do Angular mas sem que me ajude em nada. O Angular é fechado e processa-se no cliente pelo que não vejo maneira de lá chegar. Já tentei fazer o POST para a página com os nomes dos campos correctos mas realmente descurei os cabeçalhos. Dá erro http 405 Método Não Permitido...
Acho que ainda terei de contornar a validação e essa parte é que é toda feita no Angular.  Pelo que vejo estou condenado a preencher TODOS os campos do recibos que emito "á unha"... e chamam isto de evolução.... provavelmente...

Edited by nportugal
Erro ortográfico

Share this post


Link to post
Share on other sites
Knitter
2 horas atrás, nportugal disse:

O Angular é fechado e processa-se no cliente pelo que não vejo maneira de lá chegar.

Isso é um pouco contrassenso. Além de estarmos a falar de um projeto de software livre, por definição aberto, como dizes processa-se no cliente que és tu, logo tens acesso a toda a lógica, validações e procedimentos que o cliente executa para poderes estudar e encontrar uma solução que se adapte ao que precisas. Fui ao portal das finanças e encontrei a aplicação completa (AngularJS) para a área de emissão de recibos, só tive de abrir as ferramentas de developer do Firefox :)

405 é o resultado de executares um POST num recurso que pede GET, ou vice-versa. Estás a tentar executar um POST num URL que não responde ao POST; estás a usar o URL errado. Os URL para a área de recibos têm o formato /recibo/portal/<ação>, sendo que a ação varia conforme o que estás a fazer.

Já criaste um recibo enquanto inspecionavas o pedido? É a forma mais simples de veres quais os recursos que são usados e quais os URL que estão a ser pedidos.

Share this post


Link to post
Share on other sites
nportugal
1 hora atrás, Knitter disse:

Isso é um pouco contrassenso. Além de estarmos a falar de um projeto de software livre, por definição aberto, como dizes processa-se no cliente que és tu, logo tens acesso a toda a lógica, validações e procedimentos que o cliente executa para poderes estudar e encontrar uma solução que se adapte ao que precisas. Fui ao portal das finanças e encontrei a aplicação completa (AngularJS) para a área de emissão de recibos, só tive de abrir as ferramentas de developer do Firefox :)

405 é o resultado de executares um POST num recurso que pede GET, ou vice-versa. Estás a tentar executar um POST num URL que não responde ao POST; estás a usar o URL errado. Os URL para a área de recibos têm o formato /recibo/portal/<ação>, sendo que a ação varia conforme o que estás a fazer.

Já criaste um recibo enquanto inspecionavas o pedido? É a forma mais simples de veres quais os recursos que são usados e quais os URL que estão a ser pedidos.

 
 

Sim, tens razão, esqueci-me de informar que o post, de onde envio os dados é efectuado a partir de um outro servidor e executado noutro separador.

Estou a fazer passo a passo o preenchimento de um recibo, com o firebug ligado a ver se apanho os url do javascript e fazer o envio por GET, e talvez em JSON que pelo que percebo o Angular até processa nativamente ou para o contornar e enviar os dados para a páginal final (ainda terei de efectuar todo o processo de emitir um recibo...).

Obrigado pelas dicas. Estou a ver muito trabalho de "sapa" mas vou continuar a vasculhar no portal da A.T

Edited by nportugal

Share this post


Link to post
Share on other sites
nportugal

Boas,

O problema persiste. Afinal não é só postar os dados para a página (endereço) correcto. Como o formulário se processa no cliente o envio dos dados tem de ser efectuado pela página  do portal. Depois de descobrir para onde postar os dados (para o processo de validação, em javascript que deveria funcionar como api [https://irs.portaldasfinancas.gov.pt/recibos/api/emitirValidation]) ao fazer o envio dos dados a partir de outro sítio (onde tenho a base de dados de clientes e serviços) ocorre um erro de CORS. Já tentei usar o cabeçalho A-C-A-O mas no firefox não tenho tido sucesso. E preciso de uma solução cross-browser.

Compreendo que a AT pretenda assegurar o bom funcionamento do seu servidor mas os ciclos que poupa ao fazer a validação dos formulários em angular e no cliente não deverão ser assim tão preciosos...

Isto vindo de uma entidade que obriga a usar Java para aceder ao seu portal... portanto não é decerto uma questão de segurança...

Share this post


Link to post
Share on other sites
Knitter

O que é que o preflight de diz sobre autorização? Se estiver limitado ao URL do portal das finanças então não há nada a fazer, só esse servidor é que poderá efetuar pedidos para esse endereço (assumindo que é validado no servidor destino), o que faz sentido, e não vais conseguir fazer os pedidos como estás a tentar. Neste caso aquilo que poderá funcionar é usares um browser headless que possas automatizar, vai comportar-se como um browser normal e respeitar o sistema CORS.

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.