Implementar pagamento digital com JSF 2

Boa tarde,

Estou implementando um modulo com pagamento digital, usando JSF 2.

Questão 1) No FORM preciso ter “action” para uma url externa. No JSF, como fazer isso?

A form é assim… o metodo insereCampos monta os parametros que vou passar no POST…

[code]
<h:form id=“formPagamentoDigital” prependId=“false”>
<h:commandLink action="#{retornoPagamentoDigitalBean.insereCampos()}">clique aqui para preencher os input…</h:commandLink>
<h:commandButton action="#{retornoPagamentoDigitalBean.submit()}"/>

</h:form>[/code]
Monto dinamicamente varios input hidden, que sao os parametros do pagamento da pessoa. Tenho um Map com estes parametros. Itero ele com este metodo que montei… e preencho dinamicamente ele.

private boolean criaInputHidden(String id, String valor) {
       
        HtmlInputHidden input = new HtmlInputHidden();

        input.setId(id);
        input.setValue(valor);
        
        UIComponent form = (UIComponent) fc.getViewRoot().findComponent("formPagamentoDigital");
        return form.getChildren().add(input);
    }
  • Como é que eu chamo o metodoInsereCampos() automaticamente depois que a form é renderizada?? Tentei chamar no construtor do managed bean, mas como a view ainda não está pronta, dá erro.

  • Veja que eu coloquei um metodo Submit. Dentro dele tem um return apontando para a url externa. Tentei assim nao deu certo. Tentei fazer um FacesContext().getExternalContext().redirect(url), mas tambem nao deu certo. Como entao fazer o SUBMIT apontando para a url externa com JSF?

Questao 2) Uma outra abordagem seria: Fazer uma pagina JSP, integrando com DWR, gerar os input hidden dinamicamente com javascript.
O form já vai ter o action, pois é um HTML, não é mais JSF.

<form name="pagamentodigital" action="https://www.pagamentodigital.com.br/checkout/pay/" method="post">

<input name="email_loja" type="hidden" value="sualoja@sualoja.com.br">
// na verdade os inputs, a quantidade e relativa, entao e dinamico...vou preencher via javascript

<input type="submit">
</form> 

Esse segundo modo seria a unica solucao?
Lembrando que a aplicação inteira usa JSF, o DWR seria usando somente nesta pagina. O que acha?

Obrigado

A forma de pagamento que você está fazendo tem que ser obrigatóriamente pelo pagamento digital? Pergunto isso pois desenvolvi um aplicação usando o PagSeguro e é bem tranquilo a API deles.

Ola nazgulzurak,

Obrigado pela sua resposta.

Sim ter que ser obrigatoriamente. O Buscape já deveria ter feito alguma API, como já tem no pagseguro.

[quote=lmassao]Ola nazgulzurak,

Obrigado pela sua resposta.

Sim ter que ser obrigatoriamente. O Buscape já deveria ter feito alguma API, como já tem no pagseguro.

Eu tambe já fiz algo semelhante com o PagSeguro, com o mesmo requisito que o seu, usando JSF. Eu fiz um form html normal e usei inputs (type=“hidden”) tambem comuns do html…não rola de voce fazer assim? não tem segredo.

Ola alias,

Obrigado pela sua resposta.
Mas como é que você fez? Eu coloquei essa abordagem na questao 2, mencionei como iria fazer. Voce fez como? Fez daquele modo?

Eu tambe já fiz algo semelhante com o PagSeguro, com o mesmo requisito que o seu, usando JSF. Eu fiz um form html normal e usei inputs (type=“hidden”) tambem comuns do html…não rola de voce fazer assim? não tem segredo.[/quote]

[quote=lmassao]Ola alias,

Obrigado pela sua resposta.
Mas como é que você fez? Eu coloquei essa abordagem na questao 2, mencionei como iria fazer. Voce fez como? Fez daquele modo?

[/quote]

Sim, daquele jeito que voce pensou, cara.

<form method="POST" action="url-de-envio-do-pag-seguro">
   <input type="hidden" value="#{bean.campo}" name="atributo-esperado-pelo-pag-seguro" />
</form>

Na época lembro que até vi o jeito que o Pagamento Digital fazia e era por aí, correto? Voce precisa enviar um POST pra uma url deles passando alguns parametros com nomes específicos. Se for isso, cara, do jeito acima é tranquilo que funciona.

Estou passando pela mesma situação e imaginei tentar assim como “alias” postou.
Depois confirmo se funcionou certinho!