Jump to content


Photo

Cnab 240


  • Faça o login para participar
9 replies to this topic

#1 georgewar

georgewar

    Let's upgrade myself

  • Usuários
  • 169 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro - RJ
  • Interesses:PHP - JavaScript

Posted 17/06/2008, 18:12

estou fazendo um sistema em PHP que recebe o arquivo de retorno do banco do brasil padrao CNAB 240 e dá baixa nos boletos pagos....
o problema está sendo justamente achar este arquivo (não estou falando do layout).

Já entrei em mais de uns 1000 sites e nada!

alguem pelo amor de Deus tem esse arquivo?

é o arquivo com um monte de 0 e espaço em branco mesmo...

#2 MarcoviZ

MarcoviZ

    ubuntu for human being

  • Usuários
  • 1137 posts
  • Sexo:Não informado

Posted 18/06/2008, 09:31

o banco que te envia esse arquivo...

se você quer uma apostila ou algo assim que te explique o layout pede para o banco que eles te mandão....

té+
[]'s

#3 georgewar

georgewar

    Let's upgrade myself

  • Usuários
  • 169 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro - RJ
  • Interesses:PHP - JavaScript

Posted 18/06/2008, 13:42

eu sei que o banco me envia esse arquivo, o problema é que realmente tenho que começar a fazer sem o arquivo...
quanto ao arquivo de layout, já o tenho.
de qualquer forma valew!

#4 MarcoviZ

MarcoviZ

    ubuntu for human being

  • Usuários
  • 1137 posts
  • Sexo:Não informado

Posted 18/06/2008, 14:15

bom se vc tem o arquivo de layout vc pode fazer,
esses arquivos q o banco manda é um .txt

ai é só vc formatar de acordo com o layout...

00BANCO DO BRASIL00000213002310321031203
392819381982938193392819381982938193392819
392819381982938193392819381982938193392819
392819381982938193392819381982938193392819
392819381982938193392819381982938193392819

tendeu?
[]'s

#5 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 18/06/2008, 23:56

geralmente você pede pro banco e eles enviam um manual para você começar o desenvolvimento sem o "arquivo".
Lembro que num dos meus estágios, em e-commerce, tinha manual do hsbc, bb, bradesco e caixa, ensinando fazer.

Tente entrar em contato com a parte de TI do banco e solicite um desses manuais ;)

[]'s

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#6 georgewar

georgewar

    Let's upgrade myself

  • Usuários
  • 169 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro - RJ
  • Interesses:PHP - JavaScript

Posted 19/06/2008, 13:21

desenvolvi parte do código e vou postar aqui se alguem precisar

<?php
/**
 * @author G.w.A.r em 18/06/2008 ==> GOVOIP
 * @name aplicativo appCnab240.php
 * @desc Recebe o upload do arquivo de retorno do Banco do Brasil com os boletos pagos 
 * e faz a baixa dos mesmos
 
	--> Deve-se seguir a seguinte sequência:

			REGISTRO DE HEADER DE ARQUIVO
			
			LOTE: LIQUIDACAO DE TITULOS EM CARTEIRA DE COBRANCA
			(item: 3.1.3 Pagamento de Títulos de Cobrança - subcpadr5-layout padrao V.08.02.doc, pág. 29)
			- Registro Header de lote
			- Registro Detalhe - Segmento J *Obrigatorio
			- Registro Trailer de lote
			
			REGISTRO TRAILER DE ARQUIVO
	<--
		
	--> Maiores informações:
	
		http://www.febraban.org.br/Arquivo/Servicos/Downloads/download_lista.asp?id_comissao=4
		
		Com base no arquivo:
		Padrão Febraban - 240 posições V.08.2 - Julho 2006	 	padr-v08.2.zip	  400 Kb	  06/09/2005	  19458 downloads
	
	<--
*/

/**
 * @name funcao retornaTrecho
 * @desc retorna determinado trecho de uma variável
 * @param variável geral
 * @param int - iniciando em
 * @param int - retorna X registros a partir do inicio
 */
