open_wechat/lib.rs
1//! # open-wechat
2//!
3//! 
4//!
5//! A rust sdk for wechat miniprogram open api
6//!
7//! ## Usage
8//!
9//! ### Get access token
10//!
11//! ```ignore
12//! use open_wechat::{
13//! client::Client,
14//! credential::{GenericAccessToken, GetAccessToken}
15//! };
16//!
17//! #[tokio::main]
18//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
19//! let app_id = "your app id";
20//! let app_secret = "your app secret";
21//!
22//! let client = Client::new(app_id, app_secret);
23//!
24//! let access_token = GenericAccessToken::new(client.clone()).await?;
25//!
26//! Ok(())
27//! }
28//! ```
29//!
30//! ### Get stable access token
31//!
32//! ```ignore
33//! use open_wechat::{
34//! client::Client,
35//! credential::{GenericAccessToken, GetStableAccessToken}
36//! };
37//!
38//! #[tokio::main]
39//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
40//! let app_id = "your app id";
41//! let app_secret = "your app secret";
42//!
43//! let client = Client::new(app_id, app_secret);
44//!
45//! let stable_access_token = GenericAccessToken::new(client.clone(), None).await?;
46//!
47//! Ok(())
48//! }
49//! ```
50//!
51//! ### Code to session
52//!
53//! ```rust
54//! use axum::{extract::State, response::IntoResponse, Json};
55//! use open_wechat::{client::Client, Result};
56//! use serde::Deserialize;
57//!
58//! #[derive(Deserialize, Default)]
59//! #[serde(default)]
60//! pub(crate) struct Logger {
61//! code: String,
62//! }
63//!
64//! pub(crate) async fn login(
65//! State(client): State<Client>,
66//! Json(logger): Json<Logger>,
67//! ) -> Result<impl IntoResponse> {
68//! let credential = client.login(&logger.code).await?;
69//!
70//! Ok(())
71//! }
72//! ```
73//!
74//! ### Decrypt data
75//!
76//! ```rust
77//! use axum::{extract::State, response::IntoResponse, Json};
78//! use open_wechat::{client::Client, Result};
79//! use serde::Deserialize;
80//!
81//! #[derive(Deserialize, Default)]
82//! pub(crate) struct EncryptedPayload {
83//! code: String,
84//! encrypted_data: String,
85//! iv: String,
86//! }
87//!
88//! pub(crate) async fn decrypt(
89//! State(client): State<Client>,
90//! Json(payload): Json<EncryptedPayload>,
91//! ) -> Result<impl IntoResponse> {
92//! let credential = client.login(&payload.code).await?;
93//!
94//! let user = credential.decrypt(&payload.encrypted_data, &payload.iv)?;
95//!
96//! Ok(())
97//! }
98//! ```
99//!
100//! ### Check session key
101//!
102//! ```rust
103//! use axum::{extract::State, response::IntoResponse, Json};
104//! use open_wechat::{client::Client, credential::{GenericAccessToken, CheckSessionKey}, Result};
105//! use serde::Deserialize;
106//! use serde_json::json;
107//!
108//! #[derive(Debug, Deserialize, Default)]
109//! #[serde(default)]
110//! pub(crate) struct SessionKeyChecker {
111//! session_key: String,
112//! open_id: String,
113//! }
114//!
115//! pub(crate) async fn check_session_key(
116//! State(access_token): State<GenericAccessToken>,
117//! Json(checker): Json<SessionKeyChecker>,
118//! ) -> Result<impl IntoResponse> {
119//! access_token
120//! .check_session_key(&checker.session_key, &checker.open_id)
121//! .await?;
122//!
123//! Ok(Json(json!({
124//! "session_key": checker.session_key,
125//! "open_id": checker.open_id,
126//! "message": "session key is valid",
127//! })))
128//! }
129//! ```
130//!
131//! ### Reset session key
132//!
133//! ```rust
134//! use axum::{extract::State, response::IntoResponse, Json};
135//! use open_wechat::{client::Client, credential::{GenericAccessToken, ResetSessionKey}, Result};
136//! use serde::Deserialize;
137//! use serde_json::json;
138//!
139//! #[derive(Debug, Deserialize, Default)]
140//! #[serde(default)]
141//! pub(crate) struct SessionKeyResetter {
142//! session_key: String,
143//! open_id: String,
144//! }
145//!
146//! pub(crate) async fn reset_session_key(
147//! State(access_token): State<GenericAccessToken>,
148//! Json(resetter): Json<SessionKeyResetter>,
149//! ) -> Result<impl IntoResponse> {
150//! let credential = access_token
151//! .reset_session_key(&resetter.session_key, &resetter.open_id)
152//! .await?;
153//!
154//! Ok(Json(json!({
155//! "message": "session key is reset",
156//! "credential": credential,
157//! })))
158//! }
159//! ```
160
161#![warn(
162 clippy::all,
163 nonstandard_style,
164 future_incompatible,
165 missing_debug_implementations
166)]
167#![allow(rustdoc::bare_urls)]
168#![forbid(unsafe_code)]
169
170pub mod client;
171pub mod credential;
172pub mod error;
173mod response;
174pub mod user;
175
176pub type Result<T> = std::result::Result<T, error::Error>;