From a5876bcd108c5941b60e0427fa34d358cfed5266 Mon Sep 17 00:00:00 2001
From: Kamisato-Ayaka-233 <2627706725@qq.com>
Date: Sat, 17 Jun 2023 13:36:05 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E3=80=90F=E3=80=91=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E6=89=AB=E7=A0=81=E7=99=BB=E5=BD=95=E8=8E=B7=E5=8F=96Game=20To?=
=?UTF-8?q?ken=E7=9A=84=E6=96=B9=E6=B3=95=E4=B8=8E=E6=8E=A5=E5=8F=A3=20-?=
=?UTF-8?q?=20=E3=80=90F=E3=80=91=E8=A1=A5=E5=85=A8=E8=B4=A6=E5=8F=B7Cooki?=
=?UTF-8?q?e=E7=9A=84=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F=20-=20=E3=80=90F?=
=?UTF-8?q?=E3=80=91=E5=A2=9E=E5=8A=A0Cookie=E5=AD=97=E6=AE=B5=20-=20?=
=?UTF-8?q?=E3=80=90I=E3=80=91=E4=BF=AE=E6=94=B9=E8=AF=B7=E6=B1=82?=
=?UTF-8?q?=E5=A4=B4=E6=8F=8F=E8=BF=B0=20-=20=E3=80=90I=E3=80=91=E6=9B=B4?=
=?UTF-8?q?=E6=94=B9=E9=83=A8=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=AD=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E7=9A=84=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +
hoyolab/forum/info.md | 7 +-
hoyolab/login/qrcode.md | 166 +++++++++++
hoyolab/user/game_account_info.md | 4 +-
hoyolab/user/info.md | 135 +--------
hoyolab/user/token.md | 441 ++++++++++++++++++++++++++++++
other/authentication.md | 57 +++-
other/error_code.md | 13 +-
8 files changed, 680 insertions(+), 145 deletions(-)
create mode 100644 hoyolab/login/qrcode.md
create mode 100644 hoyolab/user/token.md
diff --git a/README.md b/README.md
index 8802f83..b52b44d 100644
--- a/README.md
+++ b/README.md
@@ -79,6 +79,7 @@
- [ ] [登录](hoyolab/login)
- [ ] [密码登录](hoyolab/login/password.md)
- [ ] [验证码登录](hoyolab/login/sms.md)
+ - [ ] [扫码登录](hoyolab/login/qrcode.md)
- [ ] [论坛](hoyolab/forum)
- [ ] [基本信息](hoyolab/forum/info.md)
- [ ] [文章](hoyolab/article)
@@ -87,6 +88,7 @@
- [ ] [公告](hoyolab/article/announcement.md)
- [ ] [用户](hoyolab/user)
- [ ] [用户信息](hoyolab/user/info.md)
+ - [ ] [用户Token](hoyolab/user/token.md)
- [ ] [用户游戏信息](hoyolab/user/game_account_info.md)
---
diff --git a/hoyolab/forum/info.md b/hoyolab/forum/info.md
index 114fb7d..8d2fe57 100644
--- a/hoyolab/forum/info.md
+++ b/hoyolab/forum/info.md
@@ -1,10 +1,13 @@
# 论坛基本信息
-- [获取论坛分区信息](#获取论坛分区信息)
+- [论坛](#论坛)
+ - [获取论坛分区信息](#获取论坛分区信息)
---
-## 获取论坛分区信息
+## 论坛
+
+### 获取论坛分区信息
_请求方式:GET_
diff --git a/hoyolab/login/qrcode.md b/hoyolab/login/qrcode.md
new file mode 100644
index 0000000..8bed0f7
--- /dev/null
+++ b/hoyolab/login/qrcode.md
@@ -0,0 +1,166 @@
+# 米游社扫码登录
+
+- [扫码登录](#扫码登录)
+ - [操作步骤](#qrcode-step)
+ - [生成二维码](#生成二维码)
+ - [查询二维码扫描状态](#查询二维码扫描状态)
+
+---
+
+## 扫码登录
+
+
操作步骤
+
+1. [生成二维码](#生成二维码),记录返回`data`对象的`url`,及其URL参数中的`ticket`字段(下称`ticket`)。
+1. 生成二维码供用户扫描。
+1. 不断[查询二维码扫描状态](#查询二维码扫描状态)。在用户扫描并确认登录后,获取`data`对象→`payload`对象的`raw`(即Game Token)。
+
+### 生成二维码
+
+**国服:**
+
+_请求方式:POST_
+
+`https://hk4e-sdk.mihoyo.com/hk4e_cn/combo/panda/qrcode/fetch`
+
+**JSON请求:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| app_id | str | 登录的应用标识符
1 《崩坏3》
2 《未定事件簿》
4 《原神》
5 平台应用
7 《崩坏学园2》
8 《崩坏:星穹铁道》
9 云游戏
10 3NNN
11 PJSH
12 《绝区零》
13 HYG | 没有用处,但是必须传递此参数 |
+| device | str | 设备ID | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码 | |
+| message | str | 返回消息 | |
+| data | obj | 二维码指向的URL | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| url | str | 二维码指向的URL | |
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "url": "https://user.mihoyo.com/qr_code_in_game.html?app_id=7\u0026app_name=%E5%B4%A9%E5%9D%8F%E5%AD%A6%E5%9B%AD2&bbs=false\u0026biz_key=bh2_cn\u0026expire=1687002702\u0026ticket=648706ceff80ee663845a13d"
+ }
+}
+```
+
+
+
+
+
+### 查询二维码扫描状态
+
+**国服:**
+
+_请求方式:POST_
+
+`https://hk4e-sdk.mihoyo.com/hk4e_cn/combo/panda/qrcode/query`
+
+**JSON请求:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| app_id | str | 登录的应用标识符,与生成二维码时传递的值必须相同 | |
+| device | str | 设备ID | 与生成二维码时传递的值相同 |
+| ticket | str | 生成二维码时从返回的URL的参数中,`ticket`字段的值 | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码
-106 二维码已过期 | |
+| message | str | 返回消息 | |
+| data | obj | 二维码状态 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| stat | str | 二维码状态
Init 未扫描
Scanned 已扫描
Confirmed 已确认 | |
+| payload | obj | 登录数据 | |
+
+`data`对象→`payload`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| proto | str | 当前的数据类型
Raw 无数据
Account 已确认 | |
+| raw | str | 确认登录之前为空字符串,之后则为米游社UID和Game Token,其中的`token`字段即为账号的Game Token | |
+| ext | str | | |
+
+
+查看示例
+
+```json
+// 未扫描
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "stat": "Init",
+ "payload": {
+ "proto": "Raw",
+ "raw": "",
+ "ext": ""
+ }
+ }
+}
+
+// 已扫描
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "stat": "Scanned",
+ "payload": {
+ "proto": "Raw",
+ "raw": "",
+ "ext": ""
+ }
+ }
+}
+
+// 已过期
+{
+ "data": null,
+ "message": "ExpiredCode",
+ "retcode": -106
+}
+
+// 已确认
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "stat": "Confirmed",
+ "payload": {
+ "proto": "Account",
+ "raw": "{\"uid\":\"317832114\",\"token\":\"***\"}",
+ "ext": ""
+ }
+ }
+}
+```
+
+
+
\ No newline at end of file
diff --git a/hoyolab/user/game_account_info.md b/hoyolab/user/game_account_info.md
index e7bf535..0045fea 100644
--- a/hoyolab/user/game_account_info.md
+++ b/hoyolab/user/game_account_info.md
@@ -1833,7 +1833,7 @@ _请求方式:GET_
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---- | ---- |
| authkey_ver | num | 1 | |
-| authkey | str | 验证密钥,用于标识游戏账号 | 获取方法:
1. 游戏内打开一次跃迁记录页面,然后在“游戏安装目录/StarRail_Data/webCaches/Cache/Cache_Data/data_2”,寻找类似“”的链接,该参数的值在其中
2. [通过Cookie获取用户`authkey`](hoyolab/user/info.md#通过cookie获取用户authkey) |
+| authkey | str | 验证密钥,用于标识游戏账号 | 获取方法:
1. 游戏内打开一次跃迁记录页面,然后在“游戏安装目录/StarRail_Data/webCaches/Cache/Cache_Data/data_2”,寻找类似“”的链接,该参数的值在其中
2. [通过Cookie获取用户`authkey`B](hoyolab/user/info.md#通过cookie获取用户authkeyb) |
| lang | str | 语言,即返回数据中抽到的项目名称
zh-cn zh 简体中文
zh-tw 繁体中文
en-us en 英语
ru-ru ru 俄语
ja-jp ja 日语
以及其它国际语言代码 | |
| size | num | 返回数据中的最大数据数量。最小为0,最大为20。若小于0,则返回0个数据;若大于20,则返回最大20个数据 | |
| end_id | num | 见下文的说明 | |
@@ -2042,7 +2042,7 @@ _请求方式:GET_
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---- | ---- |
| authkey_ver | num | 1 | |
-| authkey | str | 验证密钥,用于标识游戏账号 | 获取方法:
1. 游戏内打开一次跃迁记录页面,然后在“游戏安装目录/StarRail_Data/webCaches/Cache/Cache_Data/data_2”,寻找类似“”的链接,该参数的值在其中
2. [通过Cookie获取用户`authkey`](hoyolab/user/info.md#通过cookie获取用户authkey) |
+| authkey | str | 验证密钥,用于标识游戏账号 | 获取方法:
1. 游戏内打开一次跃迁记录页面,然后在“游戏安装目录/StarRail_Data/webCaches/Cache/Cache_Data/data_2”,寻找类似“”的链接,该参数的值在其中
2. [通过Cookie获取用户`authkey`B](hoyolab/user/info.md#通过cookie获取用户authkeyb) |
| lang | str | 语言,即返回数据中抽到的项目名称
zh-cn zh 简体中文
zh-tw 繁体中文
en-us en 英语
ru-ru ru 俄语
ja-jp ja 日语
以及其它国际语言代码 | |
| size | num | 返回数据中的最大数据数量。最小为0,最大为20。若小于0,则返回0个数据;若大于20,则返回最大20个数据 | |
| end_id | num | 见下文的说明 | |
diff --git a/hoyolab/user/info.md b/hoyolab/user/info.md
index 68d8d60..c664429 100644
--- a/hoyolab/user/info.md
+++ b/hoyolab/user/info.md
@@ -3,12 +3,12 @@
- [用户信息](#用户信息)
- [获取用户完整信息](#获取用户完整信息)
- [获取用户发布的文章](#获取用户发布的文章)
- - [通过Cookie获取用户`authkey`A](#通过cookie获取账号authkeya)
- - [通过Cookie获取用户`authkey`B](#通过cookie获取账号authkeyb)
---
-## 获取用户完整信息
+## 用户信息
+
+### 获取用户完整信息
**国服:**
@@ -317,7 +317,7 @@ _请求方式:GET_
-## 获取用户发布的文章
+### 获取用户发布的文章
**国服:**
@@ -340,130 +340,3 @@ _请求方式:GET_
| 字段 | 类型 | 内容 | 备注 |
| ---- | ---- | ---- | ---- |
-## 通过Cookie获取账号`authkey`A
-
-
-
-**国服:**
-
-_请求方式:POST_
-
-> _需要验证Cookie_
->
-> SToken
-
-`https://api-takumi.miyoushe.com/account/auth/api/genAuthKey`
-
-**JSON请求:**
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| game_biz | str | 米游社区域
bbs_cn 国服 | |
-
-**JSON返回:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| retcode | num | 返回码
1002 请求体的`game_biz`字段不正确 | |
-| message | str | 返回消息 | |
-| data | obj | `authkey`信息 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| sign_type | num | 2 | |
-| authkey_ver | num | 1 | |
-| authkey | str | `authkey`A | |
-
-
-查看示例
-
-```json
-{
- "retcode": 0,
- "message": "OK",
- "data": {
- "sign_type": 2,
- "authkey_ver": 1,
- "authkey": "..."
- }
-}
-```
-
-
-
-**国际服:**
-
-`未知`
-
-## 通过Cookie获取账号`authkey`B
-
-在请求例如获取用户的游戏抽卡记录等API时需要使用到`authkey`B。
-
-**国服:**
-
-_请求方式:POST_
-
-> _需要验证请求头_
->
-> `x-rpc-client_type`:`2`
->
-> LK`salt`
->
-> `DS1`
-
-> _需要验证Cookie_
->
-> SToken
-
-`https://api-takumi.miyoushe.com/binding/api/genAuthKey`
-
-
-**JSON请求:**
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| game_biz | str | 获取的`authkey`B的游戏
hk4e_cn 《原神》
hkrpg_cn 《崩坏:星穹铁道》
| |
-| game_uid | num | 游戏
-
-**JSON返回:**
-
-根对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| retcode | num | 返回码
1002 请求体的`game_biz`字段不正确 | |
-| message | str | 返回消息 | |
-| data | obj | `authkey`信息 | |
-
-`data`对象:
-
-| 字段 | 类型 | 内容 | 备注 |
-| ---- | ---- | ---- | ---- |
-| sign_type | num | 2 | |
-| authkey_ver | num | 1 | |
-| authkey | str | `authkey`B | |
-
-
-查看示例
-
-```json
-{
- "retcode": 0,
- "message": "OK",
- "data": {
- "sign_type": 2,
- "authkey_ver": 1,
- "authkey": "..."
- }
-}
-```
-
-
-
-**国际服:**
-
-`未知`
\ No newline at end of file
diff --git a/hoyolab/user/token.md b/hoyolab/user/token.md
new file mode 100644
index 0000000..69f84e4
--- /dev/null
+++ b/hoyolab/user/token.md
@@ -0,0 +1,441 @@
+# 用户Token
+
+- [Token](#token)
+ - [通过Login Ticket获取SToken和LToken](#通过login-ticket获取stoken和ltoken)
+ - [通过SToken获取Cookie Token](#通过stoken获取cookie-token)
+ - [通过Game Token获取SToken](#通过game-token获取stoken)
+ - [通过Game Token获取Cookie Token](#通过game-token获取cookie-token)
+ - [通过Cookie Token获取Hk4e Token](#通过cookie-token获取hk4e-token)
+- [Auth Key](#auth-key)
+ - [通过SToken获取用户Auth Key A](#通过stoken获取账号auth-key-a)
+ - [通过SToken获取用户Auth Key B](#通过stoken获取账号auth-key-b)
+
+---
+
+## Token
+
+### 通过Login Ticket获取SToken和LToken
+
+**国服:**
+
+_请求方式:GET_
+
+`https://api-takumi.mihoyo.com/auth/api/getMultiTokenByLoginTicket`
+
+**参数:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| token_types | num | 获取的Token的类型
1 仅SToken
2 仅LToken
3 SToken和LToken
4 无 | |
+| login_ticket | str | 有效的Login Ticket | |
+| uid | num | 对应的米游社账号UID | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码 | |
+| message | str | 返回消息 | |
+| data | obj | Token | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| list | arr | SToken或LToken | |
+
+`data`对象→`list`数组→对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| name | str | Token类型
ltoken LToken
stoken SToken | |
+| token | str | Token值 | |
+
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "list": [
+ {
+ "name": "stoken",
+ "token": "***"
+ },
+ {
+ "name": "ltoken",
+ "token": "***"
+ }
+ ]
+ }
+}
+```
+
+
+### 通过SToken获取Cookie Token
+
+**国服:**
+
+_请求方式:GET_
+
+> _需要验证Cookie_
+>
+> SToken
+
+`https://api-takumi.mihoyo.com/auth/api/getCookieAccountInfoBySToken`
+
+**参数:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| stoken | str | 有效的SToken | |
+| uid | num | 对应的米游社账号UID | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码 | |
+| message | str | 返回消息 | |
+| data | obj | Cookie Token和米游社UID | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| uid | str | 米游社UID | |
+| cookie_token | str | SToken对应账号的Cookie Token | |
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "uid": "***",
+ "cookie_token": "***"
+ }
+}
+```
+
+
+### 通过Game Token获取SToken
+
+**国服:**
+
+_请求方式:POST_
+
+> _需要验证请求头_
+>
+> `x-rpc-app_id`
+
+`https://api-takumi.mihoyo.com/account/ma-cn-session/app/getTokenByGameToken`
+
+**JSON请求:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| account_id | num | 对应的米游社账号UID | |
+| game_token | str | 有效的Game Token | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码
-3005 未传递`x-rpc-app_id`请求头 | |
+| message | str | 返回消息 | |
+| data | obj | 账号的Token与隐私信息 | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| token | obj | 米游社账号的SToken | |
+| user_info | obj | 米游社账号敏感信息 | 一些个人信息已被隐藏 |
+| realname_info | | 待调查 | |
+| need_realperson | bool | 待调查 | |
+
+`data`对象→`token`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| token_type | num | 1 | |
+| token | str | 账号的SToken | |
+
+`data`对象→`user_info`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| aid | str | 米游社UID | |
+| mid | str | 米游社MiHoYo ID | |
+| account_name | str | 空字符串 | |
+| email | str | 被隐藏的账号的绑定邮箱 | |
+| is_email_verify | num | 绑定邮箱是否通过验证 | |
+| area_code | str | 账号绑定手机的区号 | |
+| mobile | str | 被隐藏的账号的绑定手机 | |
+| safe_area_code | str | 账号安全手机的区号 | 历史遗留字段,现在安全手机的功能已经被移除了 |
+| safe_mobile | str | 被隐藏的账号安全手机 | 历史遗留字段,现在安全手机的功能已经被移除了 |
+| realname | str | 被隐藏的账号实名认证姓名 | |
+| identity_code | str | 被隐藏的账号实名认证身份证号 | |
+| rebind_area_code | str | 账号的换绑手机号的区号 | |
+| rebind_mobile | str | 被隐藏的账号的换绑手机号 | |
+| rebind_mobile_time | str | 0 | |
+| links | arr | 待调查 | |
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "token": {
+ "token_type": 1,
+ "token": "***"
+ },
+ "user_info": {
+ "aid": "*******",
+ "mid": "*******",
+ "account_name": "",
+ "email": "*********",
+ "is_email_verify": 1,
+ "area_code": "+86",
+ "mobile": "***********",
+ "safe_area_code": "",
+ "safe_mobile": "",
+ "realname": "***",
+ "identity_code": "******************",
+ "rebind_area_code": "",
+ "rebind_mobile": "",
+ "rebind_mobile_time": "0",
+ "links": []
+ },
+ "realname_info": null,
+ "need_realperson": false
+ }
+}
+```
+
+
+### 通过Game Token获取Cookie Token
+
+**国服:**
+
+_请求方式:GET_
+
+`https://api-takumi.mihoyo.com/auth/api/getCookieAccountInfoByGameToken`
+
+**参数:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| account_id | num | 对应的米游社账号UID | |
+| game_token | str | 有效的Game Token | |
+
+**JSON返回:**
+
+根对象:
+
+与[通过SToken获取Cookie Token](#通过stoken获取cookie-token)→根对象的结构相同。
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "uid": "317832114",
+ "cookie_token": "O4ljtFwozX0UzHg29PDffnEBQPMYxmzcEJpe5Fgz"
+ }
+}
+```
+
+
+### 通过Cookie Token获取Hk4e Token
+
+**国服:**
+
+_请求方式:POST_
+
+> _需要验证Cookie_
+>
+> Account ID:`account_id`
+>
+> Cookie Token:`cookie_token`
+
+`https://api-takumi.mihoyo.com/auth/api/getCookieAccountInfoByGameToken`
+
+**参数:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| account_id | num | 对应的米游社账号UID | |
+
+
+**JSON返回:**
+
+根对象:
+
+
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "game": "hk4e",
+ "region": "cn_gf01",
+ "game_uid": "222681079",
+ "game_biz": "hk4e_cn",
+ "level": 58,
+ "nickname": "※青衫入雨※",
+ "region_name": "天空岛"
+ }
+}
+```
+
+
+## Auth Key
+
+### 通过SToken获取账号Auth Key A
+
+**国服:**
+
+_请求方式:POST_
+
+> _需要验证Cookie_
+>
+> SToken
+
+`https://api-takumi.miyoushe.com/account/auth/api/genAuthKey`
+
+**JSON请求:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| game_biz | str | 米游社区域
bbs_cn 国服 | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码
1002 请求体的`game_biz`字段不正确 | |
+| message | str | 返回消息 | |
+| data | obj | Auth Key A | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| sign_type | num | 2 | |
+| authkey_ver | num | 1 | |
+| authkey | str | Auth Key A | |
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "sign_type": 2,
+ "authkey_ver": 1,
+ "authkey": "***"
+ }
+}
+```
+
+
+
+**国际服:**
+
+`未知`
+
+### 通过SToken获取账号Auth Key B
+
+用例:获取用户的游戏抽卡记录等API需要使用到Auth Key B。
+
+**国服:**
+
+_请求方式:POST_
+
+> _需要验证请求头_
+>
+> `x-rpc-client_type`:`2`
+>
+> LK`salt`
+>
+> `DS1`
+
+> _需要验证Cookie_
+>
+> SToken
+
+`https://api-takumi.miyoushe.com/binding/api/genAuthKey`
+
+
+**JSON请求:**
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| game_biz | str | 获取的`authkey`B的游戏
hk4e_cn 《原神》国服
hkrpg_cn 《崩坏:星穹铁道》国服
| |
+| game_uid | num | 用户的游戏UID | |
+
+**JSON返回:**
+
+根对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| retcode | num | 返回码
1002 请求体的`game_biz`字段不正确 | |
+| message | str | 返回消息 | |
+| data | obj | Auth Key B | |
+
+`data`对象:
+
+| 字段 | 类型 | 内容 | 备注 |
+| ---- | ---- | ---- | ---- |
+| sign_type | num | 2 | |
+| authkey_ver | num | 1 | |
+| authkey | str | Auth Key B | |
+
+
+查看示例
+
+```json
+{
+ "retcode": 0,
+ "message": "OK",
+ "data": {
+ "sign_type": 2,
+ "authkey_ver": 1,
+ "authkey": "***"
+ }
+}
+```
+
+
+
+**国际服:**
+
+`未知`
\ No newline at end of file
diff --git a/other/authentication.md b/other/authentication.md
index c02a66f..48750b9 100644
--- a/other/authentication.md
+++ b/other/authentication.md
@@ -15,9 +15,9 @@
大多数API需要验证的请求头:`x-rpc-app_version`、`x-rpc-client_type`、`x-rpc-device_id`、`X-Requested-With`、`Origin`、`Referer`、`Host`、`DS`、`User-Agent`。
-少数API才需要验证的额外的请求头:`x-rpc-device_fp`、`x-rpc-challenge`。
+少数API才需要验证的额外的请求头:`x-rpc-device_fp`、`x-rpc-challenge`、`x-rpc-app_id`。
-可选请求头:`x-rpc-device_name`、`x-rpc-device_model`、`x-rpc-sys_version`、`x-rpc-channel`。
+可选请求头:`x-rpc-device_name`、`x-rpc-device_model`、`x-rpc-sys_version`、`x-rpc-channel`、`x-rpc-game_biz`。
**说明:**
@@ -63,7 +63,7 @@ _注:以下列表只是说明该请求头的值通常在哪些平台出现,
#### `x-rpc-device_name`
-手机厂商和手机型号,例如小米11青春版则为`Xiaomi M2101K9C`。
+手机厂商和手机型号,例如`Xiaomi M2101K9C`。
#### `x-rpc-device_model`
@@ -73,6 +73,10 @@ _注:以下列表只是说明该请求头的值通常在哪些平台出现,
发送POST请求至`https://public-data-api.mihoyo.com/device-fp/api/getFp`以获得。
+#### `x-rpc-app_id`
+
+一般为`bll8iq97cem8`。
+
#### `x-rpc-device_id`
设备ID,由使用的设备决定。
@@ -276,6 +280,24 @@ const final = `${t},${r},${ds}` // 最终结果
若API无需登录账号,就不需要设置Cookie。
+**API的Cookie标识格式**
+
+像SToken,只有1种字段值,或是像LToken,2种字段值都被兼容,则只标识Cookie名。
+
+```markdown
+> _需要验证Cookie_
+>
+> SToken
+```
+
+若像Account ID,有多种字段值,将会在其之后标识需要的字段名。若有多个兼容的字段名,使用“、”分隔。
+
+```markdown
+> _需要验证Cookie_
+>
+> Account ID:`account_id`
+```
+
### 米游社
需要哪些Cookie取决于以下因素:
@@ -288,7 +310,7 @@ const final = `${t},${r},${ds}` // 最终结果
即`ltoken_v2`和`ltoken`。
-`ltoken_v2`多用于查询用户的游戏账号信息。
+`ltoken_v2`和`ltoken`多用于查询用户的游戏账号信息。
必须与[`ltmid_v2`](#mihoyo-id)一起使用。
@@ -300,22 +322,41 @@ const final = `${t},${r},${ds}` // 最终结果
必须与[`mid`](#mihoyo-id)一起使用。
-#### Mihoyo ID
+#### MiHoYo ID
分为与[LToken](#ltoken)一起使用的`ltmid_v2`,和与[SToken](#stoken)一起使用的`mid`
`ltmid_v2`和`mid`的值是相同,对应一个账号。
+#### Account ID
+
+有`account_id_v2`、`account_id`、`login_uid`、`ltuid`和`stuid`。
+
+UID即米游社UID。这个Cookie不是必须传递的。
+
#### Login Ticket
即`login_ticket`。
-`login_ticket`是米游社的登录凭证,隔一段时间刷新。作用未知。
+`login_ticket`是米游社的登录凭证,可用于获取[SToken](#stoken)和[LToken](#ltoken)。隔一段时间刷新。
+
+通常在[米游社通行证](https://user.mihoyo.com/)中登录获得。
#### Cookie Token
-即`cookie_token_v2`。
+分为`cookie_token`和`cookie_token_v2`。
-`cookie_token_v2`隔一段时间刷新。作用未知。
+`cookie_token`与`cookie_token_v2`的值不相同。Cookie Token用于签到福利。
+#### Game Token
+
+即`game_token`。
+
+`game_token`为游戏登录凭证,通常用于扫码登录后获取其它Token。
+
+#### Hk4e Token
+
+即`e_hk4e_token`。
+
+`e_hk4e_token`为米游社账号的《原神》账号标识,通常可以在《原神》的网页活动中见到。
diff --git a/other/error_code.md b/other/error_code.md
index 895e321..6cafc26 100644
--- a/other/error_code.md
+++ b/other/error_code.md
@@ -15,11 +15,20 @@
| 1008 | 用户信息不匹配 | 传递的参数不正确
(例如获取用户游戏账号信息的`role_id`为无效UID) |
| 10001 | Please login | 该API需要验证Cookie
请查看[绕过检测与鉴权](other/authentication.md#cookie) |
| 1034 | | 请求遇到验证码 |
-
### `api-takumi.miyoushe.com`
| 错误码 | 消息 | 原因 |
| ----- | ---- | ---- |
| -10001 | invalid request | 该API需要验证请求头,请求头的一些字段缺失或错误
请查看[绕过检测与鉴权](other/authentication.md) |
| -502 | Something went wrong...please retry later | 传递的参数错误 |
-| -100 | 登录失效,请重新登录 | Cookie失效或不正确 |
\ No newline at end of file
+| -100 | 登录失效,请重新登录 | Cookie失效或不正确 |
+| 1034 | | 请求遇到验证码 |
+
+### `api-takumi.mihoyo.com`
+
+| 错误码 | 消息 | 原因 |
+| ----- | ---- | ---- |
+| -502 | Something went wrong...please retry later | 传递的参数错误 |
+| -101 | 参数错误 | 传递的参数缺失或错误 |
+| -100 | 登录失效,请重新登录
-100 | Cookie失效或不正确 |
+| 1000 | 参数错误 | 传递的参数缺失或错误 |
\ No newline at end of file