fish2018/pansou · error
链接令牌无效
Error message
链接令牌无效: %s
What it means
Semantic guard on the decoded ting77 token payload: HTTP was 200 and JSON parsed, but code != 0 or token/ts fields are empty (a 429-coded body maps to errRateLimited before this). The server explicitly declined to issue a usable link token.
Solutions
- Treat as server-side refusal: retry later with backoff, not immediately
- Log the returned code to map known refusals
- Drop the entry if refusals persist
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at plugin/ting77/ting77.go:327 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/0c69927c7315481a.
Report an issue: GitHub.
Appendix: source
Thrown at plugin/ting77/ting77.go:327
body, err := io.ReadAll(io.LimitReader(resp.Body, 512<<10))
if err != nil {
return "", "", err
}
if resp.StatusCode != http.StatusOK {
if resp.StatusCode == http.StatusTooManyRequests {
return "", "", errRateLimited
}
return "", "", fmt.Errorf("令牌接口返回状态码 %d", resp.StatusCode)
}
var token tokenResponse
if err := json.Unmarshal(body, &token); err != nil {
return "", "", fmt.Errorf("解析链接令牌失败: %w", err)
}
if token.Code != 0 || token.Data.Token == "" || token.Data.TS == "" {
if token.Code == http.StatusTooManyRequests {
return "", "", errRateLimited
}
return "", "", fmt.Errorf("链接令牌无效: %s", token.Message)
}
return token.Data.Token, token.Data.TS, nil
}
func setRequestHeaders(req *http.Request, referer, accept string) {
req.Header.Set("User-Agent", browserUserAgent)
req.Header.Set("Accept", accept)
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
req.Header.Set("Cache-Control", "no-cache")
if referer != "" {
req.Header.Set("Referer", referer)
}
}
func normalizeSiteCloudType(value string) string {
switch strings.ToLower(strings.TrimSpace(value)) {
case "quark":
return "quark"View on GitHub (pinned to beaa561337)