Wellington Vieira Posted September 4, 2020 Report Share Posted September 4, 2020 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.