open-wechat

Crates.ioopen-wechat
lib.rsopen-wechat
version1.1.1
created_at2023-10-06 10:54:11.803997+00
updated_at2025-01-02 10:34:35.098524+00
descriptionA rust sdk for wechat miniprogram open api
homepagehttps://github.com/headironc/open-wechat
repositoryhttps://github.com/headironc/open-wechat
max_upload_size
id994992
size50,756
headiron (headironc)

documentation

README

open-wechat

WeChat

A rust sdk for wechat miniprogram open api

Usage

Get access token

use open_wechat::{
    client::Client, 
    credential::{GenericAccessToken, GetAccessToken}
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let app_id = "your app id";
    let app_secret = "your app secret";

    let client = Client::new(app_id, app_secret);

    let access_token = GenericAccessToken::new(self.client.clone()).await?;

    Ok(())
}

Get stable access token

use open_wechat::{
    client::Client, 
    credential::{GenericAccessToken, GetStableAccessToken}
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let app_id = "your app id";
    let app_secret = "your app secret";

    let client = Client::new(app_id, app_secret);

    let stable_access_token = GenericAccessToken::new(self.client.clone(), None).await?;

    Ok(())
}

Code to session

use axum::{extract::State, response::IntoResponse, Json};
use open_wechat::client::Client;
use serde::Deserialize;

use crate::Result;

#[derive(Deserialize, Default)]
#[serde(default)]
pub(crate) struct Logger {
    code: String,
}

pub(crate) async fn login(
    State(client): State<Client>,
    Json(logger): Json<Logger>,
) -> Result<impl IntoResponse> {
    let credential = client.login(&logger.code).await?;

    Ok(())
}

Decrypt data

use axum::{extract::State, response::IntoResponse, Json};
use open_wechat::client::Client;
use serde::Deserialize;

use crate::Result;

#[derive(Deserialize, Default)]
pub(crate) struct EncryptedPayload {
    code: String,
    encrypted_data: String,
    iv: String,
}

pub(crate) async fn decrypt(
    State(client): State<Client>,
    Json(payload): Json<EncryptedPayload>,
) -> Result<impl IntoResponse> {
    let credential = client.login(&payload.code).await?;

    let user = credential.decrypt(&payload.encrypted_data, &payload.iv)?;

    Ok(())
}
Commit count: 34

cargo fmt