从失效到重生:MihoyoBBSTools中stoken版本升级全解决方案

从失效到重生:MihoyoBBSTools中stoken版本升级全解决方案

【免费下载链接】MihoyoBBSTools Womsxd/AutoMihoyoBBS,米游社相关脚本 【免费下载链接】MihoyoBBSTools 项目地址: https://gitcode.com/gh_mirrors/mi/MihoyoBBSTools

你是否还在为MihoyoBBSTools中stoken失效导致签到失败而烦恼?本文将深入剖析stoken版本升级问题的根源,提供从错误诊断到永久修复的完整指南,让你的米游社自动签到系统重获新生。

读完本文你将获得:

  • 快速定位stoken失效的5种诊断方法
  • v1与v2版本stoken的核心差异解析
  • 3种环境下的stoken升级实施方案(本地/Python环境、Docker容器、青龙面板)
  • 自动化维护stoken的高级技巧
  • 常见错误代码的应急处理策略

stoken版本升级问题的技术根源

stoken的核心作用与工作原理

stoken(Session Token)是米游社API认证体系中的核心凭证,用于维持用户会话状态和授权第三方应用访问账号资源。在MihoyoBBSTools中,stoken主要承担两大功能:

mermaid

在setting.py中定义的关键API端点揭示了stoken的工作流程:

# 获取CookieToken的核心接口
bbs_get_cookie_token_by_stoken = f"{web_api}/auth/api/getCookieAccountInfoBySToken"

v1与v2版本stoken的技术差异

米哈游在2023年下半年对stoken进行了重大升级,推出了v2版本凭证。两个版本的核心差异如下表所示:

特性v1版本stokenv2版本stoken
格式特征纯字符串,无固定前缀以"v2_"开头的加密字符串
安全机制仅依赖stuid+stoken强制要求mid参数
有效期7-30天动态调整,最长90天
错误码统一返回-100细分错误码(10001/10002等)
兼容性旧API支持需要调用新版验证接口

在login.py中可以清晰看到对v2版本的特殊处理:

def require_mid() -> bool:
    """判断是否需要mid参数"""
    if config.config["account"]["stoken"].startswith("v2_"):
        return True
    return False

版本升级失败的典型表现

当stoken版本不兼容时,系统会表现出以下特征:

  1. 签到流程中断:在main.py中,当检测到stoken异常时会触发错误标记:

    # main.py 61-73行
    raise_stoken = False
    if config.config["account"]["stoken"] == "StokenError":
        raise_stoken = True
    elif not config.config["account"]["stoken"].startswith("v2_"):
        # 检查是否为v2版本
        raise_stoken = True
    
  2. 日志错误信息:在mihoyobbs.py中会记录明确的错误类型:

    # mihoyobbs.py 190行
    log.error("stoken 已失效,请重新抓取 cookie")
    config.clear_stoken()
    raise StokenError('Stoken expires')
    
  3. 配置文件标记:config.py中会将失效的stoken标记为"StokenError":

    # config.py 178行
    config["account"]["stoken"] = "StokenError"
    

系统诊断:定位stoken问题的5种方法

1. 配置文件检查法

检查config/config.yaml中的stoken格式:

account:
  stoken: "v2_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # 有效v2版本示例
  # stoken: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # 无效v1版本示例
  mid: "xxxxxxxxxxxxxxxx"  # v2版本必须填写

关键检查点:

  • stoken是否以"v2_"开头
  • mid参数是否存在且不为空
  • stuid是否与stoken匹配

2. 日志深度分析法

查看应用运行日志,重点关注以下关键字:

# 严重错误 - 需要立即处理
ERROR: stoken 已失效,请重新抓取 cookie
ERROR: v2_stoken 需要 mid 参数

# 警告信息 - 潜在问题
WARNING: 获取任务列表失败,你的 cookie 可能已过期
WARNING: 米游社签到模块未启用

3. API接口测试法

使用curl命令直接测试stoken有效性:

# 测试stoken有效性
curl "https://api-takumi.mihoyo.com/auth/api/getCookieAccountInfoBySToken" \
  -H "Cookie: stuid=12345678; stoken=v2_xxxxxxxxxxxxxxxxxxxx; mid=xxxxxxxxxx"

