fernandovaller/opencnabphp 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

fernandovaller/opencnabphp

Composer 安装命令:

composer require fernandovaller/opencnabphp

包简介

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

README 文档

README

Build Status

Considere doar fundos para nos apoiar Donate

  • 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 "quilhasoft/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 Homologado 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 openboleto#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'     => 'rogerio@ciatec.net', // 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

fernandovaller/opencnabphp 适用场景与选型建议

fernandovaller/opencnabphp 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 29 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 05 月 05 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「boleto」 「remessa」 「retorno」 「bradesco」 「cnab240」 「cnab400」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 fernandovaller/opencnabphp 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 fernandovaller/opencnabphp 我们能提供哪些服务?
定制开发 / 二次开发

基于 fernandovaller/opencnabphp 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 29
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 19
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 126
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-05-05