use serde::Serialize;
use serde_json::{json, Value};
use crate::ChimesClient;
#[derive(Debug, Eq, PartialEq, Clone, Serialize)]
pub struct WeappTemplateMessage {
template_id: String,
page: String,
form_id: String,
emphasis_keyword: String,
data: Value,
}
impl WeappTemplateMessage {
pub fn new(template_id: &str, page: &str, form_id: &str, emph: &str, data: Value) -> Self {
Self {
template_id: template_id.to_owned(),
page: page.to_owned(),
form_id: form_id.to_owned(),
emphasis_keyword: emph.to_owned(),
data: data.clone(),
}
}
}
#[derive(Debug, Eq, PartialEq, Clone, Serialize)]
pub struct MPTemplateMessage {
appid: String,
template_id: String,
url: String,
miniprogram: Value,
data: Value,
}
impl MPTemplateMessage {
pub fn new(
app_id: &str,
template_id: &str,
url: &str,
miniprogram: &str,
pagepath: &str,
data: &Value,
) -> Self {
Self {
template_id: template_id.to_owned(),
appid: app_id.to_owned(),
url: url.to_owned(),
miniprogram: json!({"appid": miniprogram.to_owned(), "pagepath": pagepath.to_owned()}),
data: data.clone(),
}
}
}
#[derive(Debug, Eq, PartialEq, Clone, Serialize)]
pub struct UniformMessage {
touser: String,
weapp_template_msg: Option<WeappTemplateMessage>,
mp_template_msg: MPTemplateMessage,
}
impl UniformMessage {
pub fn new(
to_user: &str,
weapp: &Option<WeappTemplateMessage>,
mp: &MPTemplateMessage,
) -> Self {
Self {
touser: to_user.to_owned(),
weapp_template_msg: weapp.clone(),
mp_template_msg: mp.clone(),
}
}
#[inline]
pub async fn send(&self, access_token: &String) -> bool {
let api_url = format!(
"https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token={}",
access_token
);
let params = json!(self);
println!(
"send Unionform Message url:: {} content :: {:?}",
api_url, params
);
match ChimesClient::new().post(&api_url, ¶ms).await {
Ok(v) => {
println!("success {:?}", v);
!v.contains("access_token expired")
}
Err(e) => {
println!("error {:?}", e);
false
}
}
}
}