Skip to content

Biblioteca multibanco para geração e leitura de arquivos Cnab240 e Cna400 de remessa e retorno

License

Notifications You must be signed in to change notification settings

openboleto/OpenCnabPHP

Repository files navigation

OpenCnabPHP

Considere doar fundos para nos apoiar

qr-code-plus

  • Um arquivo remessaAbstract cuida das questões sobre arquivos em geral.
  • A classe para cada Remessa herda remssaAbstract e seta o nome do banco que é a pasta para os layouts personalizados
  • RegistroAbstract cuida de metodos unicos para qualquer registro de qualquer layout,
  • Uma classe genérico herda registroAbstract e implementa setters e getters comuns ao registro de um determinado layout
  • e por fim uma classe registro herda de genérico e define o layout que sera usado e se por ventura for necessario sobrepõe ou implementa novos getters e setters do arquivo generico.

    Utilizando docker:

    Esteja na raiz do projeto e execute:

    docker-compose up -d

    Instalando via composer:

    Adicione "openboleto/opencnabphp": "dev-master" ao seu composer.json e rode update ou install

    Acesse a url de exemplo: http://localhost:8080/samples/ExemploRemessa.php

    Status de desenvolvimento

    REMESSA RETORNO
    Banco Layout Situação Layout Situação
    Banco do Brasil Cnab240 Homologado Cnab240 Beta
    Bradesco Cnab400 Homologado Cnab400 Beta
    Caixa Cnab240_SIGCB DESATIVADO** Cnab240_SIGCB Homologado
    Caixa Cnab240_Transf Homologado Cnab240_Transf Homologado
    Itau Cnab240 Beta Cnab240 Beta
    Itau Cnab400 Homologado Cnab400 Homologado
    Santander Cnab240 Homologado Cnab240 Beta
    SICOOB Cnab400 Homologado Cnab400 Homologado
    SICOOB Cnab240 Homologado Cnab240 Homologado
    SICREDI Cnab400 Homologado Cnab400 Beta
    UniPrime Cnab400 Homologado Cnab400 Beta
    UniCred - - Cnab400 Homologado
    C6 Bank Cnab400 Homologado Cnab400 Homologado
    Banco ABC Cnab240 Beta Cnab240 Beta
    Banco Votorantin Cnab240 Beta Cnab240 Beta

    ** o layout da caixa foi desativado pela caixa , modificações serão necessárias para que volte a funcionar veja essa issue para entender melhor #184

    <?php
    use \CnabPHP\Remessa;
    
    $arquivo = new Remessa(104,'cnab240_SIGCB',array(
        'nome_empresa' =>"Empresa ABC", // seu nome de empresa
        'tipo_inscricao'  => 2, // 1 para cpf, 2 cnpj 
        'numero_inscricao' => $empresa->empresas_cnpjcpf, // seu cpf ou cnpj completo
        'agencia'       => '1234', // agencia sem o digito verificador 
        'agencia_dv'    => 1, // somente o digito verificador da agencia 
        'conta'         => '12345', // número da conta
        'conta_dv'     => 1, // digito da conta
        'codigo_beneficiario'     => '123456', // codigo fornecido pelo banco
        'numero_sequencial_arquivo'     => 1, // sequencial do arquivo um numero novo para cada arquivo gerado
    ));
    $lote  = $arquivo->addLote(array('tipo_servico'=> 1)); // tipo_servico  = 1 para cobrança registrada, 2 para sem registro
    
    $lote->inserirDetalhe(array(
    
        'codigo_movimento'  => 1, //1 = Entrada de título, para outras opçoes ver nota explicativa C004 manual Cnab_SIGCB na pasta docs
        'nosso_numero'      => 50, // numero sequencial de boleto
        'seu_numero'        => 43,// se nao informado usarei o nosso numero 
        
        /* campos necessarios somente para itau e siccob,  não precisa comentar se for outro layout    */
        'carteira_banco'    => 109, // codigo da carteira ex: 109,RG esse vai o nome da carteira no banco
        'cod_carteira'      => "01", // I para a maioria ddas carteiras do itau
        /*----------------------------------------------------------------------------------------    */
         
        'especie_titulo'    => "DM", // informar dm e sera convertido para codigo em qualquer laytou conferir em especie.php
        'valor'             => 100.00, // Valor do boleto como float valido em php
        'emissao_boleto'    => 2, // tipo de emissao do boleto informar 2 para emissao pelo beneficiario e 1 para emissao pelo banco
        'protestar'         => 3, // 1 = Protestar com (Prazo) dias, 3 = Devolver após (Prazo) dias
        'prazo_protesto'    => 5, // Informar o numero de dias apos o vencimento para iniciar o protesto
        'nome_pagador'      => "JOSÉ da SILVA ALVES", // O Pagador é o cliente, preste atenção nos campos abaixo
        'tipo_inscricao'    => 1, //campo fixo, escreva '1' se for pessoa fisica, 2 se for pessoa juridica
        'numero_inscricao'  => '123.122.123-56',//cpf ou ncpj do pagador
        'endereco_pagador'  => 'Rua dos developers,123 sl 103',
        'bairro_pagador'    => 'Bairro da insonia',
        'cep_pagador'       => '12345-123', // com hífem
        'cidade_pagador'    => 'Londrina',
        'uf_pagador'        => 'PR',
        'data_vencimento'   => '2016-04-09', // informar a data neste formato
        'data_emissao'      => '2016-04-09', // informar a data neste formato
        'vlr_juros'         => 0.15, // Valor do juros de 1 dia'
        'data_desconto'     => '2016-04-09', // informar a data neste formato
        'vlr_desconto'      => '0', // Valor do desconto
        'baixar'            => 1, // codigo para indicar o tipo de baixa '1' (Baixar/ Devolver) ou '2' (Não Baixar / Não Devolver)
        'prazo_baixar'       => 90, // prazo de dias para o cliente pagar após o vencimento
        'mensagem'          => 'JUROS de R$0,15 ao dia'.PHP_EOL."Não receber apos 30 dias",
        'email_pagador'     => '[email protected]', // data da multa
        'data_multa'        => '2016-04-09', // informar a data neste formato, // data da multa
        'vlr_multa'         => 30.00, // valor da multa
        
        // campos necessários somente para o sicoob
        'taxa_multa'         => 30.00, // taxa de multa em percentual
        'taxa_juros'         => 30.00, // taxa de juros em percentual
    ));        
    echo $arquivo->getText();

    Lendo retorno

    <?php
    $fileContent = file_get_contents("retorno_cnab240_caixa.ret");
    
    $arquivo = new Retorno($fileContent);
    
    $registros = $arquivo->getRegistros();
    foreach($registros as $registro)
    {
        if($registro->R3U->codigo_movimento==6){
            $nossoNumero   = $registro->nosso_numero;
            $valorRecebido = $registro->R3U->vlr_pago;
            $dataPagamento = $registro->R3U->data_ocorrencia;
            $carteira      = $registro->carteira;
            // você ja pode dar baixa
        }
    }

    Caso o arquivo de retorno seja do Tipo 4 (Bradesco - Layout 400 - Pix), sugestão:

    $fileContent = file_get_contents("retorno_cnab240_caixa.ret");
    
    $arquivo = new Retorno($fileContent);
    
    $registros = $arquivo->getRegistros();
    
    for($i = 0; $i < count($registros); $i++) {
        $pix = null;
        if ($arquivo->hasPix() && $arquivo->getLayout() == 'L400') {
        if ($i%2 == 0) { // Dados do registro na posição 'Par'
            $registro = $registros[$i];
        }
        if (($i+1)%2 != 0) { // Dados do Pix na posição 'Ímpar'
            $pix = $registros[$i+1];
        }
        $i++;
    } else {
        $registro = $registros[$i];
    }
    
    $spiUrl = $pix->pix_url; // URL para geração do QR Code (Padrão EMV utilizado pelo Banco Central do Brasil)
    $txid = $pix->txid; // Identificador da transação

    Aguardando voluntarios para edição e testes dos layouts.

    Licença

    • MIT License