Boleto Sicoob com Api

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

Boleto Sicoob com Api

Mensagem por malcarli »

Bom dia cliente pediu para usar a api do sicoob, Fiz esta rotina, mas não está autorizando, mesma usando as credenciais fornecidas pelo banco. Olhando na net parece que precisa do certificado digital, mas não sei como usar antes da rotina abaixo. Se alguém tem dicas, agradeço e bfds.

Att.

Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®
https://malc-informatica.ueniweb.com
Insta: @malcarli25
Email / Skype: marceloalcarli@gmail.com





Código: Selecionar todos

/*****************************************************************************
 * SISTEMA  : ROTINA EVENTUAL                                                *
 * PROGRAMA : DEMO.PRG   		                                     *
 * OBJETIVO : Boleto por Api - Sicoob                                        *
 * AUTOR    : Marcelo Antonio Lázzaro Carli                                  *
 * DATA     : 23.02.2024                                                     *
 * ULT. ALT.: 27.02.2024                                                     *
 *****************************************************************************/
#include 'minigui.ch'

Function Main()
   REQUEST HB_LANG_PT
   REQUEST HB_CODEPAGE_PTISO
   REQUEST HB_CODEPAGE_PT850
   HB_LangSelect([PT])
   Set Navigation Extended

   DEFINE WINDOW f_BoletosApi AT 165 , 299 WIDTH 650 HEIGHT 300 TITLE "Boleto por Api - Sicoob" MAIN 

     DEFINE BUTTON Button_1
            ROW    210
            COL    20
            WIDTH  110
            HEIGHT 28
            ACTION {|| fEnvia(1)}
            CAPTION "Enviar Boletos"
            FONTNAME 'Arial'
     END BUTTON

     DEFINE BUTTON Button_2
            ROW    210
            COL    210
            WIDTH  110
            HEIGHT 28
            ACTION {|| fEnvia(2)}
            CAPTION "Consultar Boleto"
            FONTNAME 'Arial'
     END BUTTON

     DEFINE BUTTON Button_3
            ROW    210
            COL    480
            WIDTH  110
            HEIGHT 28
            ACTION {|| f_BoletosApi.Release}
            CAPTION "Sair"
            FONTNAME 'Arial'
     END BUTTON

   END WINDOW

   f_BoletosApi.Center
   f_BoletosApi.Activate
Return (Nil)

