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
- Detect the alphabet variant (StdEncoding vs RawURLEncoding, padded vs raw) and try alternatives
- 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)