1use serde::{Deserialize, Serialize};
2
3use crate::{BilibiliRequest, BpiClient, BpiError, BpiResponse};
4
5#[derive(Debug, Clone, Serialize)]
6pub struct BcoinQuickPayForm<'a> {
7 pub bp_num: i32,
8 pub is_bp_remains_prior: bool,
9 pub up_mid: i64,
10 pub otype: &'a str, pub oid: i64,
12 pub csrf: &'a str,
13}
14
15#[derive(Debug, Serialize, Clone, Deserialize)]
16pub struct BcoinQuickPayData {
17 pub mid: i64,
19 pub up_mid: i64,
21 pub order_no: String,
23 pub bp_num: String,
25 pub exp: u32,
27 pub status: i32,
32 pub msg: String,
34}
35
36impl BpiClient {
37 pub async fn electric_bcoin_quick_pay(
51 &self,
52 bp_num: i32,
53 is_bp_remains_prior: bool,
54 up_mid: i64,
55 otype: &str,
56 oid: i64,
57 ) -> Result<BpiResponse<BcoinQuickPayData>, BpiError> {
58 let csrf_owned = self.csrf()?;
59 let form = BcoinQuickPayForm {
60 bp_num,
61 is_bp_remains_prior,
62 up_mid,
63 otype,
64 oid,
65 csrf: &csrf_owned,
66 };
67
68 self.post("https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick")
69 .form(&form)
70 .send_bpi("新版本B币充电")
71 .await
72 }
73}
74
75#[cfg(test)]
76mod tests {
77 use super::*;
78
79 #[tokio::test]
80 async fn test_electric_bcoin_quick_pay_min() {
81 let bpi = BpiClient::new();
82 let resp = bpi
83 .electric_bcoin_quick_pay(2, true, 107997089, "up", 107997089)
84 .await;
85 assert!(resp.is_ok());
86 tracing::info!("{:?}", resp);
87 }
88}