feat(commerce): Hyperswitch LIVE_MODE configuration
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s

- config: HyperswitchLiveMode (HYPERSWITCH_LIVE_MODE)
- routes_marketplace: warn when production + LiveMode=false
- docker-compose.prod: HYPERSWITCH_LIVE_MODE env var
This commit is contained in:
senke 2026-02-23 19:56:52 +01:00
parent 30bc31f3a6
commit cc9fbf4f24
3 changed files with 18 additions and 8 deletions

View file

@ -164,6 +164,7 @@ services:
- HYPERSWITCH_API_KEY=${HYPERSWITCH_API_KEY:-}
- HYPERSWITCH_WEBHOOK_SECRET=${HYPERSWITCH_WEBHOOK_SECRET:-}
- HYPERSWITCH_ENABLED=${HYPERSWITCH_ENABLED:-false}
- HYPERSWITCH_LIVE_MODE=${HYPERSWITCH_LIVE_MODE:-false}
- CHECKOUT_SUCCESS_URL=${CHECKOUT_SUCCESS_URL:-https://veza.fr/purchases}
- ENABLE_CLAMAV=true
- CLAMAV_REQUIRED=true
@ -216,6 +217,7 @@ services:
- HYPERSWITCH_API_KEY=${HYPERSWITCH_API_KEY:-}
- HYPERSWITCH_WEBHOOK_SECRET=${HYPERSWITCH_WEBHOOK_SECRET:-}
- HYPERSWITCH_ENABLED=${HYPERSWITCH_ENABLED:-false}
- HYPERSWITCH_LIVE_MODE=${HYPERSWITCH_LIVE_MODE:-false}
- CHECKOUT_SUCCESS_URL=${CHECKOUT_SUCCESS_URL:-https://veza.fr/purchases}
- ENABLE_CLAMAV=true
- CLAMAV_REQUIRED=true

View file

@ -3,7 +3,9 @@ package api
import (
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"go.uber.org/zap"
"veza-backend-api/internal/config"
"veza-backend-api/internal/core/marketplace"
"veza-backend-api/internal/handlers"
"veza-backend-api/internal/services"
@ -20,6 +22,10 @@ func (r *APIRouter) setupMarketplaceRoutes(router *gin.RouterGroup) {
storageService := services.NewTrackStorageService(uploadDir, false, r.logger)
opts := []marketplace.ServiceOption{}
if r.config.HyperswitchEnabled && r.config.HyperswitchAPIKey != "" && r.config.HyperswitchURL != "" {
if r.config.SentryEnvironment == config.EnvProduction && !r.config.HyperswitchLiveMode {
r.logger.Warn("Hyperswitch is enabled in production but HYPERSWITCH_LIVE_MODE=false; using test keys",
zap.String("hint", "Set HYPERSWITCH_LIVE_MODE=true and use live API keys for production payments"))
}
hsClient := hyperswitch.NewClient(r.config.HyperswitchURL, r.config.HyperswitchAPIKey)
hsProvider := hyperswitch.NewProvider(hsClient)
opts = append(opts,

View file

@ -134,11 +134,12 @@ type Config struct {
CookiePath string // Cookie path (généralement "/")
// Hyperswitch Payment (Phase 2)
HyperswitchEnabled bool // Enable Hyperswitch payments (default false in dev)
HyperswitchURL string // Hyperswitch router URL (e.g. http://hyperswitch:8080)
HyperswitchAPIKey string // API key for Hyperswitch
HyperswitchEnabled bool // Enable Hyperswitch payments (default false in dev)
HyperswitchLiveMode bool // Use live API keys (HYPERSWITCH_LIVE_MODE). If false in production, test keys are used.
HyperswitchURL string // Hyperswitch router URL (e.g. http://hyperswitch:8080)
HyperswitchAPIKey string // API key for Hyperswitch
HyperswitchWebhookSecret string // Webhook signature verification secret
CheckoutSuccessURL string // URL to redirect after successful payment (e.g. /checkout/success)
CheckoutSuccessURL string // URL to redirect after successful payment (e.g. /checkout/success)
// Email & Jobs
EmailSender *email.SMTPEmailSender
@ -344,11 +345,12 @@ func NewConfig() (*Config, error) {
CookiePath: getEnv("COOKIE_PATH", "/"),
// Hyperswitch Payment Configuration
HyperswitchEnabled: getEnvBool("HYPERSWITCH_ENABLED", false),
HyperswitchURL: getEnv("HYPERSWITCH_URL", "http://localhost:18081"),
HyperswitchAPIKey: getEnv("HYPERSWITCH_API_KEY", ""),
HyperswitchEnabled: getEnvBool("HYPERSWITCH_ENABLED", false),
HyperswitchLiveMode: getEnvBool("HYPERSWITCH_LIVE_MODE", false),
HyperswitchURL: getEnv("HYPERSWITCH_URL", "http://localhost:18081"),
HyperswitchAPIKey: getEnv("HYPERSWITCH_API_KEY", ""),
HyperswitchWebhookSecret: getEnv("HYPERSWITCH_WEBHOOK_SECRET", ""),
CheckoutSuccessURL: getEnv("CHECKOUT_SUCCESS_URL", ""),
CheckoutSuccessURL: getEnv("CHECKOUT_SUCCESS_URL", ""),
// Log Files Configuration
// En développement, utiliser ./logs si /var/log n'est pas accessible