br_wechat/
lib.rs

1use json::{array, JsonValue, object};
2use crate::applet::Applet;
3use crate::wecom::WeCom;
4use lazy_static::lazy_static;
5use std::sync::Mutex;
6use std::collections::HashMap;
7
8pub mod wecom;
9pub mod applet;
10
11
12lazy_static! {
13    pub static ref ACCESS_TOKEN: Mutex<HashMap<String,JsonValue>> =Mutex::new(HashMap::new());
14}
15
16#[derive(Clone)]
17pub enum Wechat {
18    WeCom(WeCom),
19    Applet(Applet),
20    None,
21}
22
23impl Wechat {
24    pub fn new(data: JsonValue) -> Self {
25        let is_none = ACCESS_TOKEN.lock().unwrap().get(&*data["appid"].to_string()).is_none();
26        let access_token = if is_none {
27            "".to_string()
28        } else {
29            ACCESS_TOKEN.lock().unwrap().get(&*data["appid"].to_string()).unwrap().clone()["access_token"].to_string()
30        };
31        let expires_in = if is_none {
32            0
33        } else {
34            ACCESS_TOKEN.lock().unwrap().get(&*data["appid"].to_string()).unwrap().clone()["expires_in"].as_i64().unwrap()
35        };
36        match data["mode"].as_str().unwrap_or("") {
37            "wecom" => {
38                Wechat::WeCom(WeCom {
39                    corp_id: data["appid"].to_string(),
40                    agent_id: data["agent_id"].to_string(),
41                    secret: data["secret"].to_string(),
42                    access_token,
43                    expires_in,
44                })
45            }
46            "applet" => Wechat::Applet(Applet {
47                appid: data["appid"].to_string(),
48                secret: data["secret"].to_string(),
49                access_token,
50                expires_in,
51            }),
52            _ => Wechat::None
53        }
54    }
55    pub fn check(&mut self) -> bool {
56        match self {
57            Wechat::WeCom(e) => e.check(),
58            Wechat::Applet(e) => e.check(),
59            Wechat::None => false
60        }
61    }
62    /// code 获取用户信息 企业微信只能拿到userid
63    pub fn getuserinfo(&mut self, code: &str) -> JsonValue {
64        match self {
65            Wechat::WeCom(e) => e.getuserinfo(code),
66            Wechat::Applet(e) => e.getuserinfo(code),
67            Wechat::None => object! {}
68        }
69    }
70    /// 小程序登录
71    pub fn code2_session(&mut self, code: &str) -> JsonValue {
72        match self {
73            Wechat::WeCom(_) => object! {},
74            Wechat::Applet(e) => e.code2_session(code),
75            Wechat::None => object! {}
76        }
77    }
78    /// 小程序获取手机号
79    pub fn get_phone_number(&mut self, iv: &str, encrypted_data: &str, session_key: &str) -> JsonValue {
80        match self {
81            Wechat::WeCom(_) => object! {},
82            Wechat::Applet(e) => e.get_phone_number(iv, encrypted_data, session_key),
83            Wechat::None => object! {}
84        }
85    }
86    /// 企业微信获取部门
87    pub fn get_department(&mut self) -> JsonValue {
88        match self {
89            Wechat::WeCom(e) => e.get_department(),
90            Wechat::Applet(_) => array![],
91            Wechat::None => array![]
92        }
93    }
94    /// 企业微信获取部门成员
95    pub fn get_simplelist(&mut self,department_id:&str) -> JsonValue {
96        match self {
97            Wechat::WeCom(e) => e.get_simplelist(department_id),
98            Wechat::Applet(_) => array![],
99            Wechat::None => array![]
100        }
101    }
102    /// 通过user_id获取open_id
103    pub fn convert_to_openid(&mut self,userid:&str) -> JsonValue {
104        match self {
105            Wechat::WeCom(e) => e.convert_to_openid(userid),
106            Wechat::Applet(_) => array![],
107            Wechat::None => array![]
108        }
109    }
110    /// 企业微信获取部门成员详情
111    pub fn get_simplelist_details(&mut self,department_id:&str) -> JsonValue {
112        match self {
113            Wechat::WeCom(e) => e.get_simplelist_details(department_id),
114            Wechat::Applet(_) => array![],
115            Wechat::None => array![]
116        }
117    }
118}