Skip to main content

ncm_api_rs/api/
verify_get_qr.rs

1use super::Query;
2use crate::error::Result;
3/// 获取验证二维码
4/// 对应 Node.js module/verify_getQr.js
5///
6/// 注意: Node.js 版本使用 qrcode 库生成二维码图片,Rust 版本仅返回 URL 和 qrCode,
7/// 不包含 qrimg 生成(需要调用方自行处理)
8use crate::request::{ApiClient, ApiResponse, CryptoType};
9use serde_json::json;
10
11impl ApiClient {
12    /// 获取验证二维码
13    /// 对应 /verify/getQr
14    pub async fn verify_get_qr(&self, query: &Query) -> Result<ApiResponse> {
15        let params = json!({
16            "event_id": query.get("evid").unwrap_or(""),
17            "sign": query.get("sign").unwrap_or("")
18        });
19        let data = json!({
20            "verifyConfigId": query.get("vid").unwrap_or(""),
21            "verifyType": query.get("type").unwrap_or(""),
22            "token": query.get("token").unwrap_or(""),
23            "params": params.to_string(),
24            "size": 150
25        });
26        let res = self
27            .request(
28                "/api/frontrisk/verify/getqrcode",
29                data,
30                query.to_option(CryptoType::Weapi),
31            )
32            .await?;
33
34        let qr_code = res
35            .body
36            .get("data")
37            .and_then(|d| d.get("qrCode"))
38            .and_then(|q| q.as_str())
39            .unwrap_or("");
40
41        let token = query.get("token").unwrap_or("");
42        let vid = query.get("vid").unwrap_or("");
43        let verify_type = query.get("type").unwrap_or("");
44        let evid = query.get("evid").unwrap_or("");
45        let sign = query.get("sign").unwrap_or("");
46        let params_str = json!({"event_id": evid, "sign": sign}).to_string();
47
48        let qrurl = format!(
49            "https://st.music.163.com/encrypt-pages?qrCode={}&verifyToken={}&verifyId={}&verifyType={}&params={}",
50            qr_code, token, vid, verify_type, params_str
51        );
52
53        Ok(ApiResponse {
54            status: 200,
55            body: json!({
56                "code": 200,
57                "data": {
58                    "qrCode": qr_code,
59                    "qrurl": qrurl,
60                    "qrimg": ""
61                }
62            }),
63            cookie: vec![],
64        })
65    }
66}