use serde::{Deserialize, Serialize};
use serde_json::{json, Value};
use crate::{LabradorResult, request::RequestType, session::SessionStore, WechatCommonResponse, WechatCpTpClient};
use crate::wechat::cp::constants::PROVIDER_ACCESS_TOKEN;
use crate::wechat::cp::method::WechatCpMethod;
#[derive(Debug, Clone)]
pub struct WechatCpTpAgent<'a, T: SessionStore> {
client: &'a WechatCpTpClient<T>,
}
#[allow(unused)]
impl<'a, T: SessionStore> WechatCpTpAgent<'a, T> {
#[inline]
pub fn new(client: &WechatCpTpClient<T>) -> WechatCpTpAgent<T> {
WechatCpTpAgent {
client,
}
}
pub async fn get_customized_auth_url(&self, state: &str, templateid_list: &Vec<&str>) -> LabradorResult<WechatCpTpProxyResponse> {
let req = json!({"state":state,"templateid_list":templateid_list});
let access_token = self.client.get_wechat_provider_token().await?;
let query = vec![(PROVIDER_ACCESS_TOKEN.to_string(), access_token)];
let v = self.client.post(WechatCpMethod::GetCustomizedAuthUrl, query, req, RequestType::Json).await?.json::<Value>()?;
WechatCommonResponse::parse::<WechatCpTpProxyResponse>(v)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WechatCpTpProxyResponse {
pub qrcode_url: String,
pub expires_in: i32,
}