Jump to content
Fivewin Brasil

Mudança Boleto Bradesco on-line


Wellington Vieira

Recommended Posts

Fiz alterações para tornar prático o registro de boleto bancário on-line do Bradesco. Criei um script em PHP com o nome de bradesco.php e fiz um upload para o meu FTP em ( ex: www.xxxxxx.com.br), e fiz um upload do meu certificado digital no formato .pfx para uma pasta que criei de nome "certs" ( já que o banco não exige que seja o mesmo com CNPJ do cliente para gerar o arquivo codificado, podendo ser qualquer um no formato PKCS#7),  e coloquei lá na pasta "certs".

Assim não precisa utilizar o certificado do cliente e sim atualizar somente o meu e servirá para qualquer cliente, que queira emitir boleto para o bradesco de forma on-line.

Para acessar basta criar  o arquivo JSON, conforme manual técnico e passar para o ftp e tratar o retorno.

" http://www.xxxxxx.com.br/bradesco.php?json_str=" + alltrim(narquivoJSON)

O script em PHP, ira tratar o json assinando o mesmo e codificando em base64 e retornando para ser pego pelo software e encaminhado para o http do banco.

SCRIPT PHP.

<?php

    function ApagaDir($dir) {
      if($objs = glob($dir."/*")){
        foreach($objs as $obj) {
          is_dir($obj)? ApagaDir($obj) : unlink($obj);
        }
      }
    } 
    $nome_da_pasta="../public_html/data/tmp";
    ApagaDir($nome_da_pasta); 

	$pfx = "certs/certificado.pfx";
	$certPassword = "xxxxxxxxxxxx";
    $json_str = $_GET['json_str'];
    $certificado_pfx = file_get_contents($pfx);
	
    if (!openssl_pkcs12_read($certificado_pfx, $result, $certPassword)) {
        throw new Exception('Não foi possível ler o certificado .pfx');
    }
	
    $path = sprintf('%s%sdata%stmp%s', realpath('.'), DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR);
    if (@mkdir($path, 0777, true) && !is_dir($path)) {
        throw new Exception('Falha ao criar diretórios. Entre em contato com o administrador');
    }

	$jsonFile   = $path . uniqid('jsonFile', true);
    $signedFile = $path . uniqid('signedFile', true);
	
	file_put_contents($jsonFile, $json_str);

    $certKey = openssl_x509_read($result['cert']);
    $privKey = openssl_pkey_get_private($result['pkey'], $certPassword);
	
	openssl_pkcs7_sign( $jsonFile, $signedFile, $certKey, $privKey, array(), PKCS7_BINARY | PKCS7_TEXT );
	
	$signature = file_get_contents($signedFile);
	$parts = preg_split("#\n\s*\n#Uis", $signature);
    $mensagem_assinada_base64 = $parts[1];
	
	print_r($mensagem_assinada_base64);
	
?>

enviando para o script em PHP ,pegando e tratando  o retorno para ser enviado ao banco.

cSignatureValue = ""
_nArquivo_enviar = "http://www.xxxxxx.com.br/bradesco.php?json_str=" + alltrim(narquivoJSON)
try
   _oserver := CreateObject( "MSXML2.XMLHTTP" )
   _oserver:Open( "GET",_nArquivo_enviar, .F. )
   _oserver:SetRequestHeader("Content-Type","text/xml")
   _oserver:Send(_nArquivo_enviar)
   WHILE _oserver:readyState != 4
         _oserver:WaitForResponse( 500 )
   end
	cSignatureValue = _oserver:responseText
catch
   msgstop("Erro na geração do arquivo para o bradeco. www.wsiscom.com.br/bradesco.php","Atenção")
	exit
end

Enviando o retorno assinado e codificado base64 para o banco.

xnurlbano = "https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrotitulohomologacao"

 _cresposta := ""
 try
    _oserver := CreateObject( "MSXML2.XMLHTTP" )
    _oserver:Open( "POST", xnurlbanco, .F. )
    _oserver:SetRequestHeader("Content-Type","application/text/xml")
    _oserver:Send(cSignatureValue)
    WHILE _oserver:readyState != 4
          _oserver:WaitForResponse( 500 )
    end
	_cresposta := _oserver:responseText
 catch
    msgstop("Erro no envio do arquivo json do boleto para o Bradesco.","Atenção")
	exit
 end

 

O registro é concluido no banco. 

Obs. Tratar o retorno para ver se não houve erro e gravar na bases do seu software.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...