wecom_rs/client/contact/user/
user.rs

1use super::*;
2use crate::{
3    client::{common::model::Response, Client, BASE_URL},
4    error::Result,
5};
6use async_trait::async_trait;
7use reqwest::Method;
8
9#[async_trait]
10impl UserManager for Client {
11    /// API参考:https://developer.work.weixin.qq.com/document/path/90195
12    async fn user_create(&self, params: ParamsCreateUser) -> Result<()> {
13        let token = self.access_token().await?;
14        self.request::<Response<()>>(
15            Method::POST,
16            &format!("{BASE_URL}/user/create?access_token={token}"),
17            Some(serde_json::to_value(&params)?),
18        )
19        .await?;
20
21        Ok(())
22    }
23
24    /// API参考:https://developer.work.weixin.qq.com/document/path/90196
25    async fn user_get(&self, user_id: &str) -> Result<User> {
26        let token = self.access_token().await?;
27        let resp = self
28            .request::<Response<User>>(
29                Method::GET,
30                &format!("{BASE_URL}/user/get?access_token={token}&userid={user_id}"),
31                None,
32            )
33            .await?;
34
35        Ok(resp.data.unwrap())
36    }
37    async fn user_update(&self, params: ParamsUpdateUser) -> Result<()> {
38        if params.is_empty() {
39            return Err(crate::error::Error::EmptyFiledsUpdate);
40        }
41        let token = self.access_token().await?;
42        self.request::<Response<()>>(
43            Method::POST,
44            &format!("{BASE_URL}/user/update?access_token={token}"),
45            Some(serde_json::to_value(params)?),
46        )
47        .await?;
48
49        Ok(())
50    }
51
52    /// https://developer.work.weixin.qq.com/document/path/90198
53    async fn user_delete(&self, user_id: &str) -> Result<()> {
54        let token = self.access_token().await?;
55        self.request::<Response<()>>(
56            Method::GET,
57            &format!("{BASE_URL}/user/delete?access_token={token}&userid={user_id}"),
58            None,
59        )
60        .await?;
61
62        Ok(())
63    }
64
65    /// https://developer.work.weixin.qq.com/document/path/90199
66    async fn user_batch_delete(&self, userids: &[&str]) -> Result<()> {
67        let token = self.access_token().await?;
68        self.request::<Response<()>>(
69            Method::POST,
70            &format!("{BASE_URL}/user/batchdelete?access_token={token}"),
71            Some(serde_json::json!({ "useridlist": userids })),
72        )
73        .await?;
74
75        Ok(())
76    }
77
78    /// https://developer.work.weixin.qq.com/document/path/90201
79    async fn user_list(&self, department_id: u64) -> Result<UserList> {
80        let token = self.access_token().await?;
81        let resp = self
82            .request::<Response<UserList>>(
83                Method::GET,
84                &format!("{BASE_URL}/user/list?access_token={token}&department_id={department_id}"),
85                None,
86            )
87            .await?;
88
89        Ok(resp.data.unwrap())
90    }
91
92    /// https://developer.work.weixin.qq.com/document/path/95402
93    async fn userid_get(&self, mobile: &str) -> Result<String> {
94        let token = self.access_token().await?;
95        let resp = self
96            .request::<Response<GetUserIdResponse>>(
97                Method::POST,
98                &format!("{BASE_URL}/user/getuserid?access_token={token}"),
99                Some(serde_json::json!({ "mobile": mobile })),
100            )
101            .await?;
102
103        Ok(resp.data.unwrap().userid)
104    }
105}
106
107use serde::{Deserialize, Serialize};
108#[derive(Debug, Deserialize, Serialize, Default)]
109struct GetUserIdResponse {
110    userid: String,
111}