Arquivado
Este tópico foi arquivado e está fechado para novas respostas.
Recommended Posts
-
Conteúdo Similar
-
Por rnicson
Estou com problemas em um script usado com boletophp para enviar vários boletos de uma vez, no sistema eu consegui fazer com que gere os pdf e armazena em uma pasta boletos corretamente separado pelo nome que seria o id do cliente,esse boleto é enviado por email ao responsável cadastrado. As informações estão chegando corretamente porém estou tendo problema com o código de barras e o número do código pois está gerando apenas 1.
Eu tenho visto algumas postagens e aparentemente é no include funcao_itau.php que faz o serviço de gerar o código de barra.
<?php $mysqli = new mysqli("", "", "", ""); $query = "SELECT * FROM gerar_boleto"; $query2 = "SELECT * FROM boletos_gerados ORDER BY id DESC"; $result = $mysqli->query($query); $result2 = $mysqli->query($query2); $row2 = $result2->fetch_assoc(); $nosso_Numero = $row2['nosso_numero']; while ($row = $result->fetch_assoc()) { $valor = $row['valor_boleto']; $cliente = $row['cliente']; $cnpj = $row['cnpj']; $email = $row['email']; $documento = $row['documento']; $vencimento = $row['data_vencimento']; $data_vencimento = date("d/m/Y",strtotime("$vencimento")); $documento = $row['data_documento']; $data_documento = date("d/m/Y",strtotime("$documento")); $vencimento_remessa = date("Y-m-d",strtotime("$vencimento")); $documento_remessa = date("Y-m-d",strtotime("$documento")); $endereco = $row['endereco']; $bairro = $row['bairro']; $cep = $row['cep']; $cidade = $row['cidade']; $estado = $row['estado']; $id = $row['id']; $data = date('m'); $numero_Documento = "CONT-".date('m')."/".date('Y'); $posicao_Numero = $nosso_Numero+1; $data_atual = date("Y"); $registro = $posicao_Numero; // DADOS DO BOLETO PARA O SEU CLIENTE $dias_de_prazo_para_pagamento = 0; $taxa_boleto = 0.00; $data_venc = $data_vencimento; // Prazo de X dias OU informe data: "13/04/2006"; $valor_cobrado = "2950,00"; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal $valor_cobrado = str_replace(",", ".",$valor_cobrado); $valor_boleto=number_format($valor_cobrado+$taxa_boleto, 2, ',', ''); $dadosboleto["nosso_numero"] = $posicao_Numero; // Nosso numero - REGRA: M�ximo de 8 caracteres! $dadosboleto["numero_documento"] = $numero_Documento; // Num do pedido ou nosso numero $dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA $dadosboleto["data_documento"] = $data_documento; // Data de emiss�o do Boleto $dadosboleto["data_processamento"] = $data_documento; // Data de processamento do boleto (opcional) $dadosboleto["valor_boleto"] = $valor; // Valor do Boleto - REGRA: Com v�rgula e sempre com duas casas depois da virgula // DADOS DO SEU CLIENTE $dadosboleto["sacado"] = $cliente .' - '. $cnpj; $dadosboleto["endereco1"] = $endereco. '-' .$bairro; $dadosboleto["endereco2"] = $cidade. '-'. $estado. '- CEP:'. $cep; // INFORMACOES PARA O CLIENTE $dadosboleto["demonstrativo1"] = "Filiação - "; $dadosboleto["demonstrativo2"] = "Contribuição REF. AGOSTO/2018"; $dadosboleto["demonstrativo3"] = ""; $dadosboleto["instrucoes1"] = "- Sr. Caixa, não receber após o vencimento"; $dadosboleto["instrucoes2"] = ""; $dadosboleto["instrucoes3"] = "- "; $dadosboleto["instrucoes4"] = " Emitido por"; // DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE $dadosboleto["quantidade"] = "1"; $dadosboleto["valor_unitario"] = "$valor"; $dadosboleto["aceite"] = "S"; $dadosboleto["especie"] = "R$"; $dadosboleto["especie_doc"] = "R$"; // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- // // DADOS DA SUA CONTA - SICREDI $dadosboleto["agencia"] = ""; // Num da agencia, sem digito $dadosboleto["conta"] = ""; // Num da conta, sem digito $dadosboleto["conta_dv"] = ""; // Digito do Num da conta // DADOS PERSONALIZADOS - SICREDI $dadosboleto["carteira"] = "109"; // SEUS DADOS $dadosboleto["identificacao"] = ""; $dadosboleto["cpf_cnpj"] = ""; $dadosboleto["endereco"] = ""; $dadosboleto["cidade_uf"] = ""; $dadosboleto["cedente"] = ""; ob_start(); // NÃO ALTERAR! include_once("include/funcoes_itau.php"); include("include/layout_sicredi.php"); $content = ob_get_clean(); // convert require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php'); try { $html2pdf = new HTML2PDF('P','A4','fr', array(0, 0, 0, 0)); /* Abre a tela de impressão */ //$html2pdf->pdf->IncludeJS("print(true);"); $html2pdf->pdf->SetDisplayMode('real'); /* Parametro vuehtml = true desabilita o pdf para desenvolvimento do layout */ $html2pdf->writeHTML($content, isset($_GET['vuehtml'])); /* Abrir no navegador */ //$html2pdf->Output('boleto.pdf'); mkdir('boletos/'.date('m-Y')); /* Salva o PDF no servidor para enviar por email */ $html2pdf->Output('boletos/'.date('m-Y').'/'.$id.'.pdf', 'F'); /* Força o download no browser */ //$html2pdf->Output('boleto'.$id.'.pdf', 'D'); } catch(HTML2PDF_exception $e) { echo $e; exit; } // Inclui o arquivo class.phpmailer.php localizado na pasta class require_once("PHPMailer_5.2.0/class.phpmailer.php"); // Inicia a classe PHPMailer $mail = new PHPMailer(true); // Define os dados do servidor e tipo de conexão // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->IsSMTP(); // Define que a mensagem será SMTP try { $mail->Host = 'mail.site.org.br'; // Endereço do servidor SMTP (Autenticação, utilize o host smtp.seudomínio.com.br) $mail->SMTPAuth = true; // Usar autenticação SMTP (obrigatório para smtp.seudomínio.com.br) $mail->Port = 587; // Usar 587 porta SMTP $mail->Username = 'email@site.org.br'; // Usuário do servidor SMTP (endereço de email) $mail->Password = 'password'; // Senha do servidor SMTP (senha do email usado) //Define o remetente // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->SetFrom('email@site.org.br', 'empresa'); //Seu e-mail $mail->AddReplyTo('email@site.org.br', 'empresa'); //Seu e-mail $mail->Subject = 'Boleto Empresa';//Assunto do e-mail //Define os destinatário(s) //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->AddAddress($email, $cliente); //Campos abaixo são opcionais //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //$mail->AddCC('destinarario@dominio.com.br', 'Destinatario'); // Copia //$mail->AddBCC('destinatario_oculto@dominio.com.br', 'Destinatario2`'); // Cópia Oculta $mail->AddAttachment('boletos/'.date('m-Y').'/'.$id.'.pdf'); // Adicionar um anexo //Define o corpo do email $mail->MsgHTML('Contribuição Mensal'); ////Caso queira colocar o conteudo de um arquivo utilize o método abaixo ao invés da mensagem no corpo do e-mail. //$mail->MsgHTML(file_get_contents('arquivo.html')); $mail->Send(); echo "Mensagem enviada com sucesso</p>\n"; //caso apresente algum erro é apresentado abaixo com essa exceção. }catch (phpmailerException $e) { echo $e->errorMessage(); //Mensagem de erro costumizada do PHPMailer } $sql="INSERT INTO boletos_gerados (id,nosso_numero, numero_documento, data_vencimento, data_documento, valor_boleto, id_cliente) VALUES ('','$registro','$numero_Documento','$data_vencimento','$data_documento','$valor','$id')"; $insert = $mysqli->query($sql); $sql2="INSERT INTO boleto_filiadas (id,nosso_numero, numero_documento, data_vencimento, data_documento, valor, nome_cliente, tipo_documento, documento, logradouro, bairro, cep, cidade, estado) VALUES ('','$registro','$numero_Documento','$vencimento_remessa','$documento_remessa','$valor','$cliente','CNPJ','$cnpj','$endereco', '$bairro', '$cep', '$cidade', '$estado')"; $insert2 = $mysqli->query($sql2); }
-
Por Marcos RJ
Olá pessoal. Na paz?
É o seguinte, por algum tempo usei o PHP Boleto para disparos de cobrança, porém agora os boletos tem que ser registrados. Alguém sabe como eu faria para fazer o PHP Boleto ser registrado? Entendo que terei que fazer o arquivo de envio e remessa, como eu faria para ter um modelo desses arquivos dos seguintes bancos: Itaú, Bradesco, Caixa, BB e Santander?
Obrigado
Marcos
-
Por progrphp
Boa tarde,
Estou usando o BoletoPHP para gerar nossos boletos, o erro q estamos enfrentando é que ao gerar o código de barras está vindo alguns campos a mais, o correto seria a primeira numeração, porem o que esta sendo lido pelo código de barras é a segunda.
1º - 03392753000000055009559793500000000021780101
2º - 033947530000000550095597935000000000000002178101
A função q estou utilizando é a seguinte:
<?php // +----------------------------------------------------------------------+ // | BoletoPhp - Versão Beta | // +----------------------------------------------------------------------+ // | Este arquivo está disponível sob a Licença GPL disponível pela Web | // | em http://pt.wikipedia.org/wiki/GNU_General_Public_License | // | Você deve ter recebido uma cópia da GNU Public License junto com | // | esse pacote; se não, escreva para: | // | | // | Free Software Foundation, Inc. | // | 59 Temple Place - Suite 330 | // | Boston, MA 02111-1307, USA. | // +----------------------------------------------------------------------+ // +----------------------------------------------------------------------+ // | Originado do Projeto BBBoletoFree que tiveram colaborações de Daniel | // | William Schultz e Leandro Maniezo que por sua vez foi derivado do | // | PHPBoleto de João Prado Maia e Pablo Martins F. Costa | // | | // | Se você quer colaborar, nos ajude a desenvolver p/ os demais bancos :-)| // | Acesse o site do Projeto BoletoPhp: www.boletophp.com.br | // +----------------------------------------------------------------------+ // +----------------------------------------------------------------------------+ // | Equipe Coordenação Projeto BoletoPhp: <boletophp@boletophp.com.br> | // | Desenvolvimento Boleto Santander-Banespa : Fabio R. Lenharo | // +----------------------------------------------------------------------------+ date_default_timezone_set('America/Los_Angeles'); $codigobanco = "033"; //Antigamente era 353 $codigo_banco_com_dv = geraCodigoBanco($codigobanco); $nummoeda = "9"; $fixo = "9"; // Numero fixo para a posição 05-05 $ios = "0"; // IOS - somente para Seguradoras (Se 7% informar 7, limitado 9%) // Demais clientes usar 0 (zero) $fator_vencimento = fator_vencimento($dadosboleto["data_vencimento"]); //valor tem 10 digitos, sem virgula $valor = formata_numero($dadosboleto["valor_boleto"],10,0,"valor"); //Modalidade Carteira $carteira = $dadosboleto["carteira"]; //codigocedente deve possuir 7 caracteres $codigocliente = formata_numero($dadosboleto["codigo_cliente"],7,0); //nosso número (sem dv) é 11 digitos $nnum = formata_numero($dadosboleto["nosso_numero"],7,0); //dv do nosso número $dv_nosso_numero = modulo_11($nnum,9,0); // nosso número (com dvs) são 13 digitos $nossonumero = "00000".$nnum.$dv_nosso_numero; $vencimento = $dadosboleto["data_vencimento"]; $vencjuliano = dataJuliano($vencimento); // 43 numeros para o calculo do digito verificador do codigo de barras $barra = "$codigobanco$nummoeda$fator_vencimento$valor$fixo$codigocliente$nossonumero$carteira"; //$barra = "$codigobanco$nummoeda$fixo$codigocliente$nossonumero$ios$carteira"; $dv = digitoVerificador_barra($barra); // Numero para o codigo de barras com 44 digitos $linha = substr($barra,0,4) . $dv . substr($barra,4); $dadosboleto["codigo_barras"] = $linha; $dadosboleto["linha_digitavel"] = monta_linha_digitavel($linha); $dadosboleto["nosso_numero"] = $nossonumero; $dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv; function dataJuliano($data) { $dia = (int)substr($data,1,2); $mes = (int)substr($data,3,2); $ano = (int)substr($data,6,4); $dataf = strtotime("$ano/$mes/$dia"); $datai = strtotime(($ano-1).'/12/31'); $dias = (int)(($dataf - $datai)/(60*60*24)); return str_pad($dias,3,'0',STR_PAD_LEFT).substr($data,9,4); } function digitoVerificador_nossonumero($numero) { $resto2 = modulo_11($numero, 9, 1); $digito = 11 - $resto2; if ($digito == 10 || $digito == 11) { $dv = 0; } else { $dv = $digito; } return $dv; } function digitoVerificador_barra($numero) { $resto2 = modulo_11($numero, 9, 1); if ($resto2 == 0 || $resto2 == 1 || $resto2 == 10) { $dv = 1; } else { $dv = 11 - $resto2; } return $dv; } // FUNÇÕES // Algumas foram retiradas do Projeto PhpBoleto e modificadas para atender as particularidades de cada banco function formata_numero($numero,$loop,$insert,$tipo = "geral") { if ($tipo == "geral") { $numero = str_replace(",","",$numero); while(strlen($numero)<$loop){ $numero = $insert . $numero; } } if ($tipo == "valor") { /* retira as virgulas formata o numero preenche com zeros */ $numero = str_replace(",","",$numero); while(strlen($numero)<$loop){ $numero = $insert . $numero; } } if ($tipo == "convenio") { while(strlen($numero)<$loop){ $numero = $numero . $insert; } } return $numero; } function fbarcode($valor){ $fino = 1 ; $largo = 3 ; $altura = 50 ; $barcodes[0] = "00110" ; $barcodes[1] = "10001" ; $barcodes[2] = "01001" ; $barcodes[3] = "11000" ; $barcodes[4] = "00101" ; $barcodes[5] = "10100" ; $barcodes[6] = "01100" ; $barcodes[7] = "00011" ; $barcodes[8] = "10010" ; $barcodes[9] = "01010" ; for($f1=9;$f1>=0;$f1--){ for($f2=9;$f2>=0;$f2--){ $f = ($f1 * 10) + $f2 ; $texto = "" ; for($i=1;$i<6;$i++){ $texto .= substr($barcodes[$f1],($i-1),1) . substr($barcodes[$f2],($i-1),1); } $barcodes[$f] = $texto; } } //Desenho da barra //Guarda inicial ?><img src=/boletophp/imagens/p.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img src=/boletophp/imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img src=/boletophp/imagens/p.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img src=/boletophp/imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img <?php $texto = $valor ; if((strlen($texto) % 2) <> 0){ $texto = "0" . $texto; } // Draw dos dados while (strlen($texto) > 0) { $i = round(esquerda($texto,2)); $texto = direita($texto,strlen($texto)-2); $f = $barcodes[$i]; for($i=1;$i<11;$i+=2){ if (substr($f,($i-1),1) == "0") { $f1 = $fino ; }else{ $f1 = $largo ; } ?> src=/boletophp/imagens/p.png width=<?php echo $f1?> height=<?php echo $altura?> border=0><img <?php if (substr($f,$i,1) == "0") { $f2 = $fino ; }else{ $f2 = $largo ; } ?> src=/boletophp/imagens/b.png width=<?php echo $f2?> height=<?php echo $altura?> border=0><img <?php } } // Draw guarda final ?> src=/boletophp/imagens/p.png width=<?php echo $largo?> height=<?php echo $altura?> border=0><img src=/boletophp/imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img src=/boletophp/imagens/p.png width=<?php echo 1?> height=<?php echo $altura?> border=0> <?php } //Fim da função function esquerda($entra,$comp){ return substr($entra,0,$comp); } function direita($entra,$comp){ return substr($entra,strlen($entra)-$comp,$comp); } function fator_vencimento($data) { $data = explode("/",$data); $ano = $data[2]; $mes = $data[1]; $dia = $data[0]; return(abs((_dateToDays("1997","10","07")) - (_dateToDays($ano, $mes, $dia)))); } function _dateToDays($year,$month,$day) { $century = substr($year, 0, 2); $year = substr($year, 2, 2); if ($month > 2) { $month -= 3; } else { $month += 9; if ($year) { $year--; } else { $year = 99; $century --; } } return ( floor(( 146097 * $century) / 4 ) + floor(( 1461 * $year) / 4 ) + floor(( 153 * $month + 2) / 5 ) + $day + 1721119); } function modulo_10($num) { $numtotal10 = 0; $fator = 2; // Separacao dos numeros for ($i = strlen($num); $i > 0; $i--) { // pega cada numero isoladamente $numeros[$i] = substr($num,$i-1,1); // Efetua multiplicacao do numero pelo (falor 10) // 2002-07-07 01:33:34 Macete para adequar ao Mod10 do Itaú $temp = $numeros[$i] * $fator; $temp0=0; foreach (preg_split('//',$temp,-1,PREG_SPLIT_NO_EMPTY) as $k=>$v){ $temp0+=$v; } $parcial10[$i] = $temp0; //$numeros[$i] * $fator; // monta sequencia para soma dos digitos no (modulo 10) $numtotal10 += $parcial10[$i]; if ($fator == 2) { $fator = 1; } else { $fator = 2; // intercala fator de multiplicacao (modulo 10) } } // várias linhas removidas, vide função original // Calculo do modulo 10 $resto = $numtotal10 % 10; $digito = 10 - $resto; if ($resto == 0) { $digito = 0; } return $digito; } function modulo_11($num, $base=9, $r=0) { /** * Autor: * Pablo Costa <pablo@users.sourceforge.net> * * Função: * Calculo do Modulo 11 para geracao do digito verificador * de boletos bancarios conforme documentos obtidos * da Febraban - www.febraban.org.br * * Entrada: * $num: string numérica para a qual se deseja calcularo digito verificador; * $base: valor maximo de multiplicacao [2-$base] * $r: quando especificado um devolve somente o resto * * Saída: * Retorna o Digito verificador. * * Observações: * - Script desenvolvido sem nenhum reaproveitamento de código pré existente. * - Assume-se que a verificação do formato das variáveis de entrada é feita antes da execução deste script. */ $soma = 0; $fator = 2; /* Separacao dos numeros */ for ($i = strlen($num); $i > 0; $i--) { // pega cada numero isoladamente $numeros[$i] = substr($num,$i-1,1); // Efetua multiplicacao do numero pelo falor $parcial[$i] = $numeros[$i] * $fator; // Soma dos digitos $soma += $parcial[$i]; if ($fator == $base) { // restaura fator de multiplicacao para 2 $fator = 1; } $fator++; } /* Calculo do modulo 11 */ if ($r == 0) { $soma *= 10; $digito = $soma % 11; if ($digito == 10) { $digito = 0; } return $digito; } elseif ($r == 1){ $resto = $soma % 11; return $resto; } } function modulo_11_invertido($num) // Calculo de Modulo 11 "Invertido" (com pesos de 9 a 2 e não de 2 a 9) { $ftini = 2; $fator = $ftfim = 9; $soma = 0; for ($i = strlen($num); $i > 0; $i--) { $soma += substr($num,$i-1,1) * $fator; if(--$fator < $ftini) $fator = $ftfim; } $digito = $soma % 11; if($digito > 9) $digito = 0; return $digito; } function monta_linha_digitavel($codigo) { // Posição Conteúdo // 1 a 3 Número do banco // 4 Código da Moeda - 9 para Real ou 8 - outras moedas // 5 Fixo "9' // 6 a 9 PSK - codigo cliente (4 primeiros digitos) // 10 a 12 Restante do PSK (3 digitos) // 13 a 19 7 primeiros digitos do Nosso Numero // 20 a 25 Restante do Nosso numero (8 digitos) - total 13 (incluindo digito verificador) // 26 a 26 IOS // 27 a 29 Tipo Modalidade Carteira // 30 a 30 Dígito verificador do código de barras // 31 a 34 Fator de vencimento (qtdade de dias desde 07/10/1997 até a data de vencimento) // 35 a 44 Valor do título // 1. Primeiro Grupo - composto pelo código do banco, código da moéda, Valor Fixo "9" // e 4 primeiros digitos do PSK (codigo do cliente) e DV (modulo10) deste campo $campo1 = substr($codigo,0,3) . substr($codigo,3,1) . substr($codigo,19,1) . substr($codigo,20,4); $campo1 = $campo1 . modulo_10($campo1); $campo1 = substr($campo1, 0, 5).'.'.substr($campo1, 5); // 2. Segundo Grupo - composto pelas 3 últimas posiçoes do PSK e 7 primeiros dígitos do Nosso Número // e DV (modulo10) deste campo $campo2 = substr($codigo,24,10); $campo2 = $campo2 . modulo_10($campo2); $campo2 = substr($campo2, 0, 5).'.'.substr($campo2, 5); // 3. Terceiro Grupo - Composto por : Restante do Nosso Numero (6 digitos), IOS, Modalidade da Carteira // e DV (modulo10) deste campo $campo3 = substr($codigo,34,10); $campo3 = $campo3 . modulo_10($campo3); $campo3 = substr($campo3, 0, 5).'.'.substr($campo3, 5); // 4. Campo - digito verificador do codigo de barras $campo4 = substr($codigo, 4, 1); // 5. Campo composto pelo fator vencimento e valor nominal do documento, sem // indicacao de zeros a esquerda e sem edicao (sem ponto e virgula). Quando se // tratar de valor zerado, a representacao deve ser 0000000000 (dez zeros). $campo5 = substr($codigo, 5, 4) . substr($codigo, 9, 10); return "$campo1 $campo2 $campo3 $campo4 $campo5"; } function geraCodigoBanco($numero) { $parte1 = substr($numero, 0, 3); $parte2 = modulo_11($parte1); return $parte1 . "-" . $parte2; } ?>
-
Por asonoda
Boa tarde a todos.
Estou precisando registrar os boletos no banco Bradesco e Santander utilizando o webservices que eles disponibilizaram.
Procurei e não encontrei nenhum exemplo ou artigo falando técnicamente como se faz a conexão e a utilização do serviço.
O Bradesco me parece mais complicado pois tem que assinar o Json com o certificado privado (PKCS#7) e transformar em Base64 antes de transmitir para o Bradesco via Webservices.
O Santander ainda não analisei diretiro como é feito a comunicação para envio do registro.
Alguém já fez isso ou algo parecido para me ajudar. Pode ser em Java, PHP ou Oracle (PL/SQL).
Obrigado a todos pela atenção.
-
Por asonoda
Boa tarde a todos.
Estou precisando registrar os boletos no banco Bradesco e Santander utilizando o webservices que eles disponibilizaram.
Procurei e não encontrei nenhum exemplo ou artigo falando técnicamente como se faz a conexão e a utilização do serviço.
O Bradesco me parece mais complicado pois tem que assinar o Json com o certificado privado (PKCS#7) e transformar em Base64 antes de transmitir para o Bradesco via Webservices.
O Santander ainda não analisei diretiro como é feito a comunicação para envio do registro.
Alguém já fez isso ou algo parecido para me ajudar. Pode ser em Java, PHP ou Oracle (PL/SQL).
Obrigado a todos pela atenção.
-