tritoq / cielo
用于与Cielo Web服务及风险评估工具集成的类
该软件包的官方仓库似乎已消失,因此该软件包已被冻结。
dev-master
2015-11-11 23:21 UTC
Requires
- php: >=5.3
Requires (Dev)
- phpunit/phpunit: ~5.0
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联系我。