{"record":{"id":"79b2cfe090967923","repo":"fish2018/pansou","slug":"credential-action-id","errorCode":null,"errorMessage":"未能验证credential_action_id","messagePattern":"未能验证credential_action_id","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/panyq/panyq.go","lineNumber":478,"sourceCode":"\t\t\t\tcredIDChan <- actionID\n\t\t\t}\n\t\t}(i, id)\n\t}\n\t\n\t// 等待所有验证完成\n\twg.Wait()\n\tclose(credIDChan)\n\t\n\t// 从通道中获取第一个有效ID\n\tvar credentialIDFound bool\n\tfor id := range credIDChan {\n\t\tfinalIDs[ActionIDKeys[0]] = id\n\t\tcredentialIDFound = true\n\t\tbreak\n\t}\n\t\n\tif !credentialIDFound {\n\t\treturn nil, fmt.Errorf(\"未能验证credential_action_id\")\n\t}\n\t\n\t// 获取测试凭证用于后续验证\n\ttestCreds, err := p.getCredentials(\"test\", finalIDs[ActionIDKeys[0]], p.client)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"获取测试凭证失败: %w\", err)\n\t}\n\t\n\tif DebugLog {\n\t\tfmt.Printf(\"panyq: 获取到测试凭证: sign=%.10s..., hash=%.10s..., sha=%.10s...\\n\", \n\t\t\ttestCreds.Sign, testCreds.Hash, testCreds.Sha)\n\t}\n\t\n\t// 从剩余ID中排除已使用的ID\n\tremainingIDs := make([]string, 0, len(potentialIDs)-1)\n\tfor _, id := range potentialIDs {\n\t\tif id != finalIDs[ActionIDKeys[0]] {\n\t\t\tremainingIDs = append(remainingIDs, id)","sourceCodeStart":460,"sourceCodeEnd":496,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/panyq/panyq.go#L460-L496","documentation":"During Action ID discovery none of the potential IDs validated as the credential_action_id: for every candidate, the credential-verification probe failed, so credentialIDFound stayed false. The plugin cannot identify which candidate ID is used to mint search credentials.","triggerScenarios":"Running discoverActionIDs (via doSearch or getOrDiscoverActionIDs) when none of the extracted candidate IDs is accepted by the credential endpoint — upstream changed which ID is used, all candidates are stale, or the verification call itself failed for each candidate.","commonSituations":"Upstream rotated/renamed its embedded Action IDs; site deployed a new obfuscation scheme; transient network errors caused every verification attempt to fail; IP blocked by the site.","solutions":["Clear the action ID cache and re-run discovery so a fresh candidate set is extracted.","Enable DebugLog and watch each candidate's verification result to see whether probes errored or merely failed validation.","curl the credential endpoint manually with a candidate ID to confirm the expected response shape.","Update the plugin if the upstream ID scheme changed."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"ids, err := plugin.DiscoverActionIDs()\nif err != nil && strings.Contains(err.Error(), \"未能验证credential_action_id\") {\n    time.Sleep(retryDelay)\n    ids, err = plugin.DiscoverActionIDs() // fresh candidate set\n}","preventionTips":["Clear the ID cache before re-discovery","Add jitter/backoff between candidate probes","Track upstream deploys that rotate IDs","Keep the extraction logic current"],"tags":["action-id","verification","upstream","plugin"],"backgroundTag":"unexpected-api-response-shape","analyzedSha":"beaa56133755a548ebc51b090b3816e2ae044aa6","analyzedAt":"2026-09-07T00:31:18.025Z","contentChangedAt":"2026-09-07T00:31:18.025Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}