github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/caixa/request.go (about)

     1  package caixa
     2  
     3  const responseFromCaixa = `
     4  <?xml version="1.0" encoding="utf-8"?>
     5  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     6      <soapenv:Body>
     7          <manutencaocobrancabancaria:SERVICO_SAIDA xmlns:manutencaocobrancabancaria="http://caixa.gov.br/sibar/manutencao_cobranca_bancaria/boleto/externo" xmlns:sibar_base="http://caixa.gov.br/sibar">
     8              <sibar_base:HEADER>
     9                  <OPERACAO>{{operation}}</OPERACAO>
    10                  <DATA_HORA>{{datetime}}</DATA_HORA>
    11              </sibar_base:HEADER>
    12              <DADOS>                
    13                  <CONTROLE_NEGOCIAL>
    14                      <ORIGEM_RETORNO>SIGCB</ORIGEM_RETORNO>
    15                      <COD_RETORNO>{{returnCode}}</COD_RETORNO>
    16                      <MENSAGENS>
    17                          <RETORNO>{{returnMessage}}</RETORNO>
    18                      </MENSAGENS>
    19                  </CONTROLE_NEGOCIAL>
    20                  <INCLUI_BOLETO>
    21                      <EXCECAO>{{exception}}</EXCECAO>
    22                      <CODIGO_BARRAS>{{barcodeNumber}}</CODIGO_BARRAS>
    23                      <LINHA_DIGITAVEL>{{digitableLine}}</LINHA_DIGITAVEL>
    24                      <NOSSO_NUMERO>{{ourNumber}}</NOSSO_NUMERO>
    25                      <URL>{{url}}</URL>
    26                  </INCLUI_BOLETO>
    27              </DADOS>
    28          </manutencaocobrancabancaria:SERVICO_SAIDA>
    29      </soapenv:Body>
    30  </soapenv:Envelope>
    31  `
    32  
    33  const requestToCaixa = `
    34  
    35  ## SOAPAction:IncluiBoleto
    36  ## Content-Type:text/xml
    37  
    38  <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ext="http://caixa.gov.br/sibar/manutencao_cobranca_bancaria/boleto/externo" xmlns:sib="http://caixa.gov.br/sibar">
    39  <soapenv:Body>
    40  <ext:SERVICO_ENTRADA >
    41           <sib:HEADER>
    42              <VERSAO>1.0</VERSAO>
    43              <AUTENTICACAO>{{unscape .Authentication.AuthorizationToken}}</AUTENTICACAO>
    44              <USUARIO_SERVICO>{{caixaEnv}}</USUARIO_SERVICO>
    45              <OPERACAO>INCLUI_BOLETO</OPERACAO>
    46              <SISTEMA_ORIGEM>SIGCB</SISTEMA_ORIGEM>
    47              <UNIDADE>{{.Agreement.Agency}}</UNIDADE>
    48              <DATA_HORA>{{fullDate today}}</DATA_HORA>
    49              </sib:HEADER>
    50           <DADOS>
    51              <INCLUI_BOLETO>
    52                <CODIGO_BENEFICIARIO>{{padLeft (toString .Agreement.AgreementNumber) "0" 7}}</CODIGO_BENEFICIARIO>
    53                 <TITULO>
    54                    <NOSSO_NUMERO>{{toString .Title.OurNumber}}</NOSSO_NUMERO>
    55                    <NUMERO_DOCUMENTO>{{truncateOnly .Title.DocumentNumber 11}}</NUMERO_DOCUMENTO>
    56                    <DATA_VENCIMENTO>{{enDate .Title.ExpireDateTime "-"}}</DATA_VENCIMENTO>
    57                    <VALOR>{{toFloatStr .Title.AmountInCents}}</VALOR>
    58                    <TIPO_ESPECIE>{{.Title.BoletoTypeCode}}</TIPO_ESPECIE>
    59                    <FLAG_ACEITE>S</FLAG_ACEITE>
    60                    <DATA_EMISSAO>{{enDate today "-"}}</DATA_EMISSAO>
    61                    <JUROS_MORA>
    62              {{if .Title.Fees.HasInterest}}
    63                 {{if .Title.Fees.Interest.HasAmountPerDayInCents}}
    64                       <TIPO>VALOR_POR_DIA</TIPO>
    65                       <DATA>{{enDate (datePlusDays .Title.ExpireDateTime .Title.Fees.Interest.DaysAfterExpirationDate) "-"}}</DATA>
    66                       <VALOR>{{toFloatStr .Title.Fees.Interest.AmountPerDayInCents}}</VALOR>
    67                 {{else}}
    68                       <TIPO>TAXA_MENSAL</TIPO>
    69                       <DATA>{{enDate (datePlusDays .Title.ExpireDateTime .Title.Fees.Interest.DaysAfterExpirationDate) "-"}}</DATA>
    70                       <PERCENTUAL>{{float64ToString "%.2f" .Title.Fees.Interest.PercentagePerMonth}}</PERCENTUAL>
    71                 {{end}}
    72              {{else}}
    73                 <TIPO>ISENTO</TIPO>
    74                 <VALOR>0</VALOR>
    75              {{end}}
    76                    </JUROS_MORA>
    77                    <VALOR_ABATIMENTO>0</VALOR_ABATIMENTO>
    78                    <POS_VENCIMENTO>
    79                       <ACAO>DEVOLVER</ACAO>
    80                    {{if .Title.HasRules}}       
    81                       <NUMERO_DIAS>{{.Title.Rules.MaxDaysToPayPastDue}}</NUMERO_DIAS>
    82                    {{else}}
    83                       <NUMERO_DIAS>0</NUMERO_DIAS>
    84                    {{end}}
    85                    </POS_VENCIMENTO>
    86                    <CODIGO_MOEDA>9</CODIGO_MOEDA>
    87                    <PAGADOR>
    88                    {{if eq .Buyer.Document.Type "CPF"}}
    89  					 	   <CPF>{{.Buyer.Document.Number}}</CPF>
    90                       <NOME>{{truncateOnly (clearStringCaixa .Buyer.Name) 40}}</NOME>
    91                    {{else}}
    92  					 	   <CNPJ>{{.Buyer.Document.Number}}</CNPJ>
    93                       <RAZAO_SOCIAL>{{truncateOnly (clearStringCaixa .Buyer.Name) 40}}</RAZAO_SOCIAL>
    94  					   {{end}}
    95                    {{if .Buyer.HasAddress}}
    96                       <ENDERECO>
    97                          <LOGRADOURO>{{truncateOnly (joinSpace (clearStringCaixa .Buyer.Address.Street) (clearStringCaixa .Buyer.Address.Number) (clearStringCaixa .Buyer.Address.Complement)) 40}}</LOGRADOURO>
    98                          <BAIRRO>{{truncateOnly (clearStringCaixa .Buyer.Address.District) 15}}</BAIRRO>
    99                          <CIDADE>{{truncateOnly (clearStringCaixa .Buyer.Address.City) 15}}</CIDADE>
   100                          <UF>{{truncateOnly (clearStringCaixa .Buyer.Address.StateCode) 2}}</UF>
   101                          <CEP>{{truncateOnly (replace (clearStringCaixa .Buyer.Address.ZipCode) "-" "") 8}}</CEP>
   102                       </ENDERECO>
   103                    {{end}}
   104                    </PAGADOR>
   105                    {{if .HasPayeeGuarantor}}
   106                       <SACADOR_AVALISTA>
   107                          {{if eq .PayeeGuarantor.Document.Type "CPF"}}
   108                                <CPF>{{.PayeeGuarantor.Document.Number}}</CPF> 
   109                                <NOME>{{truncateOnly (clearStringCaixa (.PayeeGuarantor.Name)) 40}}</NOME> 
   110                          {{else}}
   111                                <CNPJ>{{.PayeeGuarantor.Document.Number}}</CNPJ>
   112                                <RAZAO_SOCIAL>{{truncateOnly (clearStringCaixa (.PayeeGuarantor.Name)) 40}}</RAZAO_SOCIAL>
   113                          {{end}}
   114                       </SACADOR_AVALISTA>
   115                    {{end}}
   116                    {{if .Title.Fees.HasFine}}                 
   117                       <MULTA>
   118                          <DATA>{{enDate (datePlusDaysConsideringZeroAsStart .Title.ExpireDateTime .Title.Fees.Fine.DaysAfterExpirationDate) "-"}}</DATA> 
   119                       {{if .Title.Fees.Fine.HasAmountInCents}}
   120                          <VALOR>{{toFloatStr .Title.Fees.Fine.AmountInCents}}</VALOR>
   121                       {{else}}
   122                          <PERCENTUAL>{{float64ToString "%.2f" .Title.Fees.Fine.PercentageOnTotal}}</PERCENTUAL>
   123                       {{end}}
   124                       </MULTA>
   125                    {{end}}
   126                    <FICHA_COMPENSACAO>
   127                       <MENSAGENS>
   128                          <MENSAGEM>{{truncateOnly (clearStringCaixa .Title.Instructions) 40}}</MENSAGEM>
   129                       </MENSAGENS>
   130                    </FICHA_COMPENSACAO>
   131                    <RECIBO_PAGADOR>
   132                       <MENSAGENS>
   133                          <MENSAGEM>{{truncateOnly (clearStringCaixa .Title.Instructions) 40}}</MENSAGEM>
   134                       </MENSAGENS>
   135                    </RECIBO_PAGADOR>
   136                 {{if .Title.HasRules}} 
   137                    <PAGAMENTO>
   138                       <QUANTIDADE_PERMITIDA>1</QUANTIDADE_PERMITIDA>   
   139                    {{if .Title.Rules.AcceptDivergentAmount}}
   140                       <TIPO>ACEITA_QUALQUER_VALOR</TIPO>
   141                    {{else}}
   142                       <TIPO>NAO_ACEITA_VALOR_DIVERGENTE</TIPO>
   143                    {{end}}
   144                       <VALOR_MINIMO>0.00</VALOR_MINIMO>
   145                       <VALOR_MAXIMO>0.00</VALOR_MAXIMO>
   146                    </PAGAMENTO>
   147                 {{end}}                 
   148                 </TITULO>
   149              </INCLUI_BOLETO>
   150             </DADOS>
   151        </ext:SERVICO_ENTRADA>
   152  </soapenv:Body>
   153  </soapenv:Envelope>
   154  `
   155  
   156  func getRequestCaixa() string {
   157  	return requestToCaixa
   158  }
   159  
   160  func getResponseCaixa() string {
   161  	return responseFromCaixa
   162  }