Jump to content
Fivewin Brasil

Boleto bancário Sicoob


Wellington Vieira

Recommended Posts

Para o desenvolvimento do boleto bancário SICOOB.

1º) - Acessar a plataforma developer's SICOOB. "https://developers.sicoob.com.br/portal/", assim que acessar a plataforma irá solicitar que você escolha um certificado digital que esteja instalado em sua máquina para que você possa criar uma conta, escolha o certificado digital para a empresa que você irá liberar a solução, ou seja toda vez que você for liberar a solução para algum cliente, sempre escolher o certificado digital pertencente a esse cliente.

2º) - Criar uma conta para este cliente que você deseja liberar a solução. Após criar a conta solicitar a recuperação de senha para criar uma senha para este cliente.

3º) - É preciso ter em mãos o arquivo do certificado digital no formato ".pfx" e a partir dele gerar os certificados no formato ".pem" e ".key", para isso utilize o "openssl.exe", que pode ser baixado em "https://www.openssl.org/" ou pode se utilizar o do "cygwin64", ou qualquer um que tenha o openssl que é uma implementação de código aberto dos protocolos SSL e TLS. Usa os comandos abaixo para criar o ".pem" e o ".key".
     
openssl pkcs12 -in [arquivo.pfx] -nokeys -out [arquivo].pem

openssl pkcs12 -in [arquivo].pfx -nocerts -out [arquivo].key

4º) - Na plataforma 
"https://developers.sicoob.com.br/portal/", você poderá criar o(s) aplicativos para cada um dos seus cliente(s), indo no menu "MEUS APLICATIVOS". O arquivo do certificado digital que deve-se subir na criação do aplicativo é o ".pem" que você gerou a partir do ".pfx". Após a criação do aplicativo no portal você poderá acessar o aplicativo no portal e pegar a informação do "CLIENT ID" para se usar nas solicitações do TOKEN e do envio do arquivo JSON para o boleto. ( Nesta criação do aplicativo, seguir as orientações solicitadas, pois será necessário a confirmação por um código enviado ao aplicativo do SICOOB no celular do cliente, então o mesmo deverá acompanhar a a criação).

Na programação eu criei 02 arquivo em "PHP", um que irá solicitar o "token" e o outro que irá enviar o "json" para o SICOOB, você poderá faze-los via programação em fivewin, eu fiz assim pois acho mais fácil com estes pequenos em PHP e o restante em programação fivewin.

SOLICITAÇÃO DO TOKEN EM PHP, que fica em um ftp meu e o meu software acessa este pequeno PHP.

<?php
$Client_ID_envia = $_GET['Client_ID_envia'];
$Client_certificado_pem = $_GET['Client_certificado_pem'];
$Client_certificado_key = $_GET['Client_certificado_key'];
$Client_senha = $_GET['Client_senha'];
$Client_scope = $_GET['Client_scope'];
$url_path = "https://auth.sicoob.com.br/auth/realms/cooperado/protocol/openid-connect/token";
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url_path,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_SSLCERT => $Client_certificado_pem,
CURLOPT_SSLKEY => $Client_certificado_key,
CURLOPT_SSLKEYPASSWD => $Client_senha,
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Content-Type: application/x-www-form-urlencoded"),
CURLOPT_POSTFIELDS => "grant_type=client_credentials&client_id={$Client_ID_envia}&scope=cobranca_boletos_consultar%20cobranca_boletos_incluir%20cobranca_boletos_pagador%20cobranca_boletos_segunda_via%20cobranca_boletos_descontos%20cobranca_boletos_abatimentos%20cobranca_boletos_valor_nominal%20cobranca_boletos_seu_numero%20cobranca_boletos_especie_documento%20cobranca_boletos_baixa"
));
$response = curl_exec($ch);
$info =curl_errno($ch)>0 ? array("curl_error_".curl_errno($ch)=>curl_error($ch)) : curl_getinfo($ch);
echo("<pre>");
print_r($info);
curl_close($ch);
echo $response;
echo("</pre>");
?>


ENVIO DAS INFORMAÇÕES EM PHP, que fica em um ftp meu e o meu software acessa este pequeno PHP.

