Open leonardomsgoncalves opened 8 years ago
Galera
Coloquei os fontes do registro de boleto online em C# no repositório: https://github.com/hgmauri/RegistroBoletoOnlineBradesco
Agradeço a todos pelo apoio
Bom dia @alissonwagner,
Como adiciono os certificados confiáveis? Eu segui um manual da 7comm, aparentemente deu certo. Mas eu utilizo mac. Não sei se estou fazendo corretamente.
no carregamento do carregaCertificadoAutenticacaoA1, estou usando o seguinte código, mas nao sei se está certo:
Segue:
` System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.clearProperty("javax.net.ssl.trustStore");
System.clearProperty("javax.net.ssl.trustStorePassword");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "/Library/Java/JavaVirtualMachines/jdk1.9.0.jdk/Contents/Home/lib/security");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");`
@alissonwagner
Consegui evoluir com a transmissão, mas agora recebo erro:
<?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:registrarTituloResponse xmlns:ns2="http://ws.registrotitulo.ibpj.web.bradesco.com.br/"><return>{"cdErro":"800", "msgErro":"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00230001]"}</return></ns2:registrarTituloResponse></S:Body></S:Envelope>
HTTP/1.1 200 OK Exception in thread "main" java.io.IOException: Attempted read from closed stream.
Sabe o que pode ser?
Obrigado
@willalberton estou na mesma que você estava a pouco. Usei a classe que você colocou no comentário acima e encontrei o seguinte erro:
` Exception in thread "main" java.io.IOException: Invalid keystore format at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1226) at bradescowebclient.PKCS7Signer.loadKeyStore(PKCS7Signer.java:69) at bradescowebclient.PKCS7Signer.main(PKCS7Signer.java:43) Java Result: 1
`
estou usando jdk 7 e o método carregaCertificadoAutenticacao1() está assim:
` public static void carregaCertificacaoAutenticacaoA1() throws Exception { System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.clearProperty("javax.net.ssl.trustStore");
System.clearProperty("javax.net.ssl.trustStorePassword");
System.setProperty("javax.net.ssl.trustStoreType", "PFX");
System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.7.0_80\\jre\\lib\\security");
System.setProperty("javax.net.ssl.trustStorePassword", "!cbiatwt2");
}
`
sabe me dizer o que estou fazendo de errado?
@guimaraessilas Estou com o mesmo problema. Ainda não consegui corrigir.
Entrei em contato com a 7comm solicitando ajuda. Se puder, adicione meu skype para conversarmos: willalberton
Obrigado.
@BrunoZanholo Peguei o código postado, e ao tentar rodar, ele dá um erro "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", diferente do que está no exemplo, ao setar a propriedade "javax.net.ssl.trustStore", eu estou passando um .jks em uma pasta específica, não estou referenciando o cacerts da plataforma. Você chegou a ter algum problema com algo neste sentido?
Desde já agradeço.
Oi @dodouglas12 desculpe a demora, descobri que o problema está quando eu uso o json_enconde do PHP pra gerar. Quando crio o json na mão ele funcionou corrretamente. Obrigado
@willalberton, consegui resolver. O problema era que estava passando um arquivo pfx, quando na verdade deveria usar um jks. converti o formato seguindo o seguinte tutorial: https://www.youtube.com/watch?v=abakJu2o7zk
Alguém fez em php ? Sabe qual a diferença entre eu criar o json na mão como uma string e eu criar um array e usar o json_encode? Parecem iguais os dois gerados porém quando uso o json_enconde ele da erro na homologação.
Fala galera, Ao acionar o serviço, sempre é retornado o código de erro 06 com a mensagem: Dados inconsistentes. Onde eu posso validar estes dados? A mensagem de erro é muito genérica e não sei o que possa estar errado
pessoal, na parte em que assino o certificado recebo o seguinte erro:
Vi que a private key do meu certificado tá vindo null no código. Então abri o certificado que o cliente me enviou e verifiquei que o mesmo não possui chave privada, apenas pública. Seria por isso o erro? Devo solicitar outro certificado pra ele?
@guimaraessilas pode ser permissão no certificado... eu passei por isso e segui o link abaixo e deu certo:
Estou utilizando a seguinte implementação:
public static void carregaCertificacaoAutenticacaoA1() throws Exception { System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.clearProperty("javax.net.ssl.trustStore");
System.clearProperty("javax.net.ssl.trustStorePassword");
System.out.println("->> " + System.getProperty("javax.net.ssl.trustStore"));
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:\\REGISTRO\\output.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "minhasenha");
}
e estou tendo o seguinte erro:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source) at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) at sun.security.ssl.Handshaker.processLoop(Unknown Source) at sun.security.ssl.Handshaker.process_record(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) at br.univel.util.PKCS7Signer.main(PKCS7Signer.java:58) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(Unknown Source) at sun.security.validator.PKIXValidator.engineValidate(Unknown Source) at sun.security.validator.Validator.validate(Unknown Source) at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) ... 21 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) at java.security.cert.CertPathBuilder.build(Unknown Source) ... 27 more
Alguém poderia me ajudar?
@hgmauri, segui o tutorial que me mandou e quando chego na parte de "manage private keys" a opção simplesmente não aparece. Selecionei a opção "Renew Certificate..." e recebi uma mensagem dizedo que meu certificado não possui chave privada. Vou precisar de outro certo?
@guimaraessilas nesse caso penso que vc vai precisar de outro mesmo.. lembra que seu certificado DEVE ser um certificado tipo A1 e-cpf ou e-cnpj com chave privada emitido por autoridade participante do ICP-Brasil
@guimaraessilas vi que você teve um erro parecido com o que estou enfrentando agora.. sabe me dizer o que fez para resolver?
"Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
@juanpetrik, se não me engano, comigo isso aconteceu porque a senha que tinha colocado pro arquivo jks estava errada. E nesse método eu usei a variável PATH_TO_KEYSTORE pra referenciar o arquivo e estou trabalhando com jks e não pfx
@guimaraessilas Poderia postar esse trecho de código para que eu possa comparar?
Estou em dúvida se o arquivo deve ser .pfx ou .jks
` public static void carregaCertificacaoAutenticacaoA1() throws Exception { System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.clearProperty("javax.net.ssl.trustStore");
System.clearProperty("javax.net.ssl.trustStorePassword");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", PATH_TO_KEYSTORE);
System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD);
}
mas acho que seu erro tá no método loadKeyStore. o meu está assim:
private KeyStore loadKeyStore() throws Exception {
KeyStore keystore = KeyStore.getInstance("JKS");
InputStream is = new FileInputStream(PATH_TO_KEYSTORE);
keystore.load(is, KEYSTORE_PASSWORD.toCharArray());
return keystore;
}
` Lembrando que minha variável PATH_TO_KEYSTORE referencia um arquivo JKS
@guimaraessilas esse arquivo jks pode estar em qualquer lugar do S.O?
Estou utilizando windows.
pode sim
Essa KEYSTORE_PASSWORD é a senha do jks? a senha que eu digitei no prompt.. isso?
isso aí
Pelo que estou pesquisando esse erro é porque o certificado do bradesco não está na lista do cacerts.
Sabe me informar se tenho que fazer deste tipo?
Então, no meu caso eu coloquei o caminho direto pro jks mesmo. Mas não sei se isso vai interferir em algo...
Galera , estou com o famoso problema do erro: 810 , Erro Certificado / Formatação dos campos , mas já testei de tudo vejam:
Linguagem Ruby , alguém tem uma idéia de como validar o post que foi enviado ??? com mais detalhes ??? a mensagem de erro me dá 3 opções:
Erro [810] Erro Certificado / Formatação dos campos da mensagem inválida Motivos:
JSON do Exemplo do Manual do Bradesco
{"nuCPFCNPJ":"123456789","filialCPFCNPJ":"0001","ctrlCPFCNPJ":"39","cdTipoAcesso":"2","clubBanco":"0","cdTipoContrato":"0","nuSequenciaContrato":"0","idProduto":"09","nuNegociacao":"123400000001234567","cdBanco":"237","eNuSequenciaContrato":"0","tpRegistro":"1","cdProduto":"0","nuTitulo":"0","nuCliente":"123456","dtEmissaoTitulo":"25.05.2017","dtVencimentoTitulo":"20.06.2017","tpVencimento":"0","vlNominalTitulo":"100","cdEspecieTitulo":"04","tpProtestoAutomaticoNegativacao":"0","prazoProtestoAutomaticoNegativacao":"0","controleParticipante":"","cdPagamentoParcial":"","qtdePagamentoParcial":"0","percentualJuros":"0","vlJuros":"0","qtdeDiasJuros":"0","percentualMulta":"0","vlMulta":"0","qtdeDiasMulta":"0","percentualDesconto1":"0","vlDesconto1":"0","dataLimiteDesconto1":"","percentualDesconto2":"0","vlDesconto2":"0","dataLimiteDesconto2":"","percentualDesconto3":"0","vlDesconto3":"0","dataLimiteDesconto3":"","prazoBonificacao":"0","percentualBonificacao":"0","vlBonificacao":"0","dtLimiteBonificacao":"","vlAbatimento":"0","vlIOF":"0","nomePagador":"Cliente Teste","logradouroPagador":"rua Teste","nuLogradouroPagador":"90","complementoLogradouroPagador":"","cepPagador":"12345","complementoCepPagador":"500","bairroPagador":"bairro Teste","municipioPagador":"Teste","ufPagador":"SP","cdIndCpfcnpjPagador":"1","nuCpfcnpjPagador":"12345648901234","endEletronicoPagador":"","nomeSacadorAvalista":"","logradouroSacadorAvalista":"","nuLogradouroSacadorAvalista":"0","complementoLogradouroSacadorAvalista":"","cepSacadorAvalista":"0","complementoCepSacadorAvalista":"0","bairroSacadorAvalista":"","municipioSacadorAvalista":"","ufSacadorAvalista":"","cdIndCpfcnpjSacadorAvalista":"0","nuCpfcnpjSacadorAvalista":"0","endEletronicoSacadorAvalista":""}
Assinatura criptografada com o certificado X509
-----BEGIN CERTIFICATE----- MIIH9TCCBd2gAwIBAgIQKenhXUSSTdSNrGl9LrVhbjANBgkqhkiG9w0BAQsFADB1 MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2Vj cmV0YXJpYSBkYSBSZWNlaXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMRkwFwYD VQQDExBBQyBTSU5DT1IgUkZCIEc1MB4XDTE3MDkxMzE0NDI0MloXDTE4MDkxMzE0 NDI0MlowgfgxCzAJBgNVBAYTAkJSMRMwEQYDVQQKDApJQ1AtQnJhc2lsMQswCQYD VQQIDAJNRzEXMBUGA1UEBwwOQmVsbyBIb3Jpem9udGUxNjA0BgNVBAsMLVNlY3Jl dGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEWMBQGA1UE CwwNUkZCIGUtQ05QSiBBMTEfMB0GA1UECwwWQXV0ZW50aWNhZG8gcG9yIEFSIENS TjE9MDsGA1UEAww0SU5URUdSQSBHUlAgU09MVUNPRVMgREUgU09GVFdBUkUgTFRE QToxMTQwNjIxNTAwMDEyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AKdmkg3tIu+iiki2EJGsZND0lJXT790/EPXU1qDxifLrSLrCoP+3rJb3zRpljPJ4 S+35jjRqA09LpZWRS4Jrn+/7S+QMz+pjtkr5U6JIdEGk34CdrRPf3CjXFxGvo5jr 8wfzLpugQqcpMPI9ICNz+If+KaFAfAlLZdfcSZCfTNTW9yk3vD+JA8z/TWusaa30 3chBcFEaDk7gsd+eYY+44aKs5ODE/onvt1C6LHP2mawI286KUcGd/Krkl4mWH0eZ CFgsBtqICPZyeTjvfrcUVq3ngEHS1zFBaVBO2ZDEGCAVmgPM3GhT88J7I6waasO0 dzFP9k2NehQ5O2kIfOxaLB8CAwEAAaOCAvswggL3MIG+BgNVHREEgbYwgbOgPQYF YEwBAwSgNAQyMTQwMTE5NjU1MDU4MDMxMDYwNDAwMDAwMDAwMDAwMDAwMDAwTUcy NjU3Nzc3U1NQTUegIAYFYEwBAwKgFwQVTUFSQ0lPIEFMTUVJREEgUEFTU09ToBkG BWBMAQMDoBAEDjExNDA2MjE1MDAwMTIzoBcGBWBMAQMHoA4EDDAwMDAwMDAwMDAw MIEcZmluYW5jZWlyb0BpbnRlZ3JhZ3JwLmNvbS5icjAJBgNVHRMEAjAAMB8GA1Ud IwQYMBaAFGfnQhG+8jgGFUkPh//aBd5djpQiMHgGA1UdIARxMG8wbQYGYEwBAgEc MGMwYQYIKwYBBQUHAgEWVWh0dHA6Ly9pY3AtYnJhc2lsLmFjc2luY29yLmNvbS5i ci9yZXBvc2l0b3Jpby9kcGMvQUNfU0lOQ09SX1JGQi9EUENfQUNfU0lOQ09SX1JG Qi5wZGYwgbYGA1UdHwSBrjCBqzBUoFKgUIZOaHR0cDovL2ljcC1icmFzaWwuY2Vy dGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNTSU5DT1JSRkJHNS9MYXRl c3RDUkwuY3JsMFOgUaBPhk1odHRwOi8vaWNwLWJyYXNpbC5vdXRyYWxjci5jb20u YnIvcmVwb3NpdG9yaW8vbGNyL0FDU0lOQ09SUkZCRzUvTGF0ZXN0Q1JMLmNybDAO BgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMIGl BggrBgEFBQcBAQSBmDCBlTBbBggrBgEFBQcwAoZPaHR0cDovL2ljcC1icmFzaWwu YWNzaW5jb3IuY29tLmJyL3JlcG9zaXRvcmlvL2NlcnRpZmljYWRvcy9BQ19TSU5D T1JfUkZCX0c1LnA3YzA2BggrBgEFBQcwAYYqaHR0cDovL29jc3AtYWMtc2luY29y LXJmYi5jZXJ0aXNpZ24uY29tLmJyMA0GCSqGSIb3DQEBCwUAA4ICAQCnsgztxPbs 7lT3AtCXffJ/mzTEtbE7nMZCui9orlNYRGwnnH8XMoJ3/kO1iZxPIfGX/JglsiGY LtI2ejO16tWoim+iutYcI+p/Y8jNouT0m3787imnobSylMSB8O11J8dYEkTvsxpq vjOvJ4capKDklZ03eDIqCvY4ahS/BjtKmw== -----END CERTIFICATE-----
e Output do post com a base 64 da Assinatura:
opening connection to cobranca.bradesconetempresa.b.br:443... opened starting SSL for cobranca.bradesconetempresa.b.br:443... SSL established <- "POST /ibpjregistrotitulows/registrotitulohomologacao HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Ruby\r\nContent-Type: application/pkcs7-signature\r\nContent-Length: 8252\r\nConnection: close\r\nHost: cobranca.bradesconetempresa.b.br\r\n\r\n" <- "LS0tLS1CRUdJTiBQS0NTNy0tLS0tCk1JSVJ0d1lKS29aSWh2Y05BUWNDb0lJUnFEQ0NFYVFDQVFFeER6QU5CZ2xnaGtnQlpRTUVBZ0VGQURDQ0J1OEcKQ1NxR1NJYjNEUUVIQWFDQ0J1QUVnZ2JjZXlKdWRVTlFSa05PVUVvaU9pSXhNak0wTlRZM09Ea2lMQ0ptYVd4cApZV3hEVUVaRFRsQktJam9pTURBd01TSXNJbU4wY214RFVFWkRUbEJLSWpvaU16a2lMQ0pqWkZScGNHOUJZMlZ6CmMyOGlPaUl5SWl3aVkyeDFZa0poYm1Odklqb2lNQ0lzSW1Oa1ZHbHdiME52Ym5SeVlYUnZJam9pTUNJc0ltNTEKVTJWeGRXVnVZMmxoUTI5dWRISmhkRzhpT2lJd0lpd2lhV1JRY205a2RYUnZJam9pTURraUxDSnVkVTVsWjI5agphV0ZqWVc4aU9pSXhNak0wTURBd01EQXdNREV5TXpRMU5qY2lMQ0pqWkVKaGJtTnZJam9pTWpNM0lpd2laVTUxClUyVnhkV1Z1WTJsaFEyOXVkSEpoZEc4aU9pSXdJaXdpZEhCU1pXZHBjM1J5YnlJNklqRWlMQ0pqWkZCeWIyUjEKZEc4aU9pSXdJaXdpYm5WVWFYUjFiRzhpT2lJd0lpd2liblZEYkdsbGJuUmxJam9pTVRJek5EVTJJaXdpWkhSRgpiV2x6YzJGdlZHbDBkV3h2SWpvaU1qVXVNRFV1TWpBeE55SXNJbVIwVm1WdVkybHRaVzUwYjFScGRIVnNieUk2CklqSXdMakEyTGpJd01UY2lMQ0owY0ZabGJtTnBiV1Z1ZEc4aU9pSXdJaXdpZG14T2IyMXBibUZzVkdsMGRXeHYKSWpvaU1UQXdJaXdpWTJSRmMzQmxZMmxsVkdsMGRXeHZJam9pTURRaUxDSjBjRkJ5YjNSbGMzUnZRWFYwYjIxaApkR2xqYjA1bFoyRjBhWFpoWTJGdklqb2lNQ0lzSW5CeVlYcHZVSEp2ZEdWemRHOUJkWFJ2YldGMGFXTnZUbVZuCllYUnBkbUZqWVc4aU9pSXdJaXdpWTI5dWRISnZiR1ZRWVhKMGFXTnBjR0Z1ZEdVaU9pSWlMQ0pqWkZCaFoyRnQKWlc1MGIxQmhjbU5wWVd3aU9pSWlMQ0p4ZEdSbFVHRm5ZVzFsYm5SdlVHRnlZMmxoYkNJNklqQWlMQ0p3WlhKagpaVzUwZFdGc1NuVnliM01pT2lJd0lpd2lkbXhLZFhKdmN5STZJakFpTENKeGRHUmxSR2xoYzBwMWNtOXpJam9pCk1DSXNJbkJsY21ObGJuUjFZV3hOZFd4MFlTSTZJakFpTENKMmJFMTFiSFJoSWpvaU1DSXNJbkYwWkdWRWFXRnoKVFhWc2RHRWlPaUl3SWl3aWNHVnlZMlZ1ZEhWaGJFUmxjMk52Ym5Sdk1TSTZJakFpTENKMmJFUmxjMk52Ym5SdgpNU0k2SWpBaUxDSmtZWFJoVEdsdGFYUmxSR1Z6WTI5dWRHOHhJam9pSWl3aWNHVnlZMlZ1ZEhWaGJFUmxjMk52CmJuUnZNaUk2SWpBaUxDSjJiRVJsYzJOdmJuUnZNaUk2SWpBaUxDSmtZWFJoVEdsdGFYUmxSR1Z6WTI5dWRHOHkKSWpvaUlpd2ljR1Z5WTJWdWRIVmhiRVJsYzJOdmJuUnZNeUk2SWpBaUxDSjJiRVJsYzJOdmJuUnZNeUk2SWpBaQpMQ0prWVhSaFRHbHRhWFJsUkdWelkyOXVkRzh6SWpvaUlpd2ljSEpoZW05Q2IyNXBabWxqWVdOaGJ5STZJakFpCkxDSndaWEpqWlc1MGRXRnNRbTl1YVdacFkyRmpZVzhpT2lJd0lpd2lkbXhDYjI1cFptbGpZV05oYnlJNklqQWkKTENKa2RFeHBiV2wwWlVKdmJtbG1hV05oWTJGdklqb2lJaXdpZG14QlltRjBhVzFsYm5Sdklqb2lNQ0lzSW5acwpTVTlHSWpvaU1DSXNJbTV2YldWUVlXZGhaRzl5SWpvaVEyeHBaVzUwWlNCVVpYTjBaU0lzSW14dlozSmhaRzkxCmNtOVFZV2RoWkc5eUlqb2ljblZoSUZSbGMzUmxJaXdpYm5WTWIyZHlZV1J2ZFhKdlVHRm5ZV1J2Y2lJNklqa3cKSWl3aVkyOXRjR3hsYldWdWRHOU1iMmR5WVdSdmRYSnZVR0ZuWVdSdmNpSTZJaUlzSW1ObGNGQmhaMkZrYjNJaQpPaUl4TWpNME5TSXNJbU52YlhCc1pXMWxiblJ2UTJWd1VHRm5ZV1J2Y2lJNklqVXdNQ0lzSW1KaGFYSnliMUJoCloyRmtiM0lpT2lKaVlXbHljbThnVkdWemRHVWlMQ0p0ZFc1cFkybHdhVzlRWVdkaFpHOXlJam9pVkdWemRHVWkKTENKMVpsQmhaMkZrYjNJaU9pSlRVQ0lzSW1Oa1NXNWtRM0JtWTI1d2FsQmhaMkZrYjNJaU9pSXhJaXdpYm5WRApjR1pqYm5CcVVHRm5ZV1J2Y2lJNklqRXlNelExTmpRNE9UQXhNak0wSWl3aVpXNWtSV3hsZEhKdmJtbGpiMUJoCloyRmtiM0lpT2lJaUxDSnViMjFsVTJGallXUnZja0YyWVd4cGMzUmhJam9pSWl3aWJHOW5jbUZrYjNWeWIxTmgKWTJGa2IzSkJkbUZzYVhOMFlTSTZJaUlzSW01MVRHOW5jbUZrYjNWeWIxTmhZMkZrYjNKQmRtRnNhWE4wWVNJNgpJakFpTENKamIyMXdiR1Z0Wlc1MGIweHZaM0poWkc5MWNtOVRZV05oWkc5eVFYWmhiR2x6ZEdFaU9pSWlMQ0pqClpYQlRZV05oWkc5eVFYWmhiR2x6ZEdFaU9pSXdJaXdpWTI5dGNHeGxiV1Z1ZEc5RFpYQlRZV05oWkc5eVFYWmgKYkdsemRHRWlPaUl3SWl3aVltRnBjbkp2VTJGallXUnZja0YyWVd4cGMzUmhJam9pSWl3aWJYVnVhV05wY0dsdgpVMkZqWVdSdmNrRjJZV3hwYzNSaElqb2lJaXdpZFdaVFlXTmhaRzl5UVhaaGJHbHpkR0VpT2lJaUxDSmpaRWx1ClpFTndabU51Y0dwVFlXTmhaRzl5UVhaaGJHbHpkR0VpT2lJd0lpd2liblZEY0daamJuQnFVMkZqWVdSdmNrRjIKWVd4cGMzUmhJam9pTUNJc0ltVnVaRVZzWlhSeWIyNXBZMjlUWVdOaFpHOXlRWFpoYkdsemRHRWlPaUlpZmFDQwpCL2t3Z2dmMU1JSUYzYUFEQWdFQ0FoQXA2ZUZkUkpKTjFJMnNhWDB1dFdGdU1BMEdDU3FHU0liM0RRRUJDd1VBCk1IVXhDekFKQmdOVkJBWVRBa0pTTVJNd0VRWURWUVFLRXdwSlExQXRRbkpoYzJsc01UWXdOQVlEVlFRTEV5MVQKWldOeVpYUmhjbWxoSUdSaElGSmxZMlZwZEdFZ1JtVmtaWEpoYkNCa2J5QkNjbUZ6YVd3Z0xTQlNSa0l4R1RBWApCZ05WQkFNVEVFRkRJRk5KVGtOUFVpQlNSa0lnUnpVd0hoY05NVGN3T1RFek1UUTBNalF5V2hjTk1UZ3dPVEV6Ck1UUTBNalF5V2pDQitERUxNQWtHQTFVRUJoTUNRbEl4RXpBUkJnTlZCQW9NQ2tsRFVDMUNjbUZ6YVd3eEN6QUoKQmdOVkJBZ01BazFITVJjd0ZRWURWUVFIREE1Q1pXeHZJRWh2Y21sNmIyNTBaVEUyTURRR0ExVUVDd3d0VTJWagpjbVYwWVhKcFlTQmtZU0JTWldObGFYUmhJRVpsWkdWeVlXd2daRzhnUW5KaGMybHNJQzBnVWtaQ01SWXdGQVlEClZRUUxEQTFTUmtJZ1pTMURUbEJLSUVFeE1SOHdIUVlEVlFRTERCWkJkWFJsYm5ScFkyRmtieUJ3YjNJZ1FWSWcKUTFKT01UMHdPd1lEVlFRREREUkpUbFJGUjFKQklFZFNVQ0JUVDB4VlEwOUZVeUJFUlNCVFQwWlVWMEZTUlNCTQpWRVJCT2pFeE5EQTJNakUxTURBd01USXpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDCkFRRUFwMmFTRGUwaTc2S0tTTFlRa2F4azBQU1VsZFB2M1Q4UTlkVFdvUEdKOHV0SXVzS2cvN2VzbHZmTkdtV00KOG5oTDdmbU9OR29EVDB1bGxaRkxnbXVmNy90TDVBelA2bU8yU3ZsVG9raDBRYVRmZ0oydEU5L2NLTmNYRWEragptT3Z6Qi9NdW02QkNweWt3OGowZ0kzUDRoLzRwb1VCOENVdGwxOXhKa0o5TTFOYjNLVGU4UDRrRHpQOU5hNnhwCnJmVGR5RUZ3VVJvT1R1Q3gzNTVoajdqaG9xems0TVQraWUrM1VMb3NjL2FackFqYnpvcFJ3WjM4cXVTWGlaWWYKUjVrSVdDd0cyb2dJOW5KNU9POSt0eFJXcmVlQVFkTFhNVUZwVUU3WmtNUVlJQldhQTh6Y2FGUHp3bnNqckJwcQp3N1IzTVUvMlRZMTZGRGs3YVFoODdGb3NId0lEQVFBQm80SUMrekNDQXZjd2diNEdBMVVkRVFTQnRqQ0JzNkE5CkJnVmdUQUVEQktBMEJESXhOREF4TVRrMk5UVXdOVGd3TXpFd05qQTBNREF3TURBd01EQXdNREF3TURBd01EQk4KUnpJMk5UYzNOemRUVTFCTlI2QWdCZ1ZnVEFFREFxQVhCQlZOUVZKRFNVOGdRVXhOUlVsRVFTQlFRVk5UVDFPZwpHUVlGWUV3QkF3T2dFQVFPTVRFME1EWXlNVFV3TURBeE1qT2dGd1lGWUV3QkF3ZWdEZ1FNTURBd01EQXdNREF3Ck1EQXdnUnhtYVc1aGJtTmxhWEp2UUdsdWRHVm5jbUZuY25BdVkyOXRMbUp5TUFrR0ExVWRFd1FDTUFBd0h3WUQKVlIwakJCZ3dGb0FVWitkQ0ViN3lPQVlWU1ErSC85b0YzbDJPbENJd2VBWURWUjBnQkhFd2J6QnRCZ1pnVEFFQwpBUnd3WXpCaEJnZ3JCZ0VGQlFjQ0FSWlZhSFIwY0RvdkwybGpjQzFpY21GemFXd3VZV056YVc1amIzSXVZMjl0CkxtSnlMM0psY0c5emFYUnZjbWx2TDJSd1l5OUJRMTlUU1U1RFQxSmZVa1pDTDBSUVExOUJRMTlUU1U1RFQxSmYKVWtaQ0xuQmtaakNCdGdZRFZSMGZCSUd1TUlHck1GU2dVcUJRaGs1b2RIUndPaTh2YVdOd0xXSnlZWE5wYkM1agpaWEowYVhOcFoyNHVZMjl0TG1KeUwzSmxjRzl6YVhSdmNtbHZMMnhqY2k5QlExTkpUa05QVWxKR1FrYzFMMHhoCmRHVnpkRU5TVEM1amNtd3dVNkJSb0UrR1RXaDBkSEE2THk5cFkzQXRZbkpoYzJsc0xtOTFkSEpoYkdOeUxtTnYKYlM1aWNpOXlaWEJ2YzJsMGIzSnBieTlzWTNJdlFVTlRTVTVEVDFKU1JrSkhOUzlNWVhSbGMzUkRVa3d1WTNKcwpNQTRHQTFVZER3RUIvd1FFQXdJRjREQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd1F3CmdhVUdDQ3NHQVFVRkJ3RUJCSUdZTUlHVk1Gc0dDQ3NHQVFVRkJ6QUNoazlvZEhSd09pOHZhV053TFdKeVlYTnAKYkM1aFkzTnBibU52Y2k1amIyMHVZbkl2Y21Wd2IzTnBkRzl5YVc4dlkyVnlkR2xtYVdOaFpHOXpMMEZEWDFOSgpUa05QVWw5U1JrSmZSelV1Y0Rkak1EWUdDQ3NHQVFVRkJ6QUJoaXBvZEhSd09pOHZiMk56Y0MxaFl5MXphVzVqCmIzSXRjbVppTG1ObGNuUnBjMmxuYmk1amIyMHVZbkl3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQUtleURPM0UKOXV6dVZQY0MwSmQ5OG4rYk5NUzFzVHVjeGtLNkwyaXVVMWhFYkNlY2Z4Y3lnbmYrUTdXSm5FOGg4WmY4bUNXeQpJWmd1MGpaNk03WHExYWlLYjZLNjFod2o2bjlqeU0yaTVQU2Jmdnp1S2FlaHRMS1V4SUh3N1hVbngxZ1NSTyt6CkdtcjRkNFcvRW1WZW1Pelh6dm95WncxTnZzVWJweWNiY3lJWnRlTGJTT3pjVTRsKytNSEhTYUxkWEgxK2w1eG8KYVBGbmxuWkdjL2N3c3l6MlhuVEVzSXJEQUhRRHRSbTN3VS9YejI2cDBRQjR4Y29ZMjBCMzJOWHRPajBIN2FDTAoyMVBNaDJZOWpPa08yUjVMc1RRWG51K2l3VVBqSXEvOEFqWUhlZGJZd0tJVnZaK2Y2dlVJRlJWVWpVd1pFT1VVCnpWc2JVVjJXTUVyK1g0cXFvK2hSQUQzYWU1ajBmUldJYk4wdm5Rd0dhSmhvUzdTTzZNY2JmREVoT3ZpK3E4aDgKZSs0U0huamF0bCtjN1FBNkxHdUhvVUhmVWc4Sk1vNDJPM2YyQjRPL0tPUXhFV1dLNW1aSmlCT2ZZK0tyWVhGbgp5b0dETUpSYVJOUDZyL0ZNYnlSNksvTlJucVdFSDlqYVZIeDhaQ3pqc1puOUZiOE10OENkaDdzVWtDNjl0TmZCCk9Ia3VVbFV3UWdpSDBJYzhZTVlLK1ZCRmNmVlRIVmxYVjBHaHdza3hKbGI0RTVhZHd3aVk1K2VySDlOVWZLTmoKcHJENzNFWWl2YitqTTVIMElZa0hXU1FjTE9OOGE0M2FoM3JFVnkraWlkZ0kwRjNaQzF1Q2tSTGsxaC8wUyt5QwpnbmUrTTY4bmh4cWtvT1NWblRkNE1pb0s5amhxRkw4R08wcWJNWUlDbkRDQ0FwZ0NBUUV3Z1lrd2RURUxNQWtHCkExVUVCaE1DUWxJeEV6QVJCZ05WQkFvVENrbERVQzFDY21GemFXd3hOakEwQmdOVkJBc1RMVk5sWTNKbGRHRnkKYVdFZ1pHRWdVbVZqWldsMFlTQkdaV1JsY21Gc0lHUnZJRUp5WVhOcGJDQXRJRkpHUWpFWk1CY0dBMVVFQXhNUQpRVU1nVTBsT1EwOVNJRkpHUWlCSE5RSVFLZW5oWFVTU1RkU05yR2w5THJWaGJqQU5CZ2xnaGtnQlpRTUVBZ0VGCkFLQ0I1REFZQmdrcWhraUc5dzBCQ1FNeEN3WUpLb1pJaHZjTkFRY0JNQndHQ1NxR1NJYjNEUUVKQlRFUEZ3MHgKTnpBNU1Ua3hNVE0xTURkYU1DOEdDU3FHU0liM0RRRUpCREVpQkNEdWtYeUp0ZnJjaDg5a0xjVmZ4YTJtUW9ubAorekJ3YjhGOG9aSThmUWtsL1RCNUJna3Foa2lHOXcwQkNROHhiREJxTUFzR0NXQ0dTQUZsQXdRQktqQUxC" -> "HTTP/1.1 500 Internal Server Error\r\n" -> "Content-Type: text/xml\r\n" -> "X-Backside-Transport: FAIL FAIL\r\n" -> "Connection: close\r\n" -> "\r\n" reading all... -> "" -> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" -> "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body><ns2:registrarTituloResponse xmlns:ns2=\"http://ws.registrotitulo.ibpj.web.bradesco.com.br/\"><return>{\"cdErro\":\"810\", \"msgErro\":\"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00d30003]\"}</return></ns2:registrarTituloResponse></S:Body></S:Envelope>" read 434 bytes Conn close Response com: >> CODE 500 , BODY: <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:registrarTituloResponse xmlns:ns2="http://ws.registrotitulo.ibpj.web.bradesco.com.br/"><return>{"cdErro":"810", "msgErro":"Erro Certificado / Formatacao dos campos da mensagem invalida [0x00d30003]"}</return></ns2:registrarTituloResponse></S:Body></S:Envelope> Decode Base 64
@rcoproc Tente colocar "" em nuLogradouroSacadorAvalista
Valeu @hgmauri tentei mas deu o mesmo erro , umas dúvidas: Manda só o JSON assinado , não manda o json sem assinar também ?? Como é que o Bradesco vai descriptografar lá se não tem nosso certificado alguém sabe ???
Fala @rcoproc !
Para solicitar o registro do boleto, você precisa somente enviar o JSON assinado. O JSON puro não é necessário. Lembrando que você não está criptografando o arquivo, você está apenas assinando-o. É gerado um conteúdo base64 com a referencia da sua assinatura e o conteúdo do JSON, nada de criptografia, por isso é possível sim eles lerem o que você envia.
Comparei o seu JSON com o que eu utilizo, e notei que o clubBanco e o cdTipoContrato estão vazios. Apesar de ser um campo não obrigatório, eles têm valor fixo. Por isso tente preenchê-los, talvez resolva seu problema.
Na documentação é informado quais são esses valores.
clubBanco = 2269651 cdTipoContrato = 48
@rcoproc Fiz um teste utilizando o seu JSON e tudo correu normalmente. Algum passo no seu processo de assinar o JSON está errado, gerando o erro na solicitação de registro. Como eu não entendo nada de Ruby, não poderei te ajudar :(
Valeu @Alfredao , obrigado pela força e qual sua linguagem que vc fez o teste ??? Só de curiosidade.
Fiz em PHP @rcoproc
Seu certificado é válido expedido pelos órgãos autorizados ou você mesmo o gerou? Caso o tenha gerado, é possível estar acontecendo o erro 3: Cadeia certificadora pode não estar presente no servidor Bradesco. No começo do meu desenvolvimento, eu tentei realizar testes utilizando um certificado gerado na minha máquina e não consegui devido a este erro, tive que comprar um.
@Alfredao , desculpe incomodar, mas toda vez que eu vejo os textos sua assinatura "e o conteúdo do JSON", eu só mando o conteúdo do JSON assinado.
No seu texto abaixo dá a impressão que são duas coisas a serem enviadas. Poderia me orientar ?
"É gerado um conteúdo base64 com a referencia da sua assinatura e o conteúdo do JSON, nada de criptografia, por isso é possível sim eles lerem o que você envia."
@rcoproc Dê uma olhada em um arquivo JSON assinado como é. Ele contém um cabeçalho e o conteúdo do JSON codificado em base64. Acesse aqui jsonassinado
Conforme pode ver no link, é o cabeçalho a parte que contém:
MIME-Version: 1.0 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Content-Transfer-Encoding: base64
O restante é o conteúdo que deve ser enviado na requisição
@Alfredao , outra dúvida este json assinado vai no HEADER ou no body do post . e se for no HEADER que parâmertro que eu mando ????
@rcoproc vai no body. Eu apenas faço uma requisição simples, utilizando cURL no método POST, sem nenhum header ou parâmetro adicional.
@Alfredao , e galera daqui , obrigado pela ajuda.. o desespero foi grande mas deu certo ..
Agora um resumo para análise final:
1) Temos que assinar e enviar ao Bradesco a chave pública no padrão cert ??? senão eles não validam a assinatura, antes nós estávamos mandando no padrão PEM;
2) Tenho que tirar no ruby os Head e Tail da assinatura BEGIN/-----END PKCS7-----;
3) Criptografa com base64 e manda no POST somente no body este conteúdo;
Feito isto mesmo dando erro 810 , a turma da 7COMM do suporte do bradesco me confirmaram que receberam lá , agora é a fase dos dados reais no json, agora está mais fácil.
Abraço a todos e fica ai nossa pequena ajuda nestes procedimentos.
@Alfredao O que fez para corrigir o: Dados inconsistentes? Estou com o mesmo problema aqui..
@rcoproc Fala Ricardo Estava agora escrevendo uma resposta para você, indicando enviar somente o conteúdo base64, sem esse BEGIN e END.. bom, que maravilha que conseguiu!
@gustavopradoreis Acabei de responder seu e-mail
Dados inconsistentes significa que o CNPJ, carteira, agência e/ou conta estão incorretos. Em contato com suporte pediram para eu confirmar estes dados com meu gerente comercial.
No final das contas, descobri que a composição do meu nuNegociacao estava incorreta. Depois disso finalmente recebi código 0, solicitação atendida.
Gustavo , agora é detalhe nos dados.. manda um email para o suporte da 7com ,
eles tem o campo que está com o problema. Achei que isto voltaria no webservice com maiores detalhes, alguém fez diferente ??
Ai é só consertar. vou pegar aqui o email:
atendimentoregistroonline@7comm.com.br
Atendimento Registro Online
@Alfredao , no seu caso vc teve que mandar para a 7comm sua chave pública ??
ou é o cliente que manda na hora de cadastrar a carteira lá no bradesco ???
Fiquei com esta dúvida.
@rcoproc Eu sinceramente não sei como é feito este cadastro O que estou desenvolvendo não é para mim. Apenas peguei os dados com meu cliente. Ele me passou o número da agência e conta e o número da carteira. Foi o suficiente.
@Alfredao , a dúvida é porque se o Bradesco não tiver esta chave pública em teoria ele não conseguiria ler a assinatura. correto ???
Alguém aqui sabe como isto funciona ???
@rcoproc você está confundindo as coisas. Como já havia falado antes, assinar um conteúdo digitalmente não significa que ele estará criptografado. Ninguém precisa de senhas ou chaves para conseguir ler o conteúdo.
A assinatura digital é como uma assinatura física, você pode ler uma assinatura feita num papel de qualquer pessoa, certo? Você não pode é falsificar essa assinatura.
Para assinar algum documento, arquivo ou etc, como fazemos para enviar ao Bradesco, utilizamos nossa senha. Mais ninguém consegue fazer a nossa assinatura sem o par de chaves + senha. Porém é possível sim ler o arquivo sem problemas.
Galera, ao registrar um boleto em produção, é retornado a linha digitável para pagamento do boleto e também o código de barras, que é uma sequencia dos caracteres NWnw, não entendi muito bem como isso funciona e não encontrei muita coisa sobre isso.
A única coisa que encontrei foi um tal de MSI Barcode Pattern, que cita
The MSI Start and Stop characters are Wn and NwN respectively.
mas nada esclarecedor.
Como vocês estão fazendo a montagem do código de barras? Estão utilizando o conteúdo retornado pelo Bradesco ou vocês mesmo fazem a geração?
Não faço a mínima ideia de como converter isso em um código de barras 🤣 estou gerando a partir da linha digitável utilizando o Zend Barcode
Abaixo segue exemplo do conteúdo retornado
"cdBarras": "<NWnnwnNnWwnnnWWNwnNwwnNWnnnWWnnnWWnWnnnWwNwnNnnWWnwWnnNnnWWnnWnWnNwnWnwNnWnNwnWnwNnWnnWnWnnnWWnnnWWnwnWNnnnWWn>"
Abraços!
@rcoproc gerar o código de barras não é o problema. O Zend Barcode faz um ótimo trabalho
Queria entender por que o Bradesco retorna esses NWnw e como convertê-los para uma imagem. Bem estranho isso
@Alfredao @rcoproc
Mesma duvida quanto a esse barcode! Valores estranhos que eles retornam, como converter isso na img do barcode, alguém sabe?
Minha dúvida é a mesma pra essa cdBarra. Queria entender e converte-lo em número
Recebi o manual do Bradesco, será através de web service mas o serviço ainda não esta disponível.