use serde::{Serialize, Deserialize};
use serde_json::{json, Value};
use crate::{session::SessionStore, request::{RequestType}, WechatCommonResponse, LabradorResult, WechatCpTpClient, DealerCorpInfo};
use crate::wechat::cp::method::{WechatCpMethod};
#[derive(Debug, Clone)]
pub struct WechatCpTpOrder<'a, T: SessionStore> {
client: &'a WechatCpTpClient<T>,
}
#[allow(unused)]
impl<'a, T: SessionStore> WechatCpTpOrder<'a, T> {
#[inline]
pub fn new(client: &WechatCpTpClient<T>) -> WechatCpTpOrder<T> {
WechatCpTpOrder {
client,
}
}
pub async fn get_order_info(&self, order_id: &str) -> LabradorResult<WechatCpTpOrderDetailsResponse> {
let mut req = json!({
"orderid": order_id,
});
let v = self.client.post(WechatCpMethod::GetOrder, vec![], req, RequestType::Json).await?.json::<Value>()?;
WechatCommonResponse::parse::<WechatCpTpOrderDetailsResponse>(v)
}
pub async fn get_order_list(&self, start_time: Option<i64>, end_time: Option<i64>, test_mode: u8) -> LabradorResult<WechatCpTpOrderListGetResponse> {
let mut req = json!({
"test_mode": test_mode,
});
if let Some(start) = start_time {
req["start_time"] = (start / 1000).into();
}
if let Some(end) = end_time {
req["end_time"] = (end / 1000).into();
}
let access_token = self.client.get_wechat_provider_token().await?;
let v = self.client.post(WechatCpMethod::GetOrderList, vec![], req, RequestType::Json).await?.json::<Value>()?;
WechatCommonResponse::parse::<WechatCpTpOrderListGetResponse>(v)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WechatCpTpOrderDetailsResponse {
pub orderid: Option<String>,
pub order_status: Option<u8>,
pub order_type: Option<u8>,
pub paid_corpid: Option<String>,
pub operator_id: Option<String>,
pub suiteid: Option<String>,
pub appid: Option<String>,
pub edition_id: Option<String>,
pub edition_name: Option<String>,
pub price: Option<i64>,
pub user_count: Option<i64>,
pub order_period: Option<i64>,
pub order_time: Option<i64>,
pub paid_time: Option<i64>,
pub begin_time: Option<i64>,
pub end_time: Option<i64>,
pub order_from: Option<u8>,
pub operator_corpid: Option<String>,
pub service_share_amount: Option<i64>,
pub platform_share_amount: Option<i64>,
pub dealer_share_amount: Option<i64>,
pub dealer_corp_info: Option<DealerCorpInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WechatCpTpOrderListGetResponse {
pub order_list: Option<Vec<WechatCpTpOrderDetailsResponse>>,
}