function retornaTrecho($var, $inicio, $nDigitos){
	
	//retorna a parte solicitada da string $var (a contagem inicia-se em zero)
	return substr($var, $inicio-1, $nDigitos);
}

/**
 * @name funcao addDecimal
 * @desc coloca um ponto (.) a antes de uma quantidade de casas decimais
 * @param variável para se adicionar um ponto
 * @param int - casas decimais depois do ponto
 */
function addDecimal($var, $casasDecimais){
	
	//retorna a string formatada
	return substr_replace($var, ".", -$casasDecimais, 0);
}

//define o caminho absoluto até a pasta do arquivo
$strCaminhoAbsoluto = './';

//nome do arquivo a ser aberto
$strNomeDoArquivo = 'a.txt';

//tenta abrir o arquivo de retorno do banco
if(!$arrArquivo = file($strCaminhoAbsoluto.$strNomeDoArquivo, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES))
	exit('Não foi possível abrir o arquivo de retorno do banco!');
	
//linha atual
$i = 0;

//retira de um vez as quebras de linhas, retorno de carros e linhas vazias
foreach($arrArquivo as &$linhas){
	
	//retira \r
	$linhas = str_replace(chr(13), "", $linhas);
	
	//retira \n
	$linhas = str_replace(chr(10), "", $linhas);
	
	//apaga as linhas vazias
	if(empty($linhas))
		unset($arrArquivo[$i]);
		
	//proxima linha
	$i++;
}

//HEADER DE ARQUIVO:
$HA = $arrArquivo[0];

//separa o header do arquivo em seus pedaços
$arrArquivoRetorno['HA']['ContrBanco'] = retornaTrecho($HA, 1, 3);
$arrArquivoRetorno['HA']['ContrLote'] = retornaTrecho($HA, 4, 4);
$arrArquivoRetorno['HA']['ContrRegistro'] = retornaTrecho($HA, 8, 1);
$arrArquivoRetorno['HA']['CNAB1'] = retornaTrecho($HA, 9, 9);
$arrArquivoRetorno['HA']['EmpInscTipo'] = retornaTrecho($HA, 18, 1);
$arrArquivoRetorno['HA']['EmpInscNum'] = retornaTrecho($HA, 19, 14);
$arrArquivoRetorno['HA']['EmpConvenio'] = retornaTrecho($HA, 33, 20);
$arrArquivoRetorno['HA']['EmpContCorAgenCod'] = retornaTrecho($HA, 53, 5);
$arrArquivoRetorno['HA']['EmpContCorAgenDV'] = retornaTrecho($HA, 58, 1);
$arrArquivoRetorno['HA']['EmpContCorContNum'] = retornaTrecho($HA, 59, 12);
$arrArquivoRetorno['HA']['EmpContCorContDV'] = retornaTrecho($HA, 71, 1);
$arrArquivoRetorno['HA']['EmpContCorDV'] = retornaTrecho($HA, 72, 1);
$arrArquivoRetorno['HA']['EmpNome'] = retornaTrecho($HA, 73, 30);
$arrArquivoRetorno['HA']['NomeBanco'] = retornaTrecho($HA, 103, 30);
$arrArquivoRetorno['HA']['CNAB2'] = retornaTrecho($HA, 133, 10);
$arrArquivoRetorno['HA']['ArqCodigo'] = retornaTrecho($HA, 143, 1);
$arrArquivoRetorno['HA']['ArqDataGeracao'] = retornaTrecho($HA, 144, 8);
$arrArquivoRetorno['HA']['ArqHoraGeracao'] = retornaTrecho($HA, 152, 6);
$arrArquivoRetorno['HA']['ArqSequencia'] = retornaTrecho($HA, 158, 6);
$arrArquivoRetorno['HA']['ArqLayout'] = retornaTrecho($HA, 164, 3);
$arrArquivoRetorno['HA']['ArqDensidade'] = retornaTrecho($HA, 167, 5);
$arrArquivoRetorno['HA']['ReservadoBanco'] = retornaTrecho($HA, 172, 20);
$arrArquivoRetorno['HA']['ReservadoEmpresa'] = retornaTrecho($HA, 192, 20);
$arrArquivoRetorno['HA']['CNAB3'] = retornaTrecho($HA, 212, 29);