<?php
$Client_certificado_pem = $_GET['Client_certificado_pem'];
$Client_certificado_key = $_GET['Client_certificado_key'];
$Client_senha = $_GET['Client_senha'];
$Cliente_Token = $_GET['Cliente_Token'];
$Client_ID_envia = $_GET['Client_ID_envia'];
$Cliente_Field = $_GET['Cliente_Field'];
$Client_scope = $_GET['Client_scope'];

$ch = curl_init();
curl_setopt_array($ch, array(
  CURLOPT_URL => 'https://api.sicoob.com.br/cobranca-bancaria/v2/boletos',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_SSLCERT => $Client_certificado_pem,
  CURLOPT_SSLKEY => $Client_certificado_key,
  CURLOPT_SSLKEYPASSWD => $Client_senha,
  CURLOPT_POSTFIELDS =>$Cliente_Field,
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/json",
    "Authorization: Bearer $Cliente_Token",
    "Accept: application/json",
    "client_id: $Client_ID_envia"
 ),
));
$response = curl_exec($ch);
$info =curl_errno($ch)>0 ? array("curl_error_".curl_errno($ch)=>curl_error($ch)) : curl_getinfo($ch);
echo("<pre>");
print_r($info);
curl_close($ch);
echo $response;
echo("</pre>");
?>

