tarcisioruas / shopfacil-bradesco-registro-boleto

Registro de Boletos Bradesco via ShopFacil
9 stars 2 forks source link

Ajuda com configuração #3

Closed gustavosfreitas closed 3 years ago

gustavosfreitas commented 5 years ago

Olá.

Estou fazendo a configuração pela primeira vez utilizando Laravel 5.6. Ao chamar o controller estou recebendo o seguinte retorno:

ShopFacil\Registro\Exceptions\HttpException' with message 'Erro ao efetuar requisição: SSL certificate problem: unable to get local issuer certificate

Alguém sabe como devo configurar isso ?

Grato.

tarcisioruas commented 5 years ago

Olá @gustavosfreitas. Estou verificando nesse momento, assim que eu tiver uma resposta vou responder.

gustavosfreitas commented 5 years ago

Obrigado Tarcisio.

Eu já tempo os certificados PFX e PEM.

tarcisioruas commented 5 years ago

Aparentemente é um problema de configuração do ambiente e não da lib propriamente dita. Qual seu Sistema Operacional e a versão do PHP?

Em qui, 22 de ago de 2019 às 20:39, gustavosfreitas < notifications@github.com> escreveu:

Obrigado Tarcisio.

Eu já tempo os certificados PFX e PEM.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tarcisioruas/shopfacil-bradesco-registro-boleto/issues/3?email_source=notifications&email_token=AAMUIOAHPNRAQXV53JYQKVTQF4PTHA5CNFSM4IO2BBA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD46WQ4A#issuecomment-524118128, or mute the thread https://github.com/notifications/unsubscribe-auth/AAMUIOCWZ4W4C75Y2F5VIUTQF4PTHANCNFSM4IO2BBAQ .

gustavosfreitas commented 5 years ago

Estou com um ambiente de teste na minha estação - Windows com PHP 5.6

tarcisioruas commented 5 years ago

Está usando Wamp, Xampp ou montou fez a instalação de forma manual?

Em qui, 22 de ago de 2019 às 21:29, gustavosfreitas < notifications@github.com> escreveu:

Estou com um ambiente de teste na minha estação - Windows com PHP 5.6

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tarcisioruas/shopfacil-bradesco-registro-boleto/issues/3?email_source=notifications&email_token=AAMUIOBNO3A673ECC3Y6L6DQF4VQHA5CNFSM4IO2BBA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD46YYMY#issuecomment-524127283, or mute the thread https://github.com/notifications/unsubscribe-auth/AAMUIOCVL24LYUYLKMRT3EDQF4VQHANCNFSM4IO2BBAQ .

gustavosfreitas commented 5 years ago

Aqui estou usando XAMPP

gustavosfreitas commented 5 years ago

Tentei mudar o curl.cainfo="C:\xampp\php\snr_public.pem" no php.ini, mas também não foi

tarcisioruas commented 5 years ago

Esse arquivo que você está referenciando no curl.cainfo existe?

gustavosfreitas commented 5 years ago

Sim. Baixei um cacert que viu em outro forum e tentei:

curl.cainfo="C:\xampp\php\cacert.pem"

Mesma coisa...

ricardotorquato commented 5 years ago

Olá @gustavosfreitas... você já verificou se o seu PHP ta conseguindo ler arquivos nesse diretório corretamente? Tentou fazer um file_exists por exemplo?

tarcisioruas commented 5 years ago

Como está iniciando o Laravel? php artisan serve?

gustavosfreitas commented 5 years ago

Como está iniciando o Laravel? php artisan serve?

Não. A aplicação já roda direto no server (neste caso no Xampp)

tarcisioruas commented 5 years ago

A solução mais encontrada na internet para esse problema é realmente fazer o download do certificado no link http://curl.haxx.se/ca/cacert.pem e salvá-lo num diretório, tipo C:\certificados, ai o path ficaria "C:\certificados\cacert.pem" e depois fazer o apontamento para o arquivo dentro do php.ini.

