use super::*;
pub struct TikTokLogin {
pub app_id: String,
pub app_secret: String,
pub code: String,
pub anonymous_code: String,
}
#[derive(Debug, Deserialize)]
pub struct TikTokLoginResponse {
#[serde(default)]
pub err_no: i64,
#[serde(default)]
pub err_tips: String,
#[serde(default)]
pub log_id: String,
pub data: TikTokLoginResponseData,
}
#[derive(Debug, Deserialize)]
pub struct TikTokLoginResponseData {
#[serde(default)]
pub session_key: String,
#[serde(default)]
pub anonymous_openid: String,
#[serde(default)]
pub openid: String,
#[serde(default)]
pub unionid: String,
}
impl TikTokLogin {
pub async fn send(self) -> Result<TikTokLoginResponse, GameError> {
let mut get_url = format!(
"https://minigame.zijieapi.com/mgplatform/api/apps/jscode2session?appid={}&secret={}",
self.app_id, self.app_secret
);
if !self.code.is_empty() {
get_url.push_str("&code=");
get_url.push_str(&self.code);
}
if !self.anonymous_code.is_empty() {
get_url.push_str("&anonymous_code=");
get_url.push_str(&self.anonymous_code);
}
let result = reqwest::get(get_url).await?.json::<TikTokLoginResponse>().await?;
Ok(result)
}
}
impl TikTokLoginResponse {
pub fn as_result(self) -> Result<LoginResponse, GameError> {
if self.err_no != 0 {
Err(GameError::service_error("TikTok", self.err_tips).with_code(self.err_no))
}
else {
Ok(LoginResponse { open_id: self.data.openid, union_id: self.data.unionid, session_key: self.data.session_key })
}
}
}