use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::{core::request::RequestBuilder, RPayResult};
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[builder(pattern = "mutable")]
pub struct AccessToken {
#[serde(rename = "appid")]
#[builder(setter(into))]
pub app_id: String,
#[serde(rename = "secret")]
#[builder(setter(into))]
pub secret: String,
}
impl AccessToken {
pub async fn request(&mut self) -> RPayResult<Response> {
let url = format!("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}", self.app_id, self.secret);
let resp = RequestBuilder::default()
.url(url)
.build()?
.send::<Response>()
.await?;
Ok(resp)
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
pub struct Response {
pub access_token: Option<String>,
pub expires_in: Option<i64>,
pub errcode: Option<i64>,
errmsg: Option<String>,
}