//número total de linhas do arquivo
$nTotalLinhas = count($arrArquivo);

//TRAILER DE ARQUIVO:
$TA = $arrArquivo[$nTotalLinhas-1];

//separa o trailer do arquivo em seus pedaços
$arrArquivoRetorno['TA']['ContrBanco'] = retornaTrecho($TA, 1, 3);
$arrArquivoRetorno['TA']['ContrLote'] = retornaTrecho($TA, 4, 4);
$arrArquivoRetorno['TA']['ContrRegistro'] = retornaTrecho($TA, 8, 1);
$arrArquivoRetorno['TA']['CNAB1'] = retornaTrecho($TA, 9, 9);
$arrArquivoRetorno['TA']['TotaisQtdeLotes'] = retornaTrecho($TA, 18, 6);
$arrArquivoRetorno['TA']['TotaisQtdeRegistros'] = retornaTrecho($TA, 24, 6);
$arrArquivoRetorno['TA']['TotaisQtdeConcil'] = retornaTrecho($TA, 30, 6);
$arrArquivoRetorno['TA']['CNAB2'] = retornaTrecho($TA, 36, 205);

//retira o header e trailer de arquivo para ficar apenas os lotes
unset($arrArquivo[0]);
unset($arrArquivo[$nTotalLinhas-1]);

//ordena o array $arrArquivo
sort($arrArquivo);

//HEADER DO LOTE:
$HL = $arrArquivo[0];

//separa o header do lote em seus pedaços
$arrArquivoRetorno['HL']['ContrBanco'] = retornaTrecho($HL, 1, 3);
$arrArquivoRetorno['HL']['ContrLote'] = retornaTrecho($HL, 4, 4);
$arrArquivoRetorno['HL']['ContrRegistro'] = retornaTrecho($HL, 8, 1);
$arrArquivoRetorno['HL']['ServOperacao'] = retornaTrecho($HL, 9, 1);
$arrArquivoRetorno['HL']['ServServico'] = retornaTrecho($HL, 10, 2);
$arrArquivoRetorno['HL']['ServFormLanca'] = retornaTrecho($HL, 12, 2);
$arrArquivoRetorno['HL']['ServLayout'] = retornaTrecho($HL, 14, 3);
$arrArquivoRetorno['HL']['CNAB1'] = retornaTrecho($HL, 17, 1);
$arrArquivoRetorno['HL']['EmpInscTipo'] = retornaTrecho($HL, 18, 1);
$arrArquivoRetorno['HL']['EmpInscNum'] = retornaTrecho($HL, 19, 14);
$arrArquivoRetorno['HL']['EmpConvenio'] = retornaTrecho($HL, 33, 20);
$arrArquivoRetorno['HL']['EmpContCorAgenCod'] = retornaTrecho($HL, 53, 5);
$arrArquivoRetorno['HL']['EmpContCorDV'] = retornaTrecho($HL, 58, 1);
$arrArquivoRetorno['HL']['EmpContCorContNum'] = retornaTrecho($HL, 59, 12);
$arrArquivoRetorno['HL']['EmpContCorContDV'] = retornaTrecho($HL, 71, 1);
$arrArquivoRetorno['HL']['EmpContCorDV'] = retornaTrecho($HL, 72, 1);
$arrArquivoRetorno['HL']['EmpNome'] = retornaTrecho($HL, 73, 30);
$arrArquivoRetorno['HL']['Informacao1'] = retornaTrecho($HL, 103, 40);
$arrArquivoRetorno['HL']['EmpEndLogra'] = retornaTrecho($HL, 143, 30);
$arrArquivoRetorno['HL']['EmpEndNum'] = retornaTrecho($HL, 173, 5);
$arrArquivoRetorno['HL']['EmpEndComple'] = retornaTrecho($HL, 178, 15);
$arrArquivoRetorno['HL']['EmpEndCidade'] = retornaTrecho($HL, 193, 20);
$arrArquivoRetorno['HL']['EmpEndCEP'] = retornaTrecho($HL, 213, 5);
$arrArquivoRetorno['HL']['EmpEndCompleCEP'] = retornaTrecho($HL, 218, 3);
$arrArquivoRetorno['HL']['EmpEndEstado'] = retornaTrecho($HL, 221, 2);
$arrArquivoRetorno['HL']['CNAB2'] = retornaTrecho($HL, 223, 8);
$arrArquivoRetorno['HL']['Ocorrencias'] = retornaTrecho($HL, 231, 10);