curl.cainfo = "C:\certificados\cacert.pem" Isso tem funcionado para várias pessoas na Internet

tarcisioruas commented 5 years ago

Como está iniciando o Laravel? php artisan serve?

Não. A aplicação já roda direto no server (neste caso no Xampp)

Eu sei que você está fazendo, mas eu vou perguntar mesmo assim. Você está reiniciando o Apache toda vez que edita o php.ini?

gustavosfreitas commented 5 years ago

É justamente o que tenho feito....mas continuo tomando este erro:

[2019-08-22 22:02:35] local.ERROR: exception 'ShopFacil\Registro\Exceptions\HttpException' with message 'Erro ao efetuar requisição: SSL certificate problem: unable to get local issuer certificate' in C:\xampp\htdocs\smart_admin\local\vendor\tarcisioruas\bradesco-registro-online\src\Registro\Http.php:27

gustavosfreitas commented 5 years ago

Como está iniciando o Laravel? php artisan serve?

Não. A aplicação já roda direto no server (neste caso no Xampp)

Eu sei que você está fazendo, mas eu vou perguntar mesmo assim. Você está reiniciando o Apache toda vez que edita o php.ini?

Sim...

gustavosfreitas commented 5 years ago

Achei um post falando para usar essa chamada curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, false); para não fazer a verificação ssl.

Aí o erro já deu do webservice:

{"cdErro":"810", "msgErro":"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00d30003]"}</ns2:registrarTituloResponse></S:Body></S:Envelope>

tarcisioruas commented 5 years ago

As ultimas coisas que consigo pensar são:

Verifica que você está editando o php.ini certo. Se você colocar um arquivo com o código abaixo na pasta C:\xampp\htdocs\ e abrir o mesmo no navegador, vai saber exatamente qual o php.ini que o sistema está usando.

<?php
phpinfo();
?>

Captura de Tela 2019-08-22 às 22 17 37

Se confirmar que tudo está correto, vá até onde está localizado o arquivo de permissão, clica com o botão direito do mouse no mesmo, depois clique em Propriedades e verifica se ele não está bloqueado.

desbloquear-um-arquivo-marcado-como-nao-confiavel-no-windows-10-1

desbloquear-um-arquivo-marcado-como-nao-confiavel-no-windows-10-2

Se nada disso der certo.

Sei que não se pode editar arquivos na pasta vendor e sei que o problema está acontecendo porque a url do banco usa https e a lib de boletos usa curl. O Curl usa o certificado local para fazer a requisição, mas você pode editar essa checagem.

Para isso acesse o arquivo vendor/tarcisioruas/bradesco-registro-online/src/Registro/Http.php e adiciona o código abaixo depois da linha 18 e antes do código da linha 20.

curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, false); Ficando assim

curl_setopt($canal, CURLOPT_RETURNTRANSFER, true);
curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, false);
$resposta = curl_exec($canal);

Lembrando que por segurança, isso não deve ser feito na produção.

tarcisioruas commented 5 years ago

Achei um post falando para usar essa chamada curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, false); para não fazer a verificação ssl.

