fish2018/pansou · error

解码Payload失败

Error message

解码Payload失败: %w

What it means

Wrapped decode error in susu's decodeJWTURL (plugin/susu/susu.go:523): the JWT's middle segment could not be base64-URL decoded, meaning the token is malformed despite having three dot-separated parts. Used to extract the real download URL from the token.

Solutions

  1. Detect the alphabet variant (StdEncoding vs RawURLEncoding, padded vs raw) and try alternatives
  2. Reject the token per-link rather than aborting the whole search
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at plugin/susu/susu.go:523 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of fish2018/pansou@beaa561337 (2026-09-07). Data as JSON: /api/errors/b0a7e6570a590e02. Report an issue: GitHub.

Appendix: source

Thrown at plugin/susu/susu.go:523

	if strings.HasPrefix(jwtToken, "http://") || strings.HasPrefix(jwtToken, "https://") {
		return jwtToken, nil
	}

	// 检查缓存
	if cachedURL, ok := jwtDecodeCache.Load(jwtToken); ok {
		return cachedURL.(string), nil
	}

	// 分割JWT
	parts := strings.Split(jwtToken, ".")
	if len(parts) != 3 {
		return "", fmt.Errorf("无效的JWT格式")
	}

	// 解码Payload
	payload, err := base64.RawURLEncoding.DecodeString(parts[1])
	if err != nil {
		return "", fmt.Errorf("解码Payload失败: %w", err)
	}

	// 解析JSON
	var payloadData struct {
		Data struct {
			URL string `json:"url"`
		} `json:"data"`
	}
	if err := json.Unmarshal(payload, &payloadData); err != nil {
		return "", fmt.Errorf("解析Payload JSON失败: %w", err)
	}
	if strings.TrimSpace(payloadData.Data.URL) == "" {
		return "", fmt.Errorf("JWT Payload中没有链接")
	}

	// 缓存结果
	jwtDecodeCache.Store(jwtToken, payloadData.Data.URL)

View on GitHub (pinned to beaa561337)