//número total de linhas do arquivo
$nTotalLinhas = count($arrArquivo);

//TRAILER DO LOTE:
$TL = $arrArquivo[$nTotalLinhas-1];

//separa o trailer do lote em seus pedaços
$arrArquivoRetorno['TL']['ContrBanco'] = retornaTrecho($TL, 1, 3);
$arrArquivoRetorno['TL']['ContrLote'] = retornaTrecho($TL, 4, 4);
$arrArquivoRetorno['TL']['ContrRegistro'] = retornaTrecho($TL, 8, 1);
$arrArquivoRetorno['TL']['CNAB1'] = retornaTrecho($TL, 9, 9);
$arrArquivoRetorno['TL']['TotaisQtdeRegistros'] = retornaTrecho($TL, 18, 6);
$arrArquivoRetorno['TL']['TotaisValor'] = addDecimal(retornaTrecho($TL, 24, 18), 2);
$arrArquivoRetorno['TL']['TotaisQtdeMoeda'] = retornaTrecho($TL, 42, 18);
$arrArquivoRetorno['TL']['NumAvisoDebito'] = retornaTrecho($TL, 60, 6);
$arrArquivoRetorno['TL']['CNAB2'] = retornaTrecho($TL, 66, 165);
$arrArquivoRetorno['TL']['Ocorrencias'] = retornaTrecho($TL, 231, 10);

//retira o header e trailer do lote para ficar apenas os registros
unset($arrArquivo[0]);
unset($arrArquivo[$nTotalLinhas-1]);

//ordena o array $arrArquivo
sort($arrArquivo);

//conta quantos registros o arquivo tem
$nRegistros = count($arrArquivo);

