Giter Club home page Giter Club logo

cielo-1's Introduction

Tritoq\Payment\Cielo

Esta é um conjunto de classes, baseado na Library do Thiago Paes - Mrprompt para integração com o web service da Cielo.

Cartões Suportados:

  • American Express
  • Aura
  • Diners
  • Discover
  • Elo
  • JCB
  • Master Card
  • Visa

Há suporte a integração com a Análise de Risco e AVS

Para que as funcionalidades de análise de risco funcionem, o serviço precisa estar ativo junto a Cielo.

Instalação

Via Composer

composer.json

{
   "require" : {
        "tritoq/cielo": "dev-master"
   }

}
php composer.phar update

Uso

Setup

Exemplo de configuração de informações

    use Tritoq\Payment\Cielo\AnaliseRisco;
    use Tritoq\Payment\Cielo\Cartao;
    use Tritoq\Payment\Cielo\CieloService;
    use Tritoq\Payment\Cielo\Loja;
    use Tritoq\Payment\Cielo\Pedido;
    use Tritoq\Payment\Cielo\Portador;
    use Tritoq\Payment\Cielo\Transacao;
    use Tritoq\Payment\Cielo\AnaliseRisco\Modelo\ClienteAnaliseRiscoTest;
    use Tritoq\Payment\Cielo\AnaliseRisco\PedidoAnaliseRisco;

    $portador = new Portador();
    $portador
        ->setBairro('Meu Bairro')
        ->setCep('89900000')
        ->setComplemento('Sala 123')
        ->setEndereco('Rua Fulano de Tal');

    $loja = new Loja();
    $loja
        ->setNomeLoja('Nome da Loja')
        ->setAmbiente(Loja::AMBIENTE_TESTE)
        ->setUrlRetorno('http://google.com.br')
        ->setChave(Loja::LOJA_CHAVE_AMBIENTE_TESTE)
        ->setNumeroLoja(Loja::LOJA_NUMERO_AMBIENTE_TESTE);
        //->setSslCertificado("caminhodocertificado");

    $cartao = new Cartao();
    $cartao
        ->setNumero(Cartao::TESTE_CARTAO_NUMERO)
        ->setCodigoSegurancaCartao(Cartao::TESTE_CARTAO_CODIGO_SEGURANCA)
        ->setBandeira(Cartao::BANDEIRA_VISA)
        ->setNomePortador('Portador 1')
        ->setValidade(Cartao::TESTE_CARTAO_VALIDADE);

    $transacao = new Transacao();
    $transacao
        ->setAutorizar(Transacao::AUTORIZAR_SEM_AUTENTICACAO)
        ->setCapturar(Transacao::CAPTURA_NAO)
        ->setParcelas(1)
        ->setProduto(Transacao::PRODUTO_CREDITO_AVISTA);

    $pedido = new Pedido();
    $pedido
        ->setDataHora(new \DateTime('2014-02-02 23:32:12'))
        ->setDescricao('Descrição do Pedido')
        ->setIdioma(Pedido::IDIOMA_PORTUGUES)
        ->setNumero(9024)
        ->setValor(1200);


    $pedidoAnalise = new PedidoAnaliseRisco();
    $pedidoAnalise
        ->setEstado('SC')
        ->setCep('89802140')
        ->setCidade('Chapeco')
        ->setComplemento('Sala 1008')
        ->setEndereco('Rua Marechal Deodoro, 400')
        ->setId('123345')
        ->setPais('BR')
        ->setPrecoTotal(400.00)
        ->setPrecoUnitario(390.00);

    /// Esta é uma classe criada de exemplo, implementando a interface Tritoq\Payment\Cielo\AnaliseRisco\ClienteAnaliseRiscoInterface

    $cliente = new ClienteAnaliseRiscoTest();
    $cliente->nome = 'Artur';
    $cliente->sobrenome = 'Magahalhaes';
    $cliente->endereco = 'Rua Marechal Deodoro, 400';
    $cliente->complemento = 'Sala 1008';
    $cliente->cep = '89802140';
    $cliente->documento = '123456789123';
    $cliente->email = '[email protected]';
    $cliente->estado = 'SC';
    $cliente->cidade = 'Chapeco';
    $cliente->id = '9024';
    $cliente->ip = '192.168.1.254';
    $cliente->pais = 'BR';
    $cliente->senha = '12345';
    $cliente->telefone = '49912341234';


    /*
    *
    * Usando a Análise de Risco
    *
    */

    // Para qualquer ação será revista com ação manual posterior, caso seja de baixo risco, a transação será capturada automaticamente

    $analise = new AnaliseRisco();
    $analise
        ->setCliente($cliente)
        ->setPedido($pedidoAnalise)
        ->setAfsServiceRun(true)
        ->setAltoRisco(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
        ->setMedioRisco(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
        ->setBaixoRisco(AnaliseRisco::ACAO_CAPTURAR)
        ->setErroDados(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
        ->setErroIndisponibilidade(AnaliseRisco::ACAO_MANUAL_POSTERIOR)
        ->setDeviceFingerPrintID(md5('valor'));

    $service = new CieloService(array(
        'portador' => $portador,
        'loja' => $loja,
        'cartao' => $cartao,
        'transacao' => $transacao,
        'pedido' => $pedido,
        'analise' => $analise
    ));
        
    
    // Setando o tipo de versão de conexão SSL 
    $service->setSslVersion(3);

    // Desabilitando a analise de risco
    $service->setHabilitarAnaliseRisco(false);

Opção de Análise de Risco

Caso opte por não utilizar o serviço de análise de risco é só remover o $cliente, $analise, $pedidoAnalise

E o serviço ficará assim

    $service = new CieloService(array(
        'portador' => $portador,
        'loja' => $loja,
        'cartao' => $cartao,
        'transacao' => $transacao,
        'pedido' => $pedido
    ));

Transação

Após realizada as configurações acima para realizar uma transação

    ...

    // Caso queira enviar o AVS - Verifição de Endereço / Ver manual para maiores informações

    $service->doTransacao(false, true);

    // Sem AVS

    $service->doTransacao(false, false);


    if($transacao->getStatus() == Transacao::STATUS_AUTORIZADA) {
        echo 'Transação Autorizada!';
    } else {
        echo 'Transação Não Autorizada, contate seu banco!';
    }

Transação com Análise de Risco

Enviando a transação com análise de risco

    $service->setHabilitarAnaliseRisco(true);
    $service->doTransacao(false,false);

    if($transacao->getStatus() == Transacao::STATUS_AUTORIZADA) {
        echo 'Transação Autorizada!';
    } else {
        echo 'Transação Não Autorizada, contate seu banco!';
    }

Captura da Transação

A captura da transação é a efetivação da transação, é nela que você confirma a Cielo que é para proceder com a Transação e a loja poder receber o valor.

Preferencialmente deixamos a captura para fazer posteriormente, devido as fraudes, é interessante que a Loja faça a verificação da transação antes de captura-la.

    $transacao->setTid('numero_da_transação_já_realizada');
    $service->doCaptura();

    if($transacao->getStatus() == Transacao::STATUS_CAPTURADA) {
        echo 'Transação capturada com sucesso!';
    } else {
        echo 'Não foi possível capturar, status da transação: ' . $transacao->getStatus();
    }

Consulta da Transação

A consulta da transação é um procedimento muito importante, pois é nela que a loja tira uma fotografia da transação.

    ...

    $transacao->setTid('numero_da_transacao');
    $service->doConsulta();

    // Pegando a requisição e XML

    $requisicoes = $transacao->getRequisicoes(Transacao::REQUISICAO_TIPO_CONSULTA);


    echo 'Status: '  . $transacao->getStatus() . '<br/>';

    if(isset($requisicoes[0])) {
        echo 'XML:' . $requisicoes->getXmlRetorno()->asXML();
    }

Consulta Direta

    ...

    // Realizando a transação e a consulta
    $service
            ->doTransacao(false,true)
            ->doConsulta();


    // Pegando a requisição e XML

    $requisicoes = $transacao->getRequisicoes(Transacao::REQUISICAO_TIPO_CONSULTA);


    echo 'Status: '  . $transacao->getStatus() . '<br/>';

    if(isset($requisicoes[0])) {
        echo 'XML:' . $requisicoes[0]->getXmlRetorno()->asXML();
    }

Cancelamento

Cancelamento da transação

    ...

    $transacao->setTid('numero_da_transacao');
    $service->doCancela();

    if($transacao->getStatus() == Transacao::STATUS_CANCELADO) {
        echo 'Transação Cancelada com Sucesso';
    } else {
        echo 'Erro no cancelamento, status: ' . $transacao->getStatus();
    }

Verificação do Resultado da Análise

Você pode verificar os resultados da análise de Resultado

    ...

    // Faz a consulta
    $transacao->setTid('numero_da_transacao');
    $service->doConsulta();

    if($transacao->getAnaliseResultado() || isset($transacao->getStatusAnalise())) {

        $resultado = $transacao->getAnaliseResultado();

        $status = $resultado->getStatus();

        switch($status) {
            case AnaliseResultado::ALTO_RISCO:
                ...
            break
            case AnaliseResultado::BAIXO_RISCO:
                ...
            break;
            case AnaliseResultado::MEDIO_RISCO:
                ...
            break;

            default:
                echo 'Não foi possível obter o status da análise';
            break;
        }


        // Listar os detalhes da análise

        foreach($resultado->getDetalhes() as $detalhe) {

            echo $detalhe;

        }

    }

Informações Gerais

Dentro da pasta Tests há resultados de XML e retornos feitos no PHPUnit.

Qualquer dúvida sobre a integração pode entrar em contato através do meu e-mail [email protected].

cielo-1's People

Contributors

arturmagalhaesjr avatar glauberportella avatar vinaocruz avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.