CÓDIGO DE PROGRAMAÇÃO EM FIVEWIN.

		             if alltrim(xnbanco) = "756 - Sicoob Uberlandia"
					    
						if empty(xnMclient_id)
						   msgstop("ID do cliente para o Sicoob não informado.","Atenção")
						   exit
						endif
						_Client_ID = alltrim(xnMclient_id)
						if empty(xnMnomecertif)
						   msgstop("Nome do certificado para o Sicoob não informado.","Atenção")
						   exit
						endif
						_Client_certificado_pem = alltrim(xnMnomecertif) + ".pem"
						_Client_certificado_key = alltrim(xnMnomecertif) + ".key"
						_Client_certificado_crt = alltrim(xnMnomecertif) + ".crt"
						if empty(xnMsenhacertif)
						   msgstop("Senha do certificado para o Sicoob não informado.","Atenção")
						   exit
						endif
						_Client_senha = alltrim(xnMsenhacertif)
						_Client_scope = "cobranca_boletos_incluir"
						
						cSignatureValue      = ""
						nlocaliza_registro_1 = ""
						nlocaliza_registro_2 = ""
						_nret_access_token   = ""
						
					    _nArquivo_enviar = "http://www.wsiscom.com.br/sicoob/acess_token_sicoob.php?Client_ID_envia=" + _Client_ID +;
										   "&Client_certificado_key=" + _Client_certificado_key +;
										   "&Client_certificado_pem=" + _Client_certificado_pem +;
										   "&Client_senha=" + _Client_senha +;
										   "&Client_scope=" + _Client_scope 
					    try
				           _oserver := CreateObject( "MSXML2.XMLHTTP" )
					       _oserver:Open( "GET",_nArquivo_enviar, .F. )
					       _oserver:SetRequestHeader("Content-Type","application/json")
	                       _oserver:Send(_nArquivo_enviar)
	                       WHILE _oserver:readyState != 4
	                             _oserver:WaitForResponse( 500 )
	                       end
						   cSignatureValue = _oserver:responseText
	                    catch
	                       msgstop("1 - Erro na geração do arquivo para o sicoob.","Erro Atenção")
						   exit
	                    end
					    if empty(cSignatureValue)
					       msgstop("2 - Sem resposta do acess_token_sicoob.php.","Erro Atenção")
					       exit
					    endif
					    if cSignatureValue = nil
					       msgstop("3- Sem resposta do acess_token_sicoob.php.","Erro Atenção")
						   exit
					    endif
					 
					    //lh := 00
                        //mdire = "json_token.txt"
                        //oPrn := TDosPrn():New(mdire)
                        //oPrn:StartPage()
                        //oPrn:lZeraBuffer:=.T.
                        //oPrn:Say(lh,000,cSignatureValue)
                        //oPrn:EndPage()
                        //oPrn:End()
						
					    nlocaliza_registro_1 := At( '[http_code] =>', cSignatureValue )
					    if !empty(nlocaliza_registro_1)
			               if substr(cSignatureValue,nlocaliza_registro_1,18) != "[http_code] => 200"
							  msgstop(substr(cSignatureValue,nlocaliza_registro_1,18),"Erro")
					          exit
                           endif							
					    else
						   msgstop("Não foi possível localizar o retorno do token","Atenção")
					       exit
					    endif
						
					    nlocaliza_registro_1 := At( '{"access_token":"', cSignatureValue )
					    nlocaliza_registro_2 := At( '","expires_in":300', cSignatureValue )
					    
					    if !empty(nlocaliza_registro_1) .or. !empty(nlocaliza_registro_2)
			               
						   _nret_access_token = substr(cSignatureValue,nlocaliza_registro_1,(nlocaliza_registro_2 - nlocaliza_registro_1))
						   _nret_access_token = substr(_nret_access_token,18,5000)
						   
					    else
						   msgstop("Não foi possível localizar o registro (access_token) ","Atenção")
					       exit
					    endif
						
						narquivoJSON := '[' + CRLF
						narquivoJSON += '{' + CRLF
                        narquivoJSON += '"numeroContrato": ' + alltrim(xnnumerocliente) + ',' + CRLF
                        narquivoJSON += '"modalidade": 1,' + CRLF
                        narquivoJSON += '"numeroContaCorrente": ' + alltrim(xnconta) + alltrim(xndconta) + ',' + CRLF
                        narquivoJSON += '"especieDocumento": "DM",' + CRLF
                        
						narquivoJSON += '"dataEmissao": "' + substr(dtos(ldate),1,4) + '-' + substr(dtos(ldate),5,2) + '-' + substr(dtos(ldate),7,2)
						narquivoJSON += 'T' + alltrim(time())
                        if zfathorariodeverao = 1
                           narquivoJSON += '-02:00",'
                        else	 
                           narquivoJSON += '-03:00",' + CRLF
                        endif
						
					    _nandup = ""
					    for ttqq = 1 to len(andup)
					        if substr(andup,ttqq,1) = "0" .or. substr(andup,ttqq,1) = "1" .or. substr(andup,ttqq,1) = "2" .or.;
						       substr(andup,ttqq,1) = "3" .or. substr(andup,ttqq,1) = "4" .or. substr(andup,ttqq,1) = "5" .or.;
							   substr(andup,ttqq,1) = "6" .or. substr(andup,ttqq,1) = "7" .or. substr(andup,ttqq,1) = "8" .or.;
							   substr(andup,ttqq,1) = "9"
						       _nandup = _nandup  + substr(andup,ttqq,1)
						    endif
					    next
						
						narquivoJSON += '"seuNumero": "' + alltrim(andup) + '",' + CRLF
                        narquivoJSON += '"identificacaoEmissaoBoleto": 1,' + CRLF
                        narquivoJSON += '"identificacaoDistribuicaoBoleto": 1,' + CRLF
                        _ntamanho = len(alltrim(str(int(avdup * 100))))							
					    narquivoJSON += '"valor": ' + substr(alltrim(str(int(avdup * 100))),1,(_ntamanho - 2)) + '.' + substr(alltrim(str(int(avdup * 100))),((_ntamanho - 2) + 1),2) + ',' + CRLF
					    
						narquivoJSON += '"dataVencimento": "' + substr(dtos(advenc),1,4) + '-' + substr(dtos(advenc),5,2) + '-' + substr(dtos(advenc),7,2)
						narquivoJSON += 'T' + alltrim(time())
                        if zfathorariodeverao = 1
                           narquivoJSON += '-02:00",'
                        else	 
                           narquivoJSON += '-03:00",' + CRLF
                        endif
							
					    advenc_1 = advenc + 1
							
                        narquivoJSON += '"tipoDesconto": 0,' + CRLF
                        
						if !empty(zfinmultaatraso)
						   narquivoJSON += '"tipoMulta": 2,' + CRLF
						   narquivoJSON += '"dataMulta": "' + substr(dtos(advenc_1),1,4) + '-' + substr(dtos(advenc_1),5,2) + '-' + substr(dtos(advenc_1),7,2)
						   narquivoJSON += 'T' + alltrim(time())
                           if zfathorariodeverao = 1
                              narquivoJSON += '-02:00",'
                           else	 
                              narquivoJSON += '-03:00",' + CRLF
                           endif
						   _ntamanho = len(alltrim(str(int(zfinmultaatraso * 100))))
						   narquivoJSON += '"valorMulta": ' + substr(alltrim(str(int(zfinmultaatraso * 100))),1,(_ntamanho - 2)) + '.' + substr(alltrim(str(int(zfinmultaatraso * 100))),((_ntamanho - 2) + 1),2) + ',' + CRLF
						   //narquivoJSON += '"valorMulta": ' + alltrim(str(int(zfinmultaatraso))) + ',' + CRLF
					    else
						    narquivoJSON += '"tipoMulta": 0,' + CRLF
					    endif
						
					    if !empty(zfintaxajurosmensal)
						   narquivoJSON += '"tipoJurosMora": 2,' + CRLF
						   narquivoJSON += '"dataJurosMora": "' + substr(dtos(advenc_1),1,4) + '-' + substr(dtos(advenc_1),5,2) + '-' + substr(dtos(advenc_1),7,2)
						   narquivoJSON += 'T' + alltrim(time())
                           if zfathorariodeverao = 1
                              narquivoJSON += '-02:00",'
                           else	 
                              narquivoJSON += '-03:00",' + CRLF
                           endif
						   zfintaxajurosdias = zfintaxajurosmensal
						   if zfintaxajurosdias < 1
						      narquivoJSON += '"valorJurosMora": ' + '0.' + alltrim(str(int(zfintaxajurosdias * 100))) + ',' + CRLF
						   else
						      _ntamanho = len(alltrim(str(int(zfintaxajurosdias * 100)))) 
						      narquivoJSON += '"valorJurosMora": ' + substr(alltrim(str(int(zfintaxajurosdias * 100))),1,(_ntamanho - 2)) + '.' + substr(alltrim(str(int(zfintaxajurosdias * 100))),((_ntamanho - 2) + 1),2) + ',' + CRLF
						      //narquivoJSON += '"valorJurosMora": ' + alltrim(str(int(zfintaxajurosdias)))  + ',' + CRLF
						   endif
					    else
						    narquivoJSON += '"tipoJurosMora": 3,' + CRLF
				        endif
						
						// aqui ....
						narquivoJSON += '"numeroParcela": ' + alltrim(str(nsequenciatitulo)) + ',' + CRLF
						narquivoJSON += '"aceite": ' + iif(xnaceite = 'N','false','true') + ',' + CRLF
						narquivoJSON += '"codigoProtesto": 1,' + CRLF
						narquivoJSON += '"numeroDiasProtesto": 30,' + CRLF
						narquivoJSON += '"pagador": {' + CRLF
						narquivoJSON += '"numeroCpfCnpj": "' + alltrim(rcnpjcpf) + '",' + CRLF
						narquivoJSON += '"nome": "' + substr(alltrim(rrazaosocial),1,50) + '",' + CRLF
                        narquivoJSON += '"endereco": "' + substr(alltrim(rendereco) + ' ' + alltrim(rnumero),1,40) + '",' + CRLF
                        narquivoJSON += '"bairro": "' + substr(alltrim(rbairro),1,30) + '",' + CRLF
                        narquivoJSON += '"cidade": "' + substr(alltrim(rcidade),1,40) + '",' + CRLF
                        narquivoJSON += '"cep": "' + alltrim(rcep) + '",' + CRLF
                        narquivoJSON += '"uf": "' + ruf 
                        if !empty(remail)
						   narquivoJSON += '",' + CRLF
						   narquivoJSON += '"email": [' + CRLF
                           narquivoJSON += '"' + alltrim(remail) + '"' + CRLF
						   narquivoJSON += ']' + CRLF
						else
						   narquivoJSON += '"' + CRLF
						endif
                        narquivoJSON += '},' + CRLF
                            
						narquivoJSON += '"beneficiarioFinal": {' + CRLF
                        narquivoJSON += '"numeroCpfCnpj": "' + aaloja + '",' + CRLF
                        
						//zempresa
						//znumerodocumentonacional
						narquivoJSON += '"nome": "' + alltrim(substr(abloja,1,50)) + '"' + CRLF
                        narquivoJSON += '},' + CRLF
						
						if !empty(zfinmultaatraso) .or. !empty(zfintaxajurosmensal)
						   narquivoJSON += '"mensagensInstrucao": {' + CRLF
						   narquivoJSON += '"tipoInstrucao": 1,' + CRLF
						   narquivoJSON += '"mensagens": [' + CRLF
						   if !empty(zfinmultaatraso)
						      narquivoJSON += '"Multa por atraso de ' + alltrim(transform(zfinmultaatraso,"@e 99,99")) + ' porcento'
						      if !empty(zfintaxajurosmensal)
						         narquivoJSON += '",' + CRLF
						      else
						   	     narquivoJSON += '"' + CRLF
						      endif
					       endif
						   if !empty(zfintaxajurosmensal)
						      zfintaxajurosdias = zfintaxajurosmensal / val(pega_ultimo_dia_numero(advenc))
						      zvalordiaJuros = ((avdup * zfintaxajurosdias)/100)
						      narquivoJSON += '"Juro de R$ ' + alltrim(transform(zvalordiaJuros,"@e 999,999.99")) + ' por dia de atraso."' + CRLF
					       endif
						   narquivoJSON += ']' + CRLF
						   narquivoJSON += '},' + CRLF
						endif
					    narquivoJSON += '"gerarPdf": true,' + CRLF
                        narquivoJSON += '"codigoCadastrarPIX": 0' + CRLF
                        narquivoJSON += '}' + CRLF
                        narquivoJSON += ']'
						
					    lh := 00
                        mdire = "json_envia.txt"
                        oPrn := TDosPrn():New(mdire)
                        oPrn:StartPage()
                        oPrn:lZeraBuffer:=.T.
                        oPrn:Say(lh,000,narquivoJSON)
                        oPrn:EndPage()
                        oPrn:End()
						
						cSignatureValue = ""
					    _nArquivo_enviar = "http://www.wsiscom.com.br/sicoob/envia_boleto_sicoob.php?Client_certificado_pem=" + _Client_certificado_pem +;
					                       "&Client_certificado_key=" + _Client_certificado_key +;
										   "&Client_senha="           + _Client_senha +;
					  	 				   "&Cliente_Token="          + _nret_access_token +;
					  	 				   "&Client_ID_envia="        + _Client_ID +;
					  	 				   "&Cliente_Field="          + narquivoJSON+;
										   "&Client_scope="           + _Client_scope 
					    
						//lh := 00
                        //mdire = "jsonEnviaboleto" + ".txt"
                        //oPrn := TDosPrn():New(mdire)
                        //oPrn:StartPage()
                        //oPrn:lZeraBuffer:=.T.
                        //oPrn:Say(lh,000,_nArquivo_enviar)
                        //oPrn:EndPage()
                        //oPrn:End()
					    
					    try
				           _oserver := CreateObject( "MSXML2.XMLHTTP" )
					       _oserver:Open( "GET",_nArquivo_enviar, .F. )
					       _oserver:SetRequestHeader("Content-Type","application/json")
	                       _oserver:Send(_nArquivo_enviar)
	                       WHILE _oserver:readyState != 4
	                             _oserver:WaitForResponse( 500 )
	                       end
					  	   cSignatureValue = _oserver:responseText
	                    catch
	                       msgstop("1 - Erro na geração do arquivo para o sicoob. www.wsiscom.com.br/sicoob/envia_boleto_sicoob.php","Erro Atenção")
					  	 exit
	                    end
					    if empty(cSignatureValue)
					       msgstop("2 - Sem resposta do envia_boleto.php.","Erro Atenção")
					       exit
					    endif
					    if cSignatureValue = nil
					       msgstop("3- Sem resposta do envia_boleto.php.","Erro Atenção")
					  	 exit
					    endif
					    
					    lh := 00
                        mdire = "jsonretornoboleto.txt"
                        oPrn := TDosPrn():New(mdire)
                        oPrn:StartPage()
                        oPrn:lZeraBuffer:=.T.
                        oPrn:Say(lh,000,cSignatureValue)
                        oPrn:EndPage()
                        oPrn:End()
						
                        //cSignatureValue := MemoRead("jsonretornoboleto.txt")
						
						nlocaliza_registro_1 := At( '{"resultado":[{"status":{"codigo":200}', cSignatureValue )
					    if !empty(nlocaliza_registro_1)
						   if substr(cSignatureValue,nlocaliza_registro_1,38) != '{"resultado":[{"status":{"codigo":200}'
						      msgstop(cSignatureValue,"Erro")
					          exit
                           endif							
					    else
						   msgstop(cSignatureValue,"Erro")
					       exit
					    endif

					    _nxgravarnumeroPego = ""
					    _nxcodigodebarras = ""
						_nxgravarlinhadigitavel = ""
						
					    nlocaliza_registro_1 := At( '"nossoNumero":', cSignatureValue )
						nposicaocolunaInicia := nlocaliza_registro_1 + len('"nossoNumero":')
						for ttqq = nposicaocolunaInicia to (nposicaocolunaInicia + 100)
						    if substr(cSignatureValue,nposicaocolunaInicia,1) = "0" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "1" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "2" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "3" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "4" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "5" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "6" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "7" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "8" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "9"
							   _nxgravarnumeroPego = _nxgravarnumeroPego + substr(cSignatureValue,nposicaocolunaInicia,1)
							else
						       exit
						    endif
							++nposicaocolunaInicia
						next
					    
					    nlocaliza_registro_1 := At( '"codigoBarras":"', cSignatureValue )
						nposicaocolunaInicia := nlocaliza_registro_1 + len('"codigoBarras":"')
						for ttqq = nposicaocolunaInicia to (nposicaocolunaInicia + 100)
						    if substr(cSignatureValue,nposicaocolunaInicia,1) = "0" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "1" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "2" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "3" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "4" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "5" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "6" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "7" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "8" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "9"
							   _nxcodigodebarras = _nxcodigodebarras + substr(cSignatureValue,nposicaocolunaInicia,1)
							else
						       exit
						    endif
							++nposicaocolunaInicia
						next

					    nlocaliza_registro_1 := At( '"linhaDigitavel":"', cSignatureValue )
						nposicaocolunaInicia := nlocaliza_registro_1 + len('"linhaDigitavel":"')
						for ttqq = nposicaocolunaInicia to (nposicaocolunaInicia + 100)
						    if substr(cSignatureValue,nposicaocolunaInicia,1) = "0" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "1" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "2" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "3" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "4" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "5" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "6" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "7" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "8" .or.;
						       substr(cSignatureValue,nposicaocolunaInicia,1) = "9"
							   _nxgravarlinhadigitavel = _nxgravarlinhadigitavel + substr(cSignatureValue,nposicaocolunaInicia,1)
							else
						       exit
						    endif
							++nposicaocolunaInicia
						next
						
					    cData = ""
						nlocaliza_registro_1 = At( '"pdfBoleto":"', cSignatureValue ) + len('"pdfBoleto":"')
						nlocaliza_registro_2 = At( '"}}]}', cSignatureValue )
						nlocaliza_registro_2 = nlocaliza_registro_2 - nlocaliza_registro_1
						cData = substr(cSignatureValue,nlocaliza_registro_1,nlocaliza_registro_2)
						cBase64 := HB_base64Decode(cData)
					    
						lh := 00
                        cFileSicoob = ""
						if objetboleto = "Nfe"
						   cFileSicoob = cFileSic + "sicoob_ret_NFe_" + nNumerodocumento_sicoob + "_" + alltrim(rfantasia) + "_" + alltrim(str(nsequenciatitulo)) + ".pdf"
						elseif objetboleto = "Ped"
						   cFileSicoob = cFileSic + "sicoob_ret_Ped_" + nNumerodocumento_sicoob + "_" + alltrim(rfantasia) + "_" + alltrim(str(nsequenciatitulo)) + ".pdf"
						endif
						oPrn := TDosPrn():New(cFileSicoob)
                        oPrn:StartPage()
                        oPrn:lZeraBuffer:=.T.
                        oPrn:Say(lh,000,cBase64)
                        oPrn:EndPage()
                        oPrn:End()
						
					 endif

SEGUE ABAIXO OS LINK'S PARA OS MANUAIS PARA TIRAR DÚVIDAS E OS E-MAIL'S PARA SUPORTE.

Manual: "https://documenter.getpostman.com/view/20565799/Uzs6yNhe#1bcf3134-afbd-4cf3-ba49-9cdf5ea2c224"

SUPORTE.

SICOOB BELO HORIZONTE (CECREMGE)
samuel.lopes@cecremge.org.br
gabriel.ferreira@cecremge.org.br

BRASILIA.
dev@sicoob.com.br

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...