正常返回应包含:

{
  "retcode": 0,
  "data": {
    "cookie_token": "xxxxxxxxxxxx",
    "account_id": 12345678
  }
}

4. 代码调试法

在login.py中添加调试日志,追踪stoken处理流程:

# login.py 70-74行 添加调试信息
log.debug(f"stoken: {config.config['account']['stoken']}")
log.debug(f"stuid: {config.config['account']['stuid']}")
log.debug(f"mid: {config.config['account']['mid']}")
header["cookie"] = get_stoken_cookie()
log.debug(f"构造的cookie: {header['cookie']}")

5. 环境变量检测法

对于Docker或青龙面板用户,检查相关环境变量:

# Docker环境
docker exec -it mihoyobbstools env | grep AutoMihoyoBBS

# 青龙面板
echo $AutoMihoyoBBS_config_multi

全环境升级指南:从手动修复到自动维护

方案一:本地Python环境升级

手动升级步骤
  1. 获取新版stoken与mid

    • 访问米游社官网并登录
    • 打开浏览器开发者工具(F12)
    • 在Application > Cookies中查找:
      • stoken_v2stoken(以v2_开头)
      • midaccount_mid_v2
  2. 更新配置文件

    # config/config.yaml
    account:
      stuid: "123456789"       # 保持不变
      stoken: "v2_xxxxxxxxxx"  # 填入新获取的v2版本stoken
      mid: "xxxxxxxxxxxxxx"    # 填入新获取的mid值
    
  3. 验证升级结果

    python main.py --debug  # 启用调试模式运行
    
自动化升级脚本

创建upgrade_stoken.py自动处理升级:

import re
import config
import login
from loghelper import log

def upgrade_stoken():
    # 检查当前stoken版本
    if config.config["account"]["stoken"].startswith("v2_"):
        log.info("stoken已是v2版本,无需升级")
        return True
        
    # 尝试从cookie中提取mid
    mid = login.get_mid()
    if mid:
        config.config["account"]["mid"] = mid
        log.info(f"自动提取mid: {mid}")
        
    # 提示用户输入新的v2 stoken
    new_stoken = input("请输入新的v2版本stoken: ")
    if not new_stoken.startswith("v2_"):
        log.error("无效的v2 stoken格式")
        return False
        
    config.config["account"]["stoken"] = new_stoken
    config.save_config()
    log.info("stoken升级成功")
    return True

if __name__ == "__main__":
    config.load_config()
    upgrade_stoken()

方案二:Docker容器环境升级

快速修复方法
  1. 进入运行中的容器

    docker exec -it mihoyobbstools /bin/bash
    
  2. 编辑配置文件

    vi /app/config/config.yaml  # 根据实际路径调整
    
  3. 重启容器使配置生效

    docker restart mihoyobbstools
    
持久化升级方案

使用Docker volumes实现配置持久化,避免容器重建导致的stoken丢失:

# docker-compose.yml 片段
services:
  mihoyobbstools:
    volumes:
      - ./config:/app/config  # 将本地config目录挂载到容器内
    environment:
      - AutoMihoyoBBS_config_path=/app/config  # 指定配置文件路径

方案三:青龙面板环境升级

环境变量配置法

在青龙面板中添加以下环境变量:

变量名值示例说明
AutoMihoyoBBS_stokenv2_xxxxxxxxxxv2版本stoken
AutoMihoyoBBS_midxxxxxxxxxxxx对应的mid参数
AutoMihoyoBBS_stuid123456789用户ID
脚本自动更新法

修改青龙面板任务脚本,添加stoken自动更新逻辑:

# ql_main.py 头部添加
import os
import config

# 从环境变量更新stoken
if os.getenv("AutoMihoyoBBS_stoken"):
    config.config["account"]["stoken"] = os.getenv("AutoMihoyoBBS_stoken")
    config.config["account"]["mid"] = os.getenv("AutoMihoyoBBS_mid", "")
    config.save_config()

高级维护:构建stoken自动管理系统

基于Cookie的stoken自动刷新机制

通过定期解析浏览器Cookie实现stoken自动更新:

# 新建 auto_refresh_stoken.py
import re
import time
import config
import requests
from loghelper import log

def extract_stoken_from_cookie(cookie_str):
    """从cookie字符串中提取v2 stoken和mid"""
    stoken_match = re.search(r'stoken=v2_(.*?)(;|$)', cookie_str)
    mid_match = re.search(r'(mid|account_mid_v2)=(.*?)(;|$)', cookie_str)
    
    return {
        "stoken": f"v2_{stoken_match.group(1)}" if stoken_match else None,
        "mid": mid_match.group(2) if mid_match else None
    }

def auto_refresh_stoken():
    """定期从浏览器获取最新cookie并更新stoken"""
    while True:
        try:
            # 这里需要根据实际情况修改获取cookie的方式
            # 示例:通过浏览器扩展API获取cookie
            response = requests.get("http://localhost:8080/get_cookie")
            cookie_data = extract_stoken_from_cookie(response.text)
            
            if cookie_data["stoken"] and cookie_data["stoken"] != config.config["account"]["stoken"]:
                config.config["account"]["stoken"] = cookie_data["stoken"]
                if cookie_data["mid"]:
                    config.config["account"]["mid"] = cookie_data["mid"]
                config.save_config()
                log.info("stoken已自动更新")
        except Exception as e:
            log.error(f"自动更新stoken失败: {str(e)}")
        
        time.sleep(86400)  # 每24小时检查一次

if __name__ == "__main__":
    config.load_config()
    auto_refresh_stoken()

stoken健康监控系统

实现一个简单的stoken健康检查服务:

# 新建 stoken_monitor.py
import time
import requests
import config
import setting
from loghelper import log

def check_stoken_health():
    """检查stoken是否健康"""
    headers = {
        "cookie": f"stuid={config.config['account']['stuid']};stoken={config.config['account']['stoken']};mid={config.config['account']['mid']}"
    }
    
    try:
        response = requests.get(
            setting.bbs_get_cookie_token_by_stoken,
            headers=headers,
            timeout=10
        )
        
        if response.json().get("retcode") == 0:
            return True
        log.error(f"stoken健康检查失败: {response.text}")
        return False
    except Exception as e:
        log.error(f"stoken健康检查异常: {str(e)}")
        return False

def monitor_stoken():
    """持续监控stoken状态"""
    while True:
        if not check_stoken_health():
            log.warning("stoken已失效,尝试自动修复...")
            # 这里可以集成自动修复逻辑
        time.sleep(3600)  # 每小时检查一次

if __name__ == "__main__":
    config.load_config()
    monitor_stoken()

错误代码速查与解决方案

常见错误代码解析

错误代码含义解决方案
10001stoken格式错误确认stoken以v2_开头,检查是否包含多余字符
10002mid参数缺失在config.yaml中添加mid字段并填写正确值
-100会话已过期重新获取stoken和cookie,确保时间同步
403权限验证失败检查stuid、stoken、mid三者是否匹配
1034需要验证码手动运行一次签到流程完成验证

应急处理流程

当遇到stoken相关错误时,可按以下流程快速恢复:

mermaid

总结与未来展望

stoken版本升级问题本质上是米游社API安全机制升级与第三方工具兼容性之间的矛盾。通过本文介绍的方法,你不仅可以解决当前的stoken失效问题,还能构建起一套可持续的stoken管理系统。

未来,随着米游社API安全机制的不断升级,我们可以期待MihoyoBBSTools引入更多自动化方案:

mermaid

记住,维护stoken有效性不仅关乎自动签到的稳定性,也是保护账号安全的重要措施。建议定期更新stoken并监控其健康状态,确保你的MihoyoBBSTools始终处于最佳运行状态。

如果本文对你解决stoken升级问题有帮助,请点赞收藏,并关注项目更新以获取最新的stoken管理方案。如有其他问题,欢迎在项目Issues中提出,我们将持续改进stoken管理机制。


【免费下载链接】MihoyoBBSTools Womsxd/AutoMihoyoBBS,米游社相关脚本 【免费下载链接】MihoyoBBSTools 项目地址: https://gitcode.com/gh_mirrors/mi/MihoyoBBSTools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值