Aí o erro já deu do webservice:

](http://schemas.xmlsoap.org/soap/envelope/%22%3E)](http://ws.registrotitulo.ibpj.web.bradesco.com.br/%22%3E){"cdErro":"810", "msgErro":"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00d30003]"}</ns2:registrarTituloResponse></S:Body></S:Envelope>

Mal sinal, significa que desativar a checagem do certificado não vai dar certo nesse caso.

Você está conectando no ambiente de testes do Bradesco ou já está tentando usar a produção direto?

gustavosfreitas commented 5 years ago

Ambiente de testes...

Passei a forçar o local no próprio código:

    curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($canal, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($canal, CURLOPT_CAINFO, 'C:\xampp\php\snr_public.pem');

Mas dá o retorno do Bradesco com o erro 801.

gustavosfreitas commented 5 years ago

Mais uma vez obrigado pelas respostas....

tarcisioruas commented 5 years ago

Ambiente de testes...

Passei a forçar o local no próprio código:

    curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($canal, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($canal, CURLOPT_CAINFO, 'C:\xampp\php\snr_public.pem');

Mas dá o retorno do Bradesco com o erro 801.

Retorna um erro, mas não mostra mensagem nenhuma? Retorna só um código de erro?

No manual de integração que tenho, não encontrei esse código de retorno

tarcisioruas commented 5 years ago

Achei um link interessante sobre o certificado no windows

https://github.com/laravelbrasil/forum/issues/111#issuecomment-312366292

gustavosfreitas commented 5 years ago

Muito estranho...

[2019-08-23 11:52:42] local.INFO: https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrotitulohomologacao
[2019-08-23 11:52:42] local.INFO: {"merchant_id":"seuMerchantIdAqui","boleto":{"carteira":26,"nosso_numero":1234,"numero_documento":1234,"data_emissao":"2019-08-23","data_vencimento":"2019-08-31","valor_titulo":"100","pagador":{"nome":"Gustavo Freitas","documento":"09110630724","tipo_documento":1,"endereco":{"cep":"20520055","logradouro":"Rua Conde de Bonfim","numero":"680","complemento":"apto 802","bairro":"Tijuca","cidade":"Rio de Janeiro","uf":"RJ"}},"informacoes_opcionais":{"controle_participante":1234,"especie":"DV","aceite":"N","tipo_emissao_papeleta":2,"perc_multa_atraso":200000,"valor_multa_atraso":2,"qtde_dias_multa_atraso":1,"perc_juros":10000,"valor_juros":0,"qtde_dias_juros":1,"perc_desconto_1":1000000,"valor_desconto_1":1000000,"data_limite_desconto_1":"2019-08-31"}}}
[2019-08-23 11:52:42] local.INFO: array ( 0 => 'Authorization: Basic c2V1TWVyY2hhbnRJZEFxdWk6c3VhU2VuaGFBcXVp', 1 => 'Accept: application/json', 2 => 'Accept-Charset: UTF-8', 3 => 'Content-Type: application/json;UTF-8', )
[2019-08-23 11:52:42] local.INFO: C:\xampp\php\extras\ssl\cacert.pem
[2019-08-23 11:52:44] local.INFO:
[2019-08-23 11:52:44] local.INFO: chegou aqui
[2019-08-23 11:52:44] local.ERROR: exception 'ShopFacil\Registro\Exceptions\HttpException' with message 'Erro ao efetuar requisição: SSL certificate problem: unable to get local issuer certificate' in C:\xampp\htdocs\smart_admin\local\vendor\tarcisioruas\bradesco-registro-online\src\Registro\Http.php:44

Até coloquei para exibir da onde ele pegaria o certificado para não ter problema de estar pegando do lugar errado.

Mesmo assim... nada.

tarcisioruas commented 5 years ago

Uma coisa importante, vi que se você estiver setando o certificado na mão o CURLOPT_SSL_VERIFYPEER tem que ser 1 ou true conforme abaixo.

curl_setopt($canal, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($canal, CURLOPT_CAINFO, 'C:\xampp\php\snr_public.pem');
gustavosfreitas commented 5 years ago

Mesma coisa.... que loucura....

gustavosfreitas commented 5 years ago

O seu código está fazendo isso:

Assinatura de Mensagens: Com proposito de consistir a autenticidade e integridade, ou seja, garantir que as informações do boleto são verdadeiras e não foram alteradas, toda mensagem de registro de títulos será assinada digitalmente utilizando o padrão PKCS#7 com os algoritmos RSA 2048 e SHA256 (sha256WithRSAEncryption), conforme layout das mensagens de entrada definidas neste manual. Para isso, é necessário conhecer a cadeia de certificados das autoridades certificadoras do responsável pela assinatura da mensagem.

Obrigado.

tarcisioruas commented 5 years ago

O seu código está fazendo isso:

Assinatura de Mensagens: Com proposito de consistir a autenticidade e integridade, ou seja, garantir que as informações do boleto são verdadeiras e não foram alteradas, toda mensagem de registro de títulos será assinada digitalmente utilizando o padrão PKCS#7 com os algoritmos RSA 2048 e SHA256 (sha256WithRSAEncryption), conforme layout das mensagens de entrada definidas neste manual. Para isso, é necessário conhecer a cadeia de certificados das autoridades certificadoras do responsável pela assinatura da mensagem.

Obrigado.

A lib não está fazendo a encriptação de maneira direta. Isso fica por conta do transporte por baixo dos panos. Quero dizer que isso fica por conta do certificado ssl do servidor do banco e biblioteca curl do sistema. Não há nada no código PHP dessa lib que faça isso propriamente dito.

tarcisioruas commented 5 years ago

Vou fazer uma modificação mais tarde para usar mais Curl. Talvez assim tiramos essa dependência que está causando problemas.

gustavosfreitas commented 5 years ago

Vamos ver conseguirei fazer funcionar... enquanto isso estou pesquisando e tentando aqui.

gustavosfreitas commented 5 years ago

Inclusive já instalei outro XAMPP com o PHP versão 7 para ver se tinha alguma coisa. Mas continua o mesmo erro "Erro ao efetuar requisição: SSL certificate problem: unable to get local issuer certificate"

tarcisioruas commented 5 years ago

Fiz algumas modificações para dar a opção de não usar mais o cURL e sim o PHP Stream Wrappers. Talvez funcione para você.

Para fazer o teste, precisa ativar a opção allow_url_fopen no php.ini do ambiente.

Ai basta substituir a linha

// Por padrão, o cURL será usado. 
$registro = new Registro($ambiente, $merchantId, $senha);

por

/* 
* Se desejar usar com PHP Stream Wrapper, use como abaixo
*/ 
$registro = new Registro($ambiente, $merchantId, $senha, new ShopFacil\Registro\StreamHttp());
tarcisioruas commented 3 years ago

O problema se dá por uma configuração no certificado do servidor / host e não propriamente um erro de código.

gustavosfreitas commented 3 years ago

Obrigado pelo retorno.

[image: logo_sonnar]

Gustavo Freitas SONNAR | Soluções em Tecnologia

E-mail: gustavo@sonnartecnologia.com.br Telefone: (21) 3563-4825 www.sonnartecnologia.com.br

Você já conhece o *Smartcash* ?
Uma solução *ágil*, *fácil* e *segura* para fazer a gestão financeira

do seu negócio. Conheça mais em www.smartcash.com.br http://www.smartcash.com.br.

*Atenção:* Essa mensagem (incluindo qualquer anexo) é destinada

exclusivamente ao seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional ou cuja divulgação seja proibida por lei. Se a mensagem foi recebida por engano, por favor, avise o remetente e apague-a do computador. O uso não autorizado de tais informações é proibido e está sujeito às penalidades cabíveis.

*Notice of Confidentiality:* This message (including any attachments)

is intended exclusively for its addressee and may contain information that is confidential and protected by a professional privilege or whose disclosure is prohibited by law. If this message has been received in error, please notify the sender and delete it immediately. Unauthorized use of such information is prohibited and subject to applicable penalties.

Em qua., 17 de fev. de 2021 às 09:01, tarcisioruas notifications@github.com escreveu:

O problema se dá por uma configuração no certificado do servidor / host e não propriamente um erro de código.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/tarcisioruas/shopfacil-bradesco-registro-boleto/issues/3#issuecomment-780509668, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABZWUL45VGUIBDDCTMF4C4TS7OV2NANCNFSM4IO2BBAQ .

tarcisioruas commented 3 years ago

@gustavosfreitas Você ainda usa essa lib? Está funcionando adequadamente?