前言
作为一个电脑手机都(曾经)非常垃圾的玩家,云原神真的是个好东西。mihomo 推出的云原神注册送了5个小时,之后每天登录云原神就可以送15分钟,最多10小时。但上学之后没办法天天登录,所以就需要一个能够自动签到的方法。
链接在结尾!
需求
- 能够通过给定的令牌之类通过 API 实现自动签到
实现过程
首先,通过 HTTP 抓包获取签到的 API,我们可以知道签到的 API 是:
GET /hk4e_cg_cn/wallet/wallet/get HTTP/1.1
Host: api-cloudgame.mihoyo.com
Accept: */*
Referer: https://app.mihoyo.com
x-rpc-app_id: 1953443910
x-rpc-app_version: 3.4.1
x-rpc-channel: mihoyo
x-rpc-client_type: 3
x-rpc-combo_token: bi=hk4e_cn;ai=4;ci=1;ct=xxxxxxxx;oi=xxxxxxxx;si=xxxxxxxx
x-rpc-device_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
x-rpc-device_model: winnt/windows
x-rpc-device_name: DESKTOP-8KS1MEE
x-rpc-preview: 0
x-rpc-sys_version: 10.0.19045
x-rpc-vendor_id: 2
Accept-Encoding: gzip, deflate
接着,我们来分析一下它的请求头。因为并不是所有的字段都是固定的。
Host: 定值 api-cloudgame.mihoyo.com
Accept: 定值 */*
Referer: 定值 https://app.mihoyo.com
Accept-Encoding: 定值 gzip, deflate
x-rpc-app_id: 定值 1953443910
x-rpc-app_version: 不是定值,随着版本更新而变化(这里有点特殊,后文会讲)
x-rpc-channel: 不是定值,iOS为appstore,安卓与PC都为mihoyo
x-rpc-client_type: 不是定值,iOS为1,安卓为2,PC为3
x-rpc-combo_token: 不是定值,这就是身份认证的令牌了
x-rpc-device_id: 不是定值,应是每个设备有一个在mihomo唯一的ID
x-rpc-device_model: 不是定值,为设备型号
x-rpc-device_name: 不是定值
x-rpc-preview: 定值 0
x-rpc-sys_version: 不是定值,为操作系统版本
x-rpc-vendor_id: 不确定是否为定值 2
难点:我们可以发现,版本号理论上是可以自动获取的,而此处与原审的版本号并不一直与原神相同,虽然实测版本号错误目前没发现会有什么问题,但为了保险起见,还是需要找一个可靠的 API 来获取云原神的版本号。
我曾经尝试过多个 API,第一个是https://api-cloudgame-static.mihoyo.com/hk4e_cg_cn/gamer/api/getFunctionShieldNew?client_type=1
,可一段时间后不好使了。
第二个 API 是通过其他开源的项目找到的原神启动器检查版本的 API,地址是https://sdk-static.mihoyo.com/hk4e_cn/mdk/launcher/api/resource?key=eYd89JmJ&launcher_id=18
,不过云原神在3.4发布了第二个版本后,此处并没有更新为最新的3.4.1
。
最后一个 API 也是官方云原神检查更新的 API,是通过电脑端抓包得到的。地址为https://api-takumi.mihoyo.com/ptolemaios/api/getLatestRelease?app_id=1953443910&app_version=3.3.0&channel=mihoyo
,相信有读者已经发现问题了。其中的app_version
字段我在此处写了3.3.0
,原因是如果将这个参数省略或者改为当前的云原神版本号,返回体中将不包含任何有用的信息,就会像下面这样。
{
"retcode":0,
"message":"OK",
"data":{
"strategy_id":0,
"update_type":0,
"dialog_num":0,
"dialog_period_type":0,
"dialog_period":0,
"dialog_title":"",
"dialog_content":"",
"package_name":"",
"package_url":"",
"package_size":"0",
"has_update":false,
"package_version":"",
"package_md5":"",
"user_defined":""
}
}
因此,必须将app_version
设置成以前的版本。那么问题又来了,所有以前的版本都行吗?以后是不是还要手动更新版本号呢?
经过一番手动的尝试,发现只有3.0.0
之后的版本号是可以正常返回的,内容如下。
{
"retcode":0,
"message":"OK",
"data":{
"strategy_id":1149,
"update_type":2,
"dialog_num":0,
"dialog_period_type":0,
"dialog_period":0,
"dialog_title":"版本已更新",
"dialog_content":"《云·原神》已更新,请点击下方按钮下载最新版本",
"package_name":"yun_yuanshen_3.4.1.594_release_prod_setup_20230118153428.exe",
"package_url":"https://cloudgame-static.mihoyo.com/app/pc/yun_yuanshen_3.4.1.594_release_prod_setup_20230118153428.exe",
"package_size":"203404928",
"has_update":true,
"package_version":"3.4.1",
"package_md5":"2902ec1923cb394db1c9b972d498fdf7",
"user_defined":"{}"
}
}
那么到这里,大功告成,完结撒花!
代码由于某些原因就不贴在这里了,大家可以去这些地方看看~
Gitea(开发平台,最新)|GitHub(求★Star★)|GitLab|极狐GitLab(GitLab国内版)
我自己现在就在用这小玩意儿,有需要的话,我可以……
懂的都懂
发表回复
要发表评论,您必须先登录。