diff --git a/pkg/services/dlocal_service.go b/pkg/services/dlocal_service.go index b4b16c1..639144a 100644 --- a/pkg/services/dlocal_service.go +++ b/pkg/services/dlocal_service.go @@ -357,57 +357,58 @@ func DeactivatePlan(cfg models.DlocalApi, planID string, subscriptionId string) } func SeePlanes(cfg models.DlocalApi) ([]byte, error) { - // Determinar la URL base según el modo - baseURL := cfg.UrlDev - accessKeyID := cfg.AccessKeyIDdev - accessKeySecret := cfg.AccessKeySecretdev + // Validar modo y establecer valores + var baseURL, accessKeyID, accessKeySecret string - if cfg.Modo == "prod" { + switch cfg.Modo { + case "prod": baseURL = cfg.UrlProd accessKeyID = cfg.AccessKeyID accessKeySecret = cfg.AccessKeySecret + default: + baseURL = cfg.UrlDev + accessKeyID = cfg.AccessKeyIDdev + accessKeySecret = cfg.AccessKeySecretdev } + if baseURL == "" || accessKeyID == "" || accessKeySecret == "" { + return nil, fmt.Errorf("configuración incompleta para el entorno %q", cfg.Modo) + } - // Construir la URL completa para el endpoint - url := fmt.Sprintf("%s/v1/subscription/planes", baseURL) - - // Construir el token de autorización - authToken := fmt.Sprintf("Bearer %s:%s", accessKeyID, accessKeySecret) + // Construir la URL del endpoint + url := fmt.Sprintf("%s/v1/subscription/plan/all", baseURL) // Crear la solicitud HTTP req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { - return nil, fmt.Errorf("error al crear la solicitud: %v", err) + return nil, fmt.Errorf("error al crear la solicitud: %w", err) } - // Agregar los encabezados a la solicitud + // Establecer encabezados req.Header.Set("Content-Type", "application/json") + // En DLocal se usa generalmente Basic Auth codificado en base64, pero si realmente usan Bearer personalizado: + authToken := fmt.Sprintf("Bearer %s:%s", accessKeyID, accessKeySecret) req.Header.Set("Authorization", authToken) - // Configurar el cliente HTTP - client := &http.Client{ - Timeout: 30 * time.Second, - } + // Cliente HTTP con timeout + client := &http.Client{Timeout: 30 * time.Second} - // Ejecutar la solicitud + // Ejecutar solicitud resp, err := client.Do(req) if err != nil { - return nil, fmt.Errorf("error al enviar la solicitud: %v", err) + return nil, fmt.Errorf("error al enviar la solicitud: %w", err) } defer resp.Body.Close() - // Leer la respuesta - responseBody, err := io.ReadAll(resp.Body) + // Leer respuesta + body, err := io.ReadAll(resp.Body) if err != nil { - return nil, fmt.Errorf("error al leer la respuesta: %v", err) + return nil, fmt.Errorf("error al leer la respuesta: %w", err) } - // Si la respuesta no es exitosa, devolver un error if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("error en la respuesta de DLocal (%d): %s", resp.StatusCode, string(responseBody)) + return nil, fmt.Errorf("respuesta no exitosa (%d): %s", resp.StatusCode, string(body)) } - // Devolver la respuesta exitosa - return responseBody, nil + return body, nil }