Update dlocal_service.go

This commit is contained in:
lizandrogd
2025-05-08 21:30:45 -05:00
parent 81af8269d6
commit 023efbc16d
+26 -25
View File
@@ -357,57 +357,58 @@ func DeactivatePlan(cfg models.DlocalApi, planID string, subscriptionId string)
} }
func SeePlanes(cfg models.DlocalApi) ([]byte, error) { func SeePlanes(cfg models.DlocalApi) ([]byte, error) {
// Determinar la URL base según el modo // Validar modo y establecer valores
baseURL := cfg.UrlDev var baseURL, accessKeyID, accessKeySecret string
accessKeyID := cfg.AccessKeyIDdev
accessKeySecret := cfg.AccessKeySecretdev
if cfg.Modo == "prod" { switch cfg.Modo {
case "prod":
baseURL = cfg.UrlProd baseURL = cfg.UrlProd
accessKeyID = cfg.AccessKeyID accessKeyID = cfg.AccessKeyID
accessKeySecret = cfg.AccessKeySecret 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 // Construir la URL del endpoint
url := fmt.Sprintf("%s/v1/subscription/planes", baseURL) url := fmt.Sprintf("%s/v1/subscription/plan/all", baseURL)
// Construir el token de autorización
authToken := fmt.Sprintf("Bearer %s:%s", accessKeyID, accessKeySecret)
// Crear la solicitud HTTP // Crear la solicitud HTTP
req, err := http.NewRequest(http.MethodGet, url, nil) req, err := http.NewRequest(http.MethodGet, url, nil)
if err != 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") 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) req.Header.Set("Authorization", authToken)
// Configurar el cliente HTTP // Cliente HTTP con timeout
client := &http.Client{ client := &http.Client{Timeout: 30 * time.Second}
Timeout: 30 * time.Second,
}
// Ejecutar la solicitud // Ejecutar solicitud
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { 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() defer resp.Body.Close()
// Leer la respuesta // Leer respuesta
responseBody, err := io.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
if err != nil { 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 { 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 body, nil
return responseBody, nil
} }