返回提交历史
Modified
login/login_action/QR.md
+263
-63
XFEstudio/bilibili-API-collect
update APIdoc【QR登录】
60847a8
代码差异
1 个文件
+263
-63
@@ -1,36 +1,246 @@
1
1
# 二维码登录
2
2
3
web端流程&逻辑:
3
<img src="/imgs/2233login.png"/>
4
4
5
1. 获取`二维码内容url`以及`密钥`,以`二维码内容url`生成二维码,等待手机客户端扫描
6
2. 以`密钥`作为参数进行POST
7
3. if `code` == `true` goto `6` else goto 4(是否已经确认)
8
4. if `data` == `-4` goto `2` else goto 5(是否已经扫描)
9
5. if `data` == `-5` goto `3` & 提示`已扫描` else goto `1`&提示`二维码超时或错误`(密钥是否有效)
10
6. 成功后会自动配置cookie 如需登录游戏分站则访问`data`.`url`中的url
5
- [扫码登录流程(伪代码)](#扫码登录流程(伪代码))
6
- [web端扫码登录](#web端扫码登录)
7
- [申请二维码 (web端)](#申请二维码(web端))
8
- [扫码登录(web端)](#扫码登录(web端))
9
- [web端扫码登录-旧版](#web端扫码登录-旧版)
10
- [申请二维码(web端-旧版)](#申请二维码(web端-旧版))
11
- [扫码登录(web端-旧版)](#扫码登录(web端-旧版))
12
- [TV端扫码登录](#TV端扫码登录)
13
- [申请二维码(TV端)](#申请二维码(TV端))
14
- [扫码登录(TV端)](#扫码登录(TV端))
11
15
12
TV端流程&逻辑:
16
---
13
17
14
1. 获取`二维码内容url`以及`密钥`,以`二维码内容url`生成二维码,等待手机客户端扫描
15
2. 以`密钥`作为参数进行POST
16
3. if `code` == `0` 提示`扫码成功`并存储`access_key`于`refersh_key` else goto `4`
17
4. if `code` == `86039` 提示`未扫描`&goto `2` else goto `5`
18
5. if `code` == `86038` 提示`二维码超时或错误`&goto `1`
18
## 扫码登录流程(伪代码)
19
20
```python
21
token, url = 申请二维码()
22
生成二维码(url) # 等待客户端扫码
23
while True:
24
status, cookie = 扫码登录(token)
25
match status:
26
case 未扫描:
27
continue
28
case 二维码超时 | 二维码失效:
29
提示('二维码失效或超时') # 需要用户重新操作
30
break
31
case 已扫描未确认:
32
提示('扫描成功')
33
case 登录成功:
34
提示('扫描成功')
35
存储cookie(cookie)
36
SSO登录页面跳转()
37
break
38
```
19
39
20
<img src="/imgs/2233login.png"/>
40
## web端扫码登录
21
41
42
### 申请二维码(web端)
22
43
44
> http://passport.bilibili.com/x/passport-login/web/qrcode/generate
23
45
46
*请求方式:GET*
24
47
25
- [申请二维码URL及扫码密钥(web端)](#申请二维码URL及扫码密钥(web端))
26
- [使用扫码登录(web端)](#使用扫码登录(web端))
27
- [申请二维码URL及扫码密钥(TV端)](#申请二维码URL及扫码密钥(TV端))
28
- [使用扫码登录(TV端)](#使用扫码登录(TV端))
48
密钥超时为180秒
29
49
50
**json回复:**
51
52
根对象:
53
54
| 字段 | 类型 | 内容 | 备注 |
55
| ------- | ---- | -------- | ------- |
56
| code | num | 返回值 | 0:成功 |
57
| message | str | 错误信息 | |
58
| ttl | num | 1 | |
59
| data | obj | 信息本体 | |
60
61
`data`对象:
62
63
| 字段 | 类型 | 内容 | 备注 |
64
| ---------- | ---- | ------------------------- | ---------- |
65
| url | str | 二维码内容 (登录页面 url) | |
66
| qrcode_key | str | 扫码登录秘钥 | 恒为32字符 |
67
68
**示例:**
69
70
`url`中的值生成二维码,等待手机客户端扫描,并将`qrcode_key`保存备用
71
72
```shell
73
curl 'http://passport.bilibili.com/x/passport-login/web/qrcode/generate'
74
```
75
76
<details>
77
<summary>查看响应示例:</summary>
78
79
80
```json
81
{
82
"code": 0,
83
"message": "0",
84
"ttl": 1,
85
"data": {
86
"url": "https://passport.bilibili.com/h5-app/passport/login/scan?navhide=1\u0026qrcode_key=8587cf8106a0b863c46d6bab913537f6\u0026from=",
87
"qrcode_key": "8587cf8106a0b863c46d6bab913537f6"
88
}
89
}
90
```
91
92
</details>
93
94
### 扫码登录(web端)
30
95
31
## 申请二维码URL及扫码密钥(web端)
96
> http://passport.bilibili.com/x/passport-login/web/qrcode/poll
97
98
*请求方式:GET*
99
100
密钥超时为180秒
101
102
验证登录成功后会进行设置以下cookie项:
103
104
`DedeUserID` `DedeUserID__ckMd5` `SESSDATA` `bili_jct`
105
106
**url参数:**
107
108
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
109
| ---------- | ---- | ------------ | ------ | ---- |
110
| qrcode_key | str | 扫码登录秘钥 | 非必要 | |
111
112
**json回复:**
113
114
根对象:
115
116
| 字段 | 类型 | 内容 | 备注 |
117
| ------- | ---- | -------- | ------- |
118
| code | num | 返回值 | 0:成功 |
119
| message | str | 错误信息 | |
120
| data | obj | 信息本体 | |
121
122
data 对象:
123
124
| 字段 | 类型 | 内容 | 备注 |
125
| ------------- | ---- | ------------------------------------------------------------ | ---------------------------------- |
126
| url | str | 游戏分站跨域登录 url | 未登录为空 |
127
| refresh_token | str | 刷新`refresh_token` | 未登录为空 |
128
| timestamp | num | 登录时间 | 未登录为`0`<br />时间戳 单位为毫秒 |
129
| code | num | 0:扫码登录成功<br />86038:二维码已失效<br />86090:二维码已扫码未确认<br />86101:未扫码 | |
130
| message | str | 扫码状态信息 | |
131
132
**示例:**
133
134
使用扫描秘钥`c3bd5286a2b40a822f5f60e9bf3f602e`登录
135
136
```shell
137
curl -G "http://passport.bilibili.com/x/passport-login/web/qrcode/poll"\
138
--data-urlencode 'qrcode_key=c3bd5286a2b40a822f5f60e9bf3f602e' \
139
-c 'cookie.txt'
140
```
141
142
当密钥正确时但未扫描时`message`为`86101`
143
144
<details>
145
<summary>查看响应示例:</summary>
146
147
148
```json
149
{
150
"code": 0,
151
"message": "0",
152
"ttl": 1,
153
"data": {
154
"url": "",
155
"refresh_token": "",
156
"timestamp": 0,
157
"code": 86101,
158
"message": "未扫码"
159
}
160
}
161
```
162
163
</details>
164
165
扫描成功但手机端未确认时`message`为`86038`
166
167
<details>
168
<summary>查看响应示例:</summary>
169
170
171
```json
172
{
173
"code": 0,
174
"message": "0",
175
"ttl": 1,
176
"data": {
177
"url": "",
178
"refresh_token": "",
179
"timestamp": 0,
180
"code": 86090,
181
"message": "二维码已扫码未确认"
182
}
183
}
184
```
185
186
</details>
187
188
扫描成功手机端确认登录后,`message`为`0`,并向浏览器写入cookie
189
190
<details>
191
<summary>查看响应示例:</summary>
192
193
194
```json
195
{
196
"code": 0,
197
"message": "0",
198
"ttl": 1,
199
"data": {
200
"url": "https://passport.biligame.com/crossDomain?DedeUserID=***\u0026DedeUserID__ckMd5=***\u0026Expires=***\u0026SESSDATA=***\u0026bili_jct=***\u0026gourl=https%3A%2F%2Fpassport.bilibili.com",
201
"refresh_token": "***",
202
"timestamp": 1662363009601,
203
"code": 0,
204
"message": ""
205
}
206
}
207
```
208
209
</details>
210
211
**响应头部抓包信息:**
212
213
可明显看见设置了几个cookie
214
215
<details>
216
<summary>查看响应示例:</summary>
217
218
219
```http
220
HTTP/1.1 200 OK
221
Date: Mon, 05 Sep 2022 07:30:09 GMT
222
Expires: Mon, 05 Sep 2022 07:30:08 GMT
223
Cache-control: no-cache
224
Content-encoding: br
225
Content-type: application/json; charset=utf-8
226
bili-status-code: 0
227
bili-trace-id: 0d23fe044a6315a5
228
set-cookie: SESSDATA=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT; HttpOnly; Secure
229
set-cookie: bili_jct=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
230
set-cookie: DedeUserID=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
231
set-cookie: DedeUserID__ckMd5=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
232
set-cookie: sid=***; Path=/; Domain=bilibili.com; Expires=Sat, 04 Mar 2023 07:30:09 GMT
233
x-bili-trace-id: 2fbd8abd97dbd4db0d23fe044a6315a5
234
x-cache-webcdn: BYPASS from blzone02
235
```
236
237
</details>
238
239
## web端扫码登录-旧版
240
241
以下为旧版扫码登录api,尚可正常访问
242
243
### 申请二维码(web端-旧版)
32
244
33
245
> http://passport.bilibili.com/qrcode/getLoginUrl
34
246
@@ -51,14 +261,14 @@ TV端流程&逻辑:
51
261
52
262
`data`对象:
53
263
54
| 字段 | 类型 | 内容 | 备注 |
55
| -------- | ---- | ------------- | ---------- |
56
| url | str | 二维码内容url | 恒为87字符 |
57
| oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
264
| 字段 | 类型 | 内容 | 备注 |
265
| -------- | ---- | ------------------------- | ---------- |
266
| url | str | 二维码内容 (登录页面 url) | |
267
| oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
58
268
59
269
**示例:**
60
270
61
用申请到的`data`.`url`中的值生成二维码,等待手机客户端扫描,并将`data`.`oauthKey`保存等待使用
271
`url`中的值生成二维码,等待手机客户端扫描,并将`oauthKey`保存备用
62
272
63
273
```shell
64
274
curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
@@ -67,6 +277,7 @@ curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
67
277
<details>
68
278
<summary>查看响应示例:</summary>
69
279
280
70
281
```json
71
282
{
72
283
"code": 0,
@@ -81,7 +292,7 @@ curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
81
292
82
293
</details>
83
294
84
## 使用扫码登录(web端)
295
### 扫码登录(web端-旧版)
85
296
86
297
> http://passport.bilibili.com/qrcode/getLoginInfo
87
298
@@ -107,15 +318,16 @@ curl 'http://passport.bilibili.com/qrcode/getLoginUrl'
107
318
| 字段 | 类型 | 内容 | 备注 |
108
319
| ------- | ---------------------------- | ----------------------------------------- | ------------------------------------------------------------ |
109
320
| code | num | 返回值 | 0:成功 |
110
| message | str | 错误信息 | 正确无 |
321
| message | str | | 正确无 |
111
322
| ts | num | 扫码时间 | 错误无 |
112
323
| status | bool | 扫码是否成功 | true:成功<br />false:未成功 |
113
324
| data | 正确时:obj<br />错误时:num | 正确时:游戏分站url<br />错误时:错误代码 | 未成功时:<br />-1:密钥错误<br />-2:密钥超时<br />-4:未扫描<br />-5:未确认 |
114
325
115
326
data 对象:
116
| 字段 | 类型 | 内容 | 备注 |
117
| ---- | ---- | ------------------- | ---- |
118
| url | str | 游戏分站跨域登录url | |
327
328
| 字段 | 类型 | 内容 | 备注 |
329
| ---- | ---- | -------------------- | ---- |
330
| url | str | 游戏分站跨域登录 url | |
119
331
120
332
**示例:**
121
333
@@ -127,11 +339,12 @@ curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
127
339
-c 'cookie.txt'
128
340
```
129
341
130
当密钥正确时但未扫描时`status`为`false`,`data`为num值`-4`
342
当密钥正确时但未扫描时`status`为`false`,`data`为`-4`
131
343
132
344
<details>
133
345
<summary>查看响应示例:</summary>
134
346
347
135
348
```json
136
349
{
137
350
"status":false,
@@ -142,11 +355,12 @@ curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
142
355
143
356
</details>
144
357
145
扫描成功但手机端未确认时`status`为`false`,`data`为num值`-5`
358
扫描成功但手机端未确认时`status`为`false`,`data`为`-5`
146
359
147
360
<details>
148
361
<summary>查看响应示例:</summary>
149
362
363
150
364
```json
151
365
{
152
366
"status":false,
@@ -162,6 +376,7 @@ curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
162
376
<details>
163
377
<summary>查看响应示例:</summary>
164
378
379
165
380
```json
166
381
{
167
382
"code": 0,
@@ -177,11 +392,12 @@ curl "http://passport.bilibili.com/qrcode/getLoginInfo"\
177
392
178
393
**响应头部抓包信息:**
179
394
180
可明显看见设置了几个cookie(填入浏览器即可成功登录)
395
可明显看见设置了几个cookie
181
396
182
397
<details>
183
398
<summary>查看响应示例:</summary>
184
399
400
185
401
```http
186
402
HTTP/1.1 200 OK
187
403
Date: Wed, 04 Mar 2020 10:36:37 GMT
@@ -201,27 +417,11 @@ X-Cache-Webcdn: BYPASS from ks-sxhz-dx-w-01
201
417
202
418
</details>
203
419
204
**游戏分站跨域登录url:**
205
206
游戏分站跨域登录url与cookie的值一一对应,可用于不方便设置cookie的场合提取使用
420
## TV端扫码登录
207
421
208
https://passport.biligame.com/crossDomain?
422
### 申请二维码(TV端)
209
423
210
DedeUserID=(登录mid)&
211
212
DedeUserID__ckMd5=(登录mid MD5值)&
213
214
Expires=(过期时间 秒)&
215
216
SESSDATA=(登录token)&
217
218
bili_jct=(csrf)&
219
220
gourl=(跳转网址 默认为主页)
221
222
## 申请二维码URL及扫码密钥(TV端)
223
224
> http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code
424
> http://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code
225
425
226
426
*请求方式:POST*
227
427
@@ -229,14 +429,14 @@ gourl=(跳转网址 默认为主页)
229
429
230
430
密钥超时为180秒
231
431
232
本接口可申请用于APP方式登录的`access_key`
432
本接口可申请用于TV端APP方式登录的`access_key`
233
433
234
434
**正文参数( application/x-www-form-urlencoded ):**
235
435
236
436
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
237
437
| -------- | ---- | ---------- | ----------- | ------------------------ |
238
438
| appkey | str | APP密钥 | APP方式必要 | 仅可用`4409e2ce8ffd12b8` |
239
| local_id | str | TV端id | TV端必要 | 可为0 |
439
| local_id | str | TV端id | TV端必要 | 可为`0` |
240
440
| ts | num | 当前时间戳 | APP方式必要 | |
241
441
| sign | str | APP签名 | APP方式必要 | |
242
442
@@ -255,13 +455,13 @@ gourl=(跳转网址 默认为主页)
255
455
256
456
| 字段 | 类型 | 内容 | 备注 |
257
457
| -------- | ---- | ------------- | ---------- |
258
| url | str | 二维码内容url | 恒为87字符 |
458
| url | str | 二维码内容url | |
259
459
| oauthKey | str | 扫码登录秘钥 | 恒为32字符 |
260
460
261
461
**示例:**
262
462
263
463
```shell
264
curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
464
curl 'http://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code' \
265
465
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
266
466
--data-urlencode 'local_id=0' \
267
467
--data-urlencode 'ts=0' \
@@ -277,7 +477,7 @@ curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
277
477
"message": "0",
278
478
"ttl": 1,
279
479
"data": {
280
"url": "https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001",
480
"url": "https://passport.snm0516.aisee.tv/x/passport-tv-login/h5/qrcode/auth?auth_code=0eeb635a64526709d70cb4c854a3b001",
281
481
"auth_code": "0eeb635a64526709d70cb4c854a3b001"
282
482
}
283
483
}
@@ -285,9 +485,9 @@ curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
285
485
286
486
</details>
287
487
288
## 使用扫码登录(TV端)
488
### 扫码登录(TV端)
289
489
290
> http://passport.bilibili.com/x/passport-tv-login/qrcode/poll
490
> http://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/poll
291
491
292
492
*请求方式:POST*
293
493
@@ -297,7 +497,7 @@ curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
297
497
298
498
验证登录成功后会返回可用于APP方式登录的`access_key`以及`refresh_token`
299
499
300
**正文参数( application/x-www-form-urlencoded ):**
500
**正文参数 (application/x-www-form-urlencoded):**
301
501
302
502
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
303
503
| --------- | ---- | ---------- | ----------- | ------------------------ |
@@ -332,7 +532,7 @@ curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/auth_code' \
332
532
使用扫描秘钥`6214464b3025541abf6f654cf7569a01`进行验证登录
333
533
334
534
```shell
335
curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/poll' \
535
curl 'http://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/poll' \
336
536
--data-urlencode 'appkey=4409e2ce8ffd12b8' \
337
537
--data-urlencode 'auth_code=6214464b3025541abf6f654cf7569a01' \
338
538
--data-urlencode 'local_id=0' \
@@ -357,4 +557,4 @@ curl 'http://passport.bilibili.com/x/passport-tv-login/qrcode/poll' \
357
557
}
358
558
```
359
559
360
</details>
560
</details>