Static Procedure fEnvia(nTipo)
   Local oSoap, cUrl:= cRetorno:= cChave:= cBoleto:= cCliente:= [], cMetodo:= [POST], nAmbiente:= 1 // 1 Produção 2 - testes

   HB_SETCODEPAGE([PTISO])
  
   If nTipo == 1 // emitir boleto
      If nAmbiente == 1  // Produção
         cUrl   := [https://api.sicoob.com.br/cobranca-bancaria/v2/boletos] 
      Else
         cUrl   := [https://sandbox.sicoob.com.br/sicoob/sandbox/cobranca-bancaria/v2/boletos]
      Endif
   Else          // consultar boleto
      cMetodo:= [GET] 
      If nAmbiente == 1  // Produção
 *        cUrl   := [https://api.sicoob.com.br/cobranca-bancaria/v2/boletos?numeroContrato={{153672}}&modalidade=1&nossoNumero=10264] 
         cUrl   := [https://api.sicoob.com.br/cobranca-bancaria/v2/boletos?numeroContrato=153672&modalidade=1&nossoNumero=10264] 
*        cUrl   := [https://api.sicoob.com.br/cobranca-bancaria/v2/boletos?numeroContrato={{153672}}&modalidade=1&nossoNumero=102642] 
      Else
         cUrl   := [https://sandbox.sicoob.com.br/sicoob/sandbox/cobranca-bancaria/v2/boletos?numeroContrato={{numContrato}}&modalidade=1&nossoNumero=integer] 
      Endif
   Endif

   cChave  := [Bearer 946700d1-6a91-4b6a-845e-9999] // chave sicoob não é esta por segurança
   cCliente:= [946700d1-6a91-4b6a-845e-9999993] // não é esta por segurança

   cBoleto:= '{ "numeroContrato": 153672,'                                     + hb_OsNewLine() + ;                   
               '"modalidade": 1,'                                              + hb_OsNewLine() + ;
               '"numeroContaCorrente": 0,'                                     + hb_OsNewLine() + ;
               '"especieDocumento": "DM",'                                     + hb_OsNewLine() + ;
               '"dataEmissao": "2024-09-20T00:00:00-03:00",'                   + hb_OsNewLine() + ;
               '"nossoNumero": 2588658,'                                       + hb_OsNewLine() + ;
               '"seuNumero": "1235512",'                                       + hb_OsNewLine() + ;
               '"identificacaoBoletoEmpresa": "4562",'                         + hb_OsNewLine() + ;
               '"identificacaoEmissaoBoleto": 1,'                              + hb_OsNewLine() + ;
               '"identificacaoDistribuicaoBoleto": 1,'                         + hb_OsNewLine() + ;
               '"valor": 156.23,'                                              + hb_OsNewLine() + ;
               '"dataVencimento": "2024-09-20T00:00:00-03:00",'                + hb_OsNewLine() + ;
               '"dataLimitePagamento": "2024-09-20T00:00:00-03:00",'           + hb_OsNewLine() + ;
               '"valorAbatimento": 1,'                                         + hb_OsNewLine() + ;
               '"tipoDesconto": 1,'                                            + hb_OsNewLine() + ;
               '"dataPrimeiroDesconto": "2024-09-20T00:00:00-03:00",'          + hb_OsNewLine() + ;
               '"valorPrimeiroDesconto": 1,'                                   + hb_OsNewLine() + ;
               '"dataSegundoDesconto": "2024-09-20T00:00:00-03:00",'           + hb_OsNewLine() + ;
               '"valorSegundoDesconto": 0,'                                    + hb_OsNewLine() + ;
               '"dataTerceiroDesconto": "2024-09-20T00:00:00-03:00",'          + hb_OsNewLine() + ;
               '"valorTerceiroDesconto": 0,'                                   + hb_OsNewLine() + ;
               '"tipoMulta": 0,'                                               + hb_OsNewLine() + ;
               '"dataMulta": "2024-09-20T00:00:00-03:00",'                     + hb_OsNewLine() + ;
               '"valorMulta": 5,'                                              + hb_OsNewLine() + ;
               '"tipoJurosMora": 2,'                                           + hb_OsNewLine() + ;
               '"dataJurosMora": "2024-09-20T00:00:00-03:00",'                 + hb_OsNewLine() + ;
               '"valorJurosMora": 4,'                                          + hb_OsNewLine() + ;
               '"numeroParcela": 1,'                                           + hb_OsNewLine() + ;
               '"aceite": false,'                                              + hb_OsNewLine() + ;
               '"codigoNegativacao": 2,'                                       + hb_OsNewLine() + ;
               '"numeroDiasNegativacao": 60,'                                  + hb_OsNewLine() + ;
               '"codigoProtesto": 1,'                                          + hb_OsNewLine() + ;
               '"numeroDiasProtesto": 30,'                                     + hb_OsNewLine() + ;
               '"pagador": { "numeroCpfCnpj": "98765432185",'                  + hb_OsNewLine() + ;
                            '"nome": "Marcelo dos Santos",'                    + hb_OsNewLine() + ;
                            '"endereco": "Rua 87 Quadra 1 Lote 1 casa 1",'     + hb_OsNewLine() + ;
                            '"bairro": "Santa Rosa",'                          + hb_OsNewLine() + ;
                            '"cidade": "Luziânia",'                            + hb_OsNewLine() + ;
                            '"cep": "72320000",'                               + hb_OsNewLine() + ;
                            '"uf": "DF",'                                      + hb_OsNewLine() + ;
                            '"email": [ "pagador@dominio.com.br" ] },'         + hb_OsNewLine() + ;
               '"beneficiarioFinal": { "numeroCpfCnpj": "98784978699",'        + hb_OsNewLine() + ;
                                      '"nome": "Lucas de Lima" },'             + hb_OsNewLine() + ;
               '"mensagensInstrucao": { "tipoInstrucao": 1,'                   + hb_OsNewLine() + ;
                   '"mensagens": [ "Descrição da Instrução 1",'                + hb_OsNewLine() + ;
                                  '"Descrição da Instrução 2",'                + hb_OsNewLine() + ;
                                  '"Descrição da Instrução 3",'                + hb_OsNewLine() + ;
                                  '"Descrição da Instrução 4",'                + hb_OsNewLine() + ;
                                  '"Descrição da Instrução 5" ] },'            + hb_OsNewLine() + ;
               '"gerarPdf": true,'                                             + hb_OsNewLine() + ;
               '"rateioCreditos": [ { "numeroBanco": 756,'                     + hb_OsNewLine() + ;
                                     '"numeroAgencia": 4027,'                  + hb_OsNewLine() + ;
                                     '"numeroContaCorrente": 0,'               + hb_OsNewLine() + ;
                                     '"contaPrincipal": true,'                 + hb_OsNewLine() + ;
                                     '"codigoTipoValorRateio": 1,'             + hb_OsNewLine() + ;
                                     '"valorRateio": 156.23,'                  + hb_OsNewLine() + ;
                                     '"codigoTipoCalculoRateio": 1,'           + hb_OsNewLine() + ;
                                     '"numeroCpfCnpjTitular": "98765432185",'  + hb_OsNewLine() + ;
                                     '"nomeTitular": "Marcelo dos Santos",'    + hb_OsNewLine() + ;
                                     '"codigoFinalidadeTed": 10,'              + hb_OsNewLine() + ;
                                     '"codigoTipoContaDestinoTed": "CC",'      + hb_OsNewLine() + ;
                                     '"quantidadeDiasFloat": 1,'               + hb_OsNewLine() + ;
                                     '"dataFloatCredito": "2020-12-30" } ],'   + hb_OsNewLine() + ;
               '"codigoCadastrarPIX": 1 }'


   BEGIN SEQUENCE WITH __BreakBlock()
      oSoap:= Win_OleCreateObject([MSXML2.ServerXMLHTTP.6.0])
      oSoap:SetTimeouts(30000, 30000, 30000, 30000)
      oSoap:Open(cMetodo, cUrl, .F.)
      oSoap:SetRequestHeader([Authorization], cChave)
      oSoap:SetRequestHeader([client_id], cCliente)
      oSoap:SetRequestHeader([Content-Type], [application/json; charset=utf-8])
      oSoap:SetRequestHeader([Accept], [application/json])
      oSoap:SetRequestHeader([cache-control], [no-cache])

      oSoap:Send(cBoleto)

      cRetorno:= oSoap:Responsetext()
   END SEQUENCE

*   aReturn := {=>}
*   cteste:= hb_jsondecode(cRetorno, @aReturn)

   hb_MemoWrit([retorno.txt], cRetorno)

   If hb_At([resultado], cRetorno) # 0
      MsgInfo([Sucesso: ] + cRetorno)
   Else
      MsgExclamation([Aconteceu um erro: ] + hb_OsNewLine() + cRetorno, [Entre em contato com o Suporte])
   Endif
   HB_SETCODEPAGE([PT850])
Return (Nil)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Boleto Sicoob com Api

Mensagem por JoséQuintas »

malcarli escreveu:Bom dia cliente pediu para usar a api do sicoob, Fiz esta rotina, mas não está autorizando, mesma usando as credenciais fornecidas pelo banco. Olhando na net parece que precisa do certificado digital, mas não sei como usar antes da rotina abaixo. Se alguém tem dicas, agradeço e bfds.
Sefazclass, NFE, CTE, MDFE, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

Boleto Sicoob com Api

Mensagem por malcarli »

Desculpa Mestre, não entendi a resposta, mas mesmo assim obg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Boleto Sicoob com Api

Mensagem por JoséQuintas »

malcarli escreveu:Desculpa Mestre, não entendi a resposta, mas mesmo assim obg
Tem horas, que é necessário pensar.

Tudo do governo usa certificado, incluindo sefazclass.
Só olhar na sefazclass.

Outra opção é GOOGLE.
O que pesquisar ?
Tá usando o que? MSXML2.ServerXMLHTTP
Coloque no google as palavas "MSXML2.ServerXMLHTTP" e "certificado"
Também vai ter a resposta rapidamente.

Quer ajuda ou quer o fonte já pronto pra uso pra apenas copiar?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Boleto Sicoob com Api

Mensagem por sygecom »

Vou dar meus 2 centavos de opinião apenas aqui.

Foge dessa MSXML e foge Win_OleCreateObject, tenho diversos problemas ao usar.

Tente implementar usando CURL, veja abaixo uma classe e um exemplo de uso:
viewtopic.php?f=4&t=27288&p=162639&hilit=oSyg_curl#p162639

Como eu disse apenas uma opinião.

O que o José Quintas indicou da classe dele, que lá tem exemplo de como assinar um XML para enviar em webserve soap, que é diferente do seu que API do tipo REST. Mesmo assim acredito que a parte de assinatura talvez de para aplicar.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Boleto Sicoob com Api

Mensagem por JoséQuintas »

sygecom escreveu:Foge dessa MSXML e foge Win_OleCreateObject, tenho diversos problemas ao usar.
Nem tanto.
Uso ADO no aplicativo pra acessar MySQL, é com win_OleCreateObject(), uso no aplicativo do começo ao fim.
Também o mesmo componente pra autorizar NFE, CTE, MDFE
Ainda acho que tem conflitos aí pra resolver, mas tudo é possível, depois da compilação -gc3, não duvido de mais nada kkkk
sygecom escreveu:O que o José Quintas indicou da classe dele, que lá tem exemplo de como assinar um XML para enviar em webserve soap, que é diferente do seu que API do tipo REST. Mesmo assim acredito que a parte de assinatura talvez de para aplicar.
Confundiu aqui.
É usar certificado na conexão.
Sefazclass usa o mesmo componente e usa certificado.
É só pra conectar.
Isso já elimina intrusos.
Depois da conexão, aí cada um faz o que precisa, do jeito que precisa, até mesmo mais senhas de segurança, token, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Boleto Sicoob com Api

Mensagem por JoséQuintas »

Ainda não entendeu né, continua perguntando por aí...

seu fonte

Código: Selecionar todos

oSoap:= Win_OleCreateObject([MSXML2.ServerXMLHTTP.6.0])
procurando o mesmo componente na sefazclass

Código: Selecionar todos

METHOD MicrosoftXmlSoapPost() CLASS SefazClass

   LOCAL oServer, nCont, cRetorno, lOk, cBlocoValido
   LOCAL cSoapAction

   cSoapAction := ::cSoapAction
   lOk := .F.
   BEGIN SEQUENCE WITH __BreakBlock()
      oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0" )
      lOk := .T.
   ENDSEQUENCE
   IF ! lOk
      ::cXmlRetorno := "<xml>*ERRO* Erro: No uso do objeto MSXML2.ServerXmlHTTP.6.0</xml>"
      RETURN Nil
   ENDIF
   IF ::cCertificado != NIL
      oServer:setOption( 3, "CURRENT_USER\MY\" + ::cCertificado )
   ENDIF
Só resta avisar:
Não é qualquer certificado.
Veja com o banco.

Nota: e seria a mesma resposta procurando no google sobre "msxml2.serverXmlhttp certificado"
Talvez um pouco diferente no Visual Basic 6: oServer:SetOption 3, "CURRENT_USER\MY\" + cName
Digamos que é a diferença entre chamar procedure ou function no VB6, procedure não tem parêntesis.
Bom saber, para o caso de outras pesquisas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder