// 一次性测试程序:打 /api/v1/laser/generate 验证 OpenAI 路径 // 用法:JWT_SECRET=xxx go run cmd/laser_test/main.go package main import ( "bytes" "encoding/json" "fmt" "io" "net/http" "os" "time" "github.com/golang-jwt/jwt/v5" ) type Claims struct { UserID int64 `json:"user_id"` StarID int64 `json:"star_id"` UpdatedAt int64 `json:"updated_at"` jwt.RegisteredClaims } func main() { jwtSecret := []byte(os.Getenv("JWT_SECRET")) if len(jwtSecret) == 0 { fmt.Println("FATAL: JWT_SECRET not set") os.Exit(1) } now := time.Now() claims := Claims{ UserID: 1001, StarID: 2002, UpdatedAt: now.Unix(), RegisteredClaims: jwt.RegisteredClaims{ IssuedAt: jwt.NewNumericDate(now), ExpiresAt: jwt.NewNumericDate(now.Add(1 * time.Hour)), }, } tok := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenStr, err := tok.SignedString(jwtSecret) if err != nil { fmt.Println("FATAL sign:", err) os.Exit(1) } fmt.Println("[1] JWT generated, len=", len(tokenStr)) // 用一个 OpenAI 能访问的公网图片作 cutout body := map[string]interface{}{ "cutout_url": "https://www.gstatic.com/webp/gallery3/1.png", "preset_codes": []string{"dream", "classic", "holoFull", "ice", "sunset"}, "render_configs": []map[string]interface{}{ {"preset_id": "dream", "bg_prompt": "holographic laser card, dream style, pink, bokeh, iridescent", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 15}}, {"preset_id": "classic", "bg_prompt": "holographic laser card, classic style, gold, premium, museum", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 20}}, {"preset_id": "holoFull", "bg_prompt": "holographic laser card, cyberpunk, neon, magenta, grid", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 25}}, {"preset_id": "ice", "bg_prompt": "holographic laser card, ice blue, frosted, chrome", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 30}}, {"preset_id": "sunset", "bg_prompt": "holographic laser card, warm orange sunset, silhouette", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 35}}, }, "user_prompt": "", } bodyBytes, _ := json.Marshal(body) url := "http://localhost:8080/api/v1/laser/generate" req, _ := http.NewRequest("POST", url, bytes.NewReader(bodyBytes)) req.Header.Set("Authorization", "Bearer "+tokenStr) req.Header.Set("Content-Type", "application/json") cli := &http.Client{Timeout: 300 * time.Second} fmt.Println("[2] POST", url, "timeout=300s") t0 := time.Now() resp, err := cli.Do(req) if err != nil { fmt.Println("FATAL request:", err) os.Exit(1) } defer resp.Body.Close() respBody, _ := io.ReadAll(resp.Body) elapsed := time.Since(t0) fmt.Printf("[3] HTTP %d (elapsed: %v)\n", resp.StatusCode, elapsed.Round(time.Second)) preview := string(respBody) if len(preview) > 3000 { preview = preview[:3000] + "...(truncated)" } fmt.Println("[4] Response body:") fmt.Println(preview) }