Package br.com.caelum.stella.gateway.pagseguro

Source Code of br.com.caelum.stella.gateway.pagseguro.PagSeguroVerificaRetornoAutorizacao

package br.com.caelum.stella.gateway.pagseguro;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import br.com.caelum.stella.gateway.core.BigDecimalFormatter;
import br.com.caelum.stella.gateway.core.CalendarFormatter;
import br.com.caelum.stella.gateway.core.EnumComCodigoFinder;
import br.com.caelum.stella.gateway.core.IntegrationHandler;

/**
* Classe para montar o retorno baseado na requisição do PagSeguro.
*
* @author Alberto Pc
*
*/
public class PagSeguroVerificaRetornoAutorizacao implements
    IntegrationHandler<PagSeguroAutorizacaoReturn> {
  private HttpServletRequest request;
  private PagSeguroVerificadorRetorno verificadorRetorno;
  private PagSeguroDadosConfiguracao dadosConfiguracao;
  private final RemoverAcentos removedorAcentos = new RemoverAcentos();

  public PagSeguroVerificaRetornoAutorizacao(HttpServletRequest request,
      PagSeguroVerificadorRetorno pagSeguroVerificadorRetorno,
      PagSeguroDadosConfiguracao dadosConfiguracao) {
    this.request = request;
    this.verificadorRetorno = pagSeguroVerificadorRetorno;
    this.dadosConfiguracao = dadosConfiguracao;
  }

  public PagSeguroVerificaRetornoAutorizacao(HttpServletRequest request,
      PagSeguroVerificadorRetorno verificadorRetorno) {
    this(request, verificadorRetorno, new PagSeguroDadosConfiguracao());
  }

  public PagSeguroAutorizacaoReturn handle() {
    // TODO Auto-generated method stub
    String transacaoId = request.getParameter("TransacaoID");
    if (transacaoId != null && !"".equals(transacaoId)) {
      if (verificadorRetorno
          .verificaSeRetornoFoiEnviadoPelaPagSeguro(dadosConfiguracao)) {
        String emailVendedor = request.getParameter("VendedorEmail");
        String referencia = request.getParameter("Referencia");
        EnumComCodigoFinder enumFinder = new EnumComCodigoFinder();
        PagSeguroTipoFrete tipoFrete = enumFinder
            .descobreAEnumPeloCodigo(PagSeguroTipoFrete.class,
                request.getParameter("TipoFrete"));
        BigDecimal valorTotalFrete = transformaValorComVirgulaParaBigDecimal(request
            .getParameter("ValorFrete"));
        String anotacao = request.getParameter("Anotacao");
        Calendar dataTransacao = new CalendarFormatter()
            .stringToCalendar(
                request.getParameter("DataTransacao"),
                "dd/MM/yyyy HH:mm:ss");
        PagSeguroTipoPagamento tipoPagamento = enumFinder
            .descobreAEnumPeloCodigo(PagSeguroTipoPagamento.class,
                removeAcentoEDeixarComLetraMaiscula(request
                    .getParameter("TipoPagamento")));
        PagSeguroStatusTransacao statusTransacao = enumFinder
            .descobreAEnumPeloCodigo(
                PagSeguroStatusTransacao.class,
                removeAcentoEDeixarComLetraMaiscula(request
                    .getParameter("StatusTransacao")));
        PagSeguroDadosCliente dadosCliente = criarDadosCliente();
        int numeroItens = Integer.valueOf(request
            .getParameter("NumItens"));
        Collection<PagSeguroItem> itens = montaItensDoCarrinho(numeroItens);
        PagSeguroCheckout checkout = new PagSeguroCheckout(referencia,
            tipoFrete, dadosCliente, itens);
        PagSeguroAutorizacaoReturn autorizacaoReturn = new PagSeguroAutorizacaoReturn(
            dadosConfiguracao, transacaoId, checkout,
            valorTotalFrete, anotacao, dataTransacao,
            tipoPagamento, statusTransacao);
        return autorizacaoReturn;

      } else {
        throw new PagSeguroRequisicaoInvalidaException(
            "Provavelmente foi realizada uma requisição maliciosa para aprovar a compra ");
      }

    }
    throw new NaoEhRoboPagSeguroException("A requisição foi feita a partir do browser.");

  }

  private Collection<PagSeguroItem> montaItensDoCarrinho(int numeroItens) {
    Collection<PagSeguroItem> itens = new ArrayList<PagSeguroItem>();
    for (int i = 1; i <= numeroItens; i++) {
      PagSeguroItem item = new PagSeguroItem(request
          .getParameter("ProdID_" + i), request
          .getParameter("ProdDescricao_" + i), Integer
          .valueOf(request.getParameter("ProdQuantidade_" + i)),
          new BigDecimalFormatter().stringInCentsToBigDecimal(request
              .getParameter("ProdValor_" + i)),
          transformaValorComVirgulaParaBigDecimal(request
              .getParameter("ProdFrete_" + i)),

          transformaValorComVirgulaParaBigDecimal(request
              .getParameter("ProdExtras_" + i)));
      itens.add(item);
    }
    return itens;
  }

  private PagSeguroDadosCliente criarDadosCliente() {
    String[] telefoneCompletoComDDD = request.getParameter("CliTelefone")
        .split(" ");
    return new PagSeguroDadosCliente(request.getParameter("CliCEP"),
        request.getParameter("CliCidade"), request
            .getParameter("CliEndereco"), request
            .getParameter("CliNome"), request
            .getParameter("CliEstado"), request
            .getParameter("CliNumero"), request
            .getParameter("CliComplemento"), request
            .getParameter("CliBairro"), telefoneCompletoComDDD[0],
        telefoneCompletoComDDD[1], request.getParameter("CliEmail"));
  }

  private BigDecimal transformaValorComVirgulaParaBigDecimal(String valor) {
    return new BigDecimal(valor.replace(",", ".")).setScale(
        BigDecimalFormatter.SCALE, BigDecimalFormatter.ROUNDING_MODE);
  }

  private String removeAcentoEDeixarComLetraMaiscula(String valor) {
    return removedorAcentos.remover(valor).toUpperCase();
  }
}
TOP

Related Classes of br.com.caelum.stella.gateway.pagseguro.PagSeguroVerificaRetornoAutorizacao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.