tritoq/cielo

用于与Cielo Web服务及风险评估工具集成的类

该软件包的官方仓库似乎已消失,因此该软件包已被冻结。

dev-master 2015-11-11 23:21 UTC

This package is not auto-updated.

Last update: 2024-01-20 11:54:28 UTC


README

这是一个基于Thiago Paes - Mrprompt库的类集,用于与Cielo Web服务集成。

支持的卡类型

  • 美国运通
  • Aura
  • 大来卡
  • 发现卡
  • Elo
  • JCB
  • 万事达卡
  • 维萨卡

支持与风险评估和AVS的集成

为了使风险评估功能正常工作,服务需要在Cielo处激活。

安装

通过Composer

composer.json

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

}
php composer.phar update

使用

配置

配置信息的示例

    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 = 'artur@tritoq.com';
    $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);

风险评估选项

如果您选择不使用风险评估服务,只需移除$cliente$analise$pedidoAnalise即可

服务将保持如下状态

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

交易

完成上述配置后,即可进行交易

    ...

    // 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!';
    }

带有风险评估的交易

发送带有风险评估的交易

    $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!';
    }

交易捕获

交易捕获是交易生效的过程,在这里您将确认Cielo进行交易,并且商店可以收到款项。

由于欺诈的原因,我们建议稍后进行捕获,商店在捕获交易之前进行验证是很有意义的。

    $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();
    }

交易查询

交易查询是一个非常重要的程序,因为这是商店获取交易快照的地方。

    ...

    $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();
    }

直接查询

    ...

    // 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();
    }

取消

取消交易

    ...

    $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();
    }

分析结果验证

您可以检查分析结果

    ...

    // 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;

        }

    }

一般信息

Tests文件夹中,有XML结果和PHPUnit返回的结果。

关于集成的任何疑问,可以通过我的邮箱nezkal@gmail.com联系我。