//navega entre os registros e os formata em arrays (SEGMENTO J)
for($i=0; $i<$nRegistros; $i++){
	
	//obtém o registro atual
	$registroAtual = $arrArquivo[$i];
	
	//cadastra cada registro separadamente com seus detalhes
	$arrArquivoRetorno['REGISTRO'.$i]['ContrBanco'] = retornaTrecho($registroAtual, 1, 3);
	$arrArquivoRetorno['REGISTRO'.$i]['ContrLote'] = retornaTrecho($registroAtual, 4, 4);
	$arrArquivoRetorno['REGISTRO'.$i]['ContrRegistro'] = retornaTrecho($registroAtual, 8, 1);
	$arrArquivoRetorno['REGISTRO'.$i]['ServNumRegistro'] = retornaTrecho($registroAtual, 9, 5);
	$arrArquivoRetorno['REGISTRO'.$i]['ServSegmento'] = retornaTrecho($registroAtual, 14, 1);
	$arrArquivoRetorno['REGISTRO'.$i]['ServMovimTipo'] = retornaTrecho($registroAtual, 15, 1);
	$arrArquivoRetorno['REGISTRO'.$i]['ServMovimCod'] = retornaTrecho($registroAtual, 16, 2);
	$arrArquivoRetorno['REGISTRO'.$i]['PagCodBarras'] = retornaTrecho($registroAtual, 18, 44);
	$arrArquivoRetorno['REGISTRO'.$i]['PagNomCedente'] = retornaTrecho($registroAtual, 62, 30);
	$arrArquivoRetorno['REGISTRO'.$i]['PagDataVenc'] = retornaTrecho($registroAtual, 92, 8);
	$arrArquivoRetorno['REGISTRO'.$i]['PagValorTitulo'] = retornaTrecho($registroAtual, 100, 15);
	$arrArquivoRetorno['REGISTRO'.$i]['PagDesconto'] = retornaTrecho($registroAtual, 115, 15);
	$arrArquivoRetorno['REGISTRO'.$i]['PagAcrescimo'] = retornaTrecho($registroAtual, 130, 15);
	$arrArquivoRetorno['REGISTRO'.$i]['PagDataPagamen'] = retornaTrecho($registroAtual, 145, 8);
	$arrArquivoRetorno['REGISTRO'.$i]['PagValorPagamen'] = retornaTrecho($registroAtual, 153, 15);
	$arrArquivoRetorno['REGISTRO'.$i]['PagQtdeMoeda'] = retornaTrecho($registroAtual, 168, 15);
	$arrArquivoRetorno['REGISTRO'.$i]['PagRefSacado'] = retornaTrecho($registroAtual, 183, 20);
	$arrArquivoRetorno['REGISTRO'.$i]['NossoNum'] = retornaTrecho($registroAtual, 203, 20);
	$arrArquivoRetorno['REGISTRO'.$i]['CodDeMoeda'] = retornaTrecho($registroAtual, 223, 2);
	$arrArquivoRetorno['REGISTRO'.$i]['CNAB'] = retornaTrecho($registroAtual, 225, 6);
	$arrArquivoRetorno['REGISTRO'.$i]['Ocorrencias'] = retornaTrecho($registroAtual, 231, 10);
}

echo '<pre>';
print_r($arrArquivoRetorno);
echo '</pre>';

?>

a.txt:
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567890
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567891
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567892
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567893
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567894
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567895
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567896
001123451T9830030 2123456789101231234567890101112131453164100981121212120GOVOIP DA SILVIAOOOOOOOOOOOOOO																  12345acvbnmjklophgjkrtyacvbnmjklophgjkrty1212345123MG		1234567897


#7 Gandalf - The White

Gandalf - The White

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 02/08/2008, 15:52

bem massa! eu preciso criar o arquivo de remesa alguem sabe como se faz?

estou todo enrolado aqui para criar esse arquivo de envio para o banco. (remessa de boleto)

fico no aguardo

Robson

#8 franklin_mcz

franklin_mcz

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 24/08/2009, 17:49

bem massa! eu preciso criar o arquivo de remesa alguem sabe como se faz?

estou todo enrolado aqui para criar esse arquivo de envio para o banco. (remessa de boleto)

fico no aguardo

Robson


Estou precisando fazer o mesmo. Já conseguiu alguma coisa?

#9 Camarão

Camarão

    12 Horas

  • Usuários
  • 123 posts
  • Sexo:Masculino
  • Localidade:Divinópolis

Posted 24/08/2009, 23:34

Cara qual a duvida?
olha http://www14.bancobr...ayout/index.htm
nao eh dificil vc so vai trabalhar kebrando a string nas posições indicadas para gerar cada variavel.
tem q ter um poko de pacieneic, mas vai ,posta as duvidas no forum
flow
<?php echo("Guilherme Marques Eloi"); ?>

#10 Marcos Aires

Marcos Aires

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:BH - MG

Posted 14/12/2009, 20:47

geralmente você pede pro banco e eles enviam um manual para você começar o desenvolvimento sem o "arquivo".
Lembro que num dos meus estágios, em e-commerce, tinha manual do hsbc, bb, bradesco e caixa, ensinando fazer.

Tente entrar em contato com a parte de TI do banco e solicite um desses manuais ;)

[]'s

Você tem este codigo para asp?




Estou tentando a meses e não consegui achar na net...
Marcos
aires@datte.com.br




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq