fache 0.1.308

发车工具箱
Documentation
#[cfg(feature = "shawn")]
#[allow(dead_code)]
use rand::Rng;
use rand::distr::Alphanumeric;
use std::time::{SystemTime, UNIX_EPOCH};
pub trait Shawn {
    #[allow(dead_code)]
    fn test() {}
    #[allow(dead_code)]
    fn random_string(length: usize) -> String {
        let mut rng = rand::rng();
        (0..length)
            .map(|_| rng.sample(Alphanumeric) as char)
            .collect()
    }
    #[allow(dead_code)]
    fn timestamp() -> u64 {
        let timestamp: u64 = SystemTime::now()
            .duration_since(UNIX_EPOCH)
            .expect("Time went backwards")
            .as_secs();
        timestamp // 10位的时间戳
    }
    #[allow(dead_code)]
    // 通过门店编号生成 32 位的支付订单号
    fn order_unique(sid: String) -> String {
        // 确保sid的长度不超过32个字符
        let sid = if sid.len() > 32 {
            sid.chars().take(32).collect()
        } else {
            sid
        };
        let timestamp = SystemTime::now()
            .duration_since(UNIX_EPOCH)
            .expect("Time went backwards 时间倒流了")
            .as_secs(); // 时间戳长度通常为10位
        // 确保随机字符串长度不超过微信支付订单号的长度
        let max_random_length = 32 - sid.len() - timestamp.to_string().len() - 2; // 减去两个下划线的长度
        let random_string: String = rand::rng()
            .sample_iter(&Alphanumeric)
            .take(max_random_length) // 生成随机字符串
            .map(char::from)
            .collect();
        // 拼接sid、时间戳和随机字符串
        let input_string = format!("{}_{}_{}", sid, timestamp, random_string);
        input_string
    }
    #[allow(dead_code)]
    // 通过切割 下划线 生成 门店编号   时间戳   随机字符串  的数组
    fn order_to_sid(order: String) -> Vec<String> {
        // println!("订单号的长度信息:{}", order.len());
        let all_str: Vec<&str> = order.split('_').collect();
        // println!("门店编号{}与长度{}", all_str[0], all_str[0].len());
        // println!("时间戳{}与长度{}", all_str[1], all_str[1].len());
        let mut all: Vec<String> = Vec::new(); // 初始化 all 为一个空的 String 向量
        for (_index, s) in all_str.iter().enumerate() {
            // println!("遍历_分割出来的订单号信息索引: {}", index); // 修正格式化字符串
            all.push(s.to_string()); // 将 &str 转换为 String 并添加到 all 向量中
        }
        all
    }
    // 生成 自定义的 请求头
    fn user_chrome_agent() -> String {
        let chrome_agent = "Mozilla/5.0 (Linux; Android 10; Rust App Pay Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36";
        chrome_agent.to_owned()
    }
}