Facturacion/daemonService/internal/soap/enviarSOAPRequest.go
2025-05-17 11:36:26 -04:00

60 lines
1.3 KiB
Go

package soap
import (
"bytes"
"daemonService/internal/models"
"fmt"
"io"
"net/http"
"time"
)
// func (s *ListaLeyendasFacturaService) enviarSOAPRequest(soapReq string) (*http.Response, []byte, error) {
func EnviarSOAPRequest(s *models.ServiceModel, soapReq string) (*http.Response, []byte, error) {
var resp *http.Response
var bodyBytes []byte
var err error
backoff := time.Second
for i := 0; i < s.SOAPRetries; i++ {
if i > 0 {
time.Sleep(backoff)
backoff *= 2
}
req, err := http.NewRequest("POST", s.SOAPEndpoint, bytes.NewBufferString(soapReq))
if err != nil {
continue
}
req.Header.Set("Content-Type", "text/xml; charset=utf-8")
//req.Header.Set("apikey", s.APIKey)
req.Header.Set(s.KeyToken, s.ValueToken)
// Crea un transporte que ignore la configuración de proxy
transport := &http.Transport{
Proxy: nil, // Esto desactiva el uso de proxy
}
client := &http.Client{
Transport: transport,
Timeout: 30 * time.Second,
}
resp, err = client.Do(req)
if err != nil || resp.StatusCode != http.StatusOK {
continue
}
bodyBytes, err = io.ReadAll(resp.Body)
if err != nil {
resp.Body.Close()
continue
}
return resp, bodyBytes, nil
}
return nil, nil, fmt.Errorf("fallo después de %d reintentos: %v", s.SOAPRetries, err)
}