use serde::{Deserialize, Serialize};
use crate::{BilibiliRequest, BpiClient, BpiError, BpiResponse};
#[derive(Debug, Clone, Serialize)]
pub struct BcoinQuickPayForm<'a> {
pub bp_num: i32,
pub is_bp_remains_prior: bool,
pub up_mid: i64,
pub otype: &'a str, pub oid: i64,
pub csrf: &'a str,
}
#[derive(Debug, Serialize, Clone, Deserialize)]
pub struct BcoinQuickPayData {
pub mid: i64,
pub up_mid: i64,
pub order_no: String,
pub bp_num: String,
pub exp: u32,
pub status: i32,
pub msg: String,
}
impl BpiClient {
pub async fn electric_bcoin_quick_pay(
&self,
bp_num: i32,
is_bp_remains_prior: bool,
up_mid: i64,
otype: &str,
oid: i64,
) -> Result<BpiResponse<BcoinQuickPayData>, BpiError> {
let csrf_owned = self.csrf()?;
let form = BcoinQuickPayForm {
bp_num,
is_bp_remains_prior,
up_mid,
otype,
oid,
csrf: &csrf_owned,
};
self.post("https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick")
.form(&form)
.send_bpi("新版本B币充电")
.await
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_electric_bcoin_quick_pay_min() {
let bpi = BpiClient::new();
let resp = bpi
.electric_bcoin_quick_pay(2, true, 107997089, "up", 107997089)
.await;
assert!(resp.is_ok());
tracing::info!("{:?}", resp);
}
}