Página 1 de 1

Boleto Sicoob com Api

Enviado: 29 Fev 2024 10:10
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)

Boleto Sicoob com Api

Enviado: 29 Fev 2024 14:29
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.

Boleto Sicoob com Api

Enviado: 01 Mar 2024 11:05
por malcarli
Desculpa Mestre, não entendi a resposta, mas mesmo assim obg

Boleto Sicoob com Api

Enviado: 01 Mar 2024 13:51
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?

Boleto Sicoob com Api

Enviado: 01 Mar 2024 15:36
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.

Boleto Sicoob com Api

Enviado: 01 Mar 2024 18:21
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.

Boleto Sicoob com Api

Enviado: 05 Mar 2024 16:11
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.