BoletoNet / boletonet

Boleto.Net is a library developed for use in Brazil, given it has been programmed with Brazilian retail legislation and business rules for bank registered billing integration.
Apache License 2.0
482 stars 383 forks source link

Alguém já esta desenvolvendo o boleto e registro conforme a nova plataforma do Febraban ? #306

Open leonardomsgoncalves opened 8 years ago

leonardomsgoncalves commented 8 years ago

Recebi o manual do Bradesco, será através de web service mas o serviço ainda não esta disponível.

hgmauri commented 7 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

willalberton commented 7 years ago

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");`
willalberton commented 7 years ago

@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

guimaraessilas commented 7 years ago

@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?

willalberton commented 7 years ago

@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.

castromarcelo commented 7 years ago

@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.

rafaelwilsondantas commented 7 years ago

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

guimaraessilas commented 7 years ago

@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

rafaelwilsondantas commented 7 years ago

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.

Alfredao commented 7 years ago

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

guimaraessilas commented 7 years ago

pessoal, na parte em que assino o certificado recebo o seguinte erro:

image

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?

hgmauri commented 7 years ago

@guimaraessilas pode ser permissão no certificado... eu passei por isso e segui o link abaixo e deu certo:

https://stackoverflow.com/questions/12106011/system-security-cryptography-cryptographicexception-keyset-does-not-exist

juanpetrik commented 7 years ago

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?

guimaraessilas commented 7 years ago

@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?

hgmauri commented 7 years ago

@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

juanpetrik commented 7 years ago

@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"

guimaraessilas commented 7 years ago

@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

juanpetrik commented 7 years ago

@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

guimaraessilas commented 7 years ago

` 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

juanpetrik commented 7 years ago

@guimaraessilas esse arquivo jks pode estar em qualquer lugar do S.O?

Estou utilizando windows.

guimaraessilas commented 7 years ago

pode sim

juanpetrik commented 7 years ago

Essa KEYSTORE_PASSWORD é a senha do jks? a senha que eu digitei no prompt.. isso?

guimaraessilas commented 7 years ago

isso aí

juanpetrik commented 7 years ago

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?

guimaraessilas commented 7 years ago

Então, no meu caso eu coloquei o caminho direto pro jks mesmo. Mas não sei se isso vai interferir em algo...

rcoproc commented 7 years ago

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:

  1. Certificado ICP – BRASIL não está válido ou está vencido; Certificado está ok
  2. PKCS#7 e assinatura estão inválidos; ??? dúvida , como verificar isto ???
  3. Cadeia certificadora pode não estar presente no servidor Bradesco ??? dúvida , como verificar isto ???

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

hgmauri commented 7 years ago

@rcoproc Tente colocar "" em nuLogradouroSacadorAvalista

rcoproc commented 7 years ago

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 ???

Alfredao commented 7 years ago

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

Alfredao commented 7 years ago

@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 :(

rcoproc commented 7 years ago

Valeu @Alfredao , obrigado pela força e qual sua linguagem que vc fez o teste ??? Só de curiosidade.

Alfredao commented 7 years ago

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.

rcoproc commented 7 years ago

@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."

Alfredao commented 7 years ago

@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

rcoproc commented 7 years ago

@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 ????

Alfredao commented 7 years ago

@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.

rcoproc commented 7 years ago

@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.

gustavopradoreis commented 7 years ago

@Alfredao O que fez para corrigir o: Dados inconsistentes? Estou com o mesmo problema aqui..

Alfredao commented 7 years ago

@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!

Alfredao commented 7 years ago

@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.

rcoproc commented 7 years ago

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

rcoproc commented 7 years ago

@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.

Alfredao commented 7 years ago

@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.

rcoproc commented 7 years ago

@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 ???

Alfredao commented 7 years ago

@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.

Alfredao commented 7 years ago

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 commented 7 years ago

Veja se te ajuda @Alfredao https://cmsportal.febraban.org.br/Arquivos/documentos/PDF/Layout%20-%20C%C3%B3digo%20de%20Barras%20-%20Vers%C3%A3o%205%20-%2001_08_2016.pdf

bar_code_febraban

E se estiver correto:

https://gist.github.com/martinusso/635f1a97efa6de8690e788d58dbc4504

Alfredao commented 7 years ago

@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

gustavopradoreis commented 7 years ago

@Alfredao @rcoproc

Mesma duvida quanto a esse barcode! Valores estranhos que eles retornam, como converter isso na img do barcode, alguém sabe?

rafaleite commented 7 years ago

Minha dúvida é a mesma pra essa cdBarra. Queria entender e converte-lo em número