企业微信验证专用跳板

This commit is contained in:
zqm
2026-03-11 13:18:05 +08:00
parent 27e8fad23f
commit 1d83ae86e8
6 changed files with 961 additions and 0 deletions

51
WeCom/src/main.rs Normal file
View File

@@ -0,0 +1,51 @@
use axum::{
extract::Query,
routing::get,
Router,
};
use serde::Deserialize;
use sha1::{Digest, Sha1};
#[derive(Deserialize)]
pub struct WecomVerify {
pub msg_signature: String,
pub timestamp: String,
pub nonce: String,
pub echostr: String,
}
const WECOM_TOKEN: &str = "mytoken123456";
#[tokio::main]
async fn main() {
let app = Router::new()
.route("/wecom", get(wecom_verify));
println!("服务器启动127.0.0.1:8000");
axum::serve(
tokio::net::TcpListener::bind("127.0.0.1:8000").await.unwrap(),
app,
)
.await
.unwrap();
}
async fn wecom_verify(Query(query): Query<WecomVerify>) -> String {
let mut arr = [
WECOM_TOKEN,
&query.timestamp,
&query.nonce,
&query.echostr,
];
arr.sort();
let mut hasher = Sha1::new();
hasher.update(arr.join("").as_bytes());
let sig = format!("{:x}", hasher.finalize());
if sig == query.msg_signature {
query.echostr
} else {
"invalid".into()
}
}