All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and compatibility changes are documented explicitly for each release.
tls-rustls 要求 rustls >=0.23.46, <0.24,使下游依赖解析也排除
RUSTSEC-2026-0346、RUSTSEC-2026-0347、RUSTSEC-2026-0348 和 RUSTSEC-2026-0349
的受影响版本(#35、
#36、
#37、
#38);锁文件使用修复版本。
禁用默认 feature 时不引入该 TLS 依赖。cargo audit,并支持手动运行;
保留每日定时检查和新漏洞 issue 报告。本版本修复支付协议及安全边界,并包含相对于 2.0.x 的源码和行为不兼容变化。
虽然版本号为 2.1.0,升级仍需按 README 迁移说明 调整调用方,
尤其是响应模型、原始通知验签、姓名加密、信任材料和旧密文读取。
docs feature 将 README 示例纳入 doctest;CI 实际执行默认及无默认 feature 检查,
扩大到所有 targets,使用锁文件并将 Clippy 警告作为错误rsa::Error、pkcs8::Error 的 From 实现。
新增公开配置字段及响应类型变更需调用方适配,建议固定 =2.1.0 完成升级验证transaction_id 改为 Option;分账响应使用 state 并保留逐接收方结果,
请求携带 unfreeze_unsplit,解冻剩余资金使用 /v3/profitsharing/orders/unfreezetransfer_batch 模型,
创建应答包含 create_time、可选 batch_status,早期批次成功/失败计数为可选值Wechatpay-Serial;
不应继续由调用方预加密,避免双重加密;无姓名时避免复制整个请求Wechatpay-Serial,支持证书向公钥迁移;敏感字段选定的加密 serial 不被覆盖max_response_bytes 调整;禁止自动跳转和 reqwest 隐式重试Retry-After,
只重试适用状态、连接失败和超时,POST/PUT/PATCH 保持不自动重试event_type,保留旧 type 的输入兼容;支持退款成功、异常、关闭事件NotifyHeaders、VerifiedNotifyRequest 与 verify_and_parse,先校验完整签名头、
原始请求体、平台序列号及 300 秒时效,再解密并核对事件状态aws-lc-rs 替换 RSA 运算后端,移除命中 RUSTSEC-2023-0071 的 rsa 及相关传递依赖;
保持 SHA256-RSA 签名、PKCS#1/PKCS#8 私钥以及 PEM/DER 公钥兼容from_legacy_sha256_key、decrypt_legacy_sha256 显式迁移,不自动降级SignErrorCertRefreshHandle;start_auto_refresh 现在返回 Result,
调用方必须持有句柄,释放句柄即停止刷新platform_public_key(id, pem);配置及凭据 Debug 隐藏密钥,拒绝不受支持的 Sandbox 和非法配置webhook_actix.rs 示例及 actix-web 开发依赖(功能由等价的 webhook_axum.rs 覆盖),
消除 dev-dependency 链 actix-web → actix-http → h2 0.3.27 引入的
RUSTSEC-2026-0258(h2 unbounded empty DATA frames)告警,锁文件瘦身约 500 行(-48 个传递依赖)cargo shear 复核确认无其他未使用依赖thiserror 2.0.21、hyper-util 0.1.21、
tokio-rustls 0.26.6、rustls-platform-verifier 0.7.1 与 zerocopy 0.8.59;
移除不再使用的 multiversion、multiversion-macros 传递依赖aes-gcm 到 0.11.1、uuid 到 1.26、der 锁定到 0.8.2(传递依赖全量刷新:rustls、hyper、hickory、tokio-rustls 等)dropped_alerts,支持 with_pending_limit,避免并发限制之外仍积累无界等待任务ServiceTransport::build_headers:每次请求的 Authorization 头构建改为预分配容量 + write! 就地写入,去除 format! 临时分配Sha256RsaVerifier::build_verify_message:验签消息构建与签名路径对齐,预分配容量并就地格式化时间戳ReqwestHttpClient:POST/PUT/PATCH 请求体由”入参拷贝 + 每次重试再克隆”改为闭包借用 &str 按需分配,正常路径减少一次请求体拷贝ReqwestHttpClient 构建:启用 TCP_NODELAY,避免 Nagle 算法给小 JSON 报文带来的发送延迟WxPayRequest::full_url:URL 拼接改为预分配容量直接拼接,去除 format! 开销TransportEvent::alert_key:告警路由键拼接改为预分配容量就地写入CertManager:解析后证书与原始 DER 数据合并到单一 RwLock 映射,读写操作从两次加锁降为一次,并保证两份数据的原子一致性User-Agent 中硬编码的过期版本号,改为编译期注入 CARGO_PKG_VERSIONsign_message/build、verify_message/build、request/full_url)tokio feature 配置,移除 full,仅保留 SDK、示例和测试实际需要的运行时能力reqwest feature 配置,移除未使用的 form / query,保留 JSON、HTTP/2、系统代理、Hickory DNS 与 charset 解码支持tls-rustls 作为默认 crate feature,通过 reqwest/rustls 提供 HTTPS/TLS 支持,避免把 TLS 后端硬编码到基础依赖行uuid 到 1.24,并刷新锁文件中的相关传递依赖wiremock 集成测试(服务端到端签名/分发/解析 + HTTP 5xx 重试)与全模块单元测试,用例数达 200+crypto_demo、signing_demo、payment_native、query_and_refund、transfer_and_profit_sharing、
cert_download_demobenches/crypto(摘要 / nonce / AES / RSA 签名热路径)String::with_capacity + write! 取代 format!,Uuid::simple() 去掉 replaceAuthorization 头结尾引号缺失的签名问题,并清理若干 clippy 提示wechatpay-apiv3/wechatpay-go 的兼容入口与快捷方法,降低迁移成本Axum / Actix-Web Webhook 示例与 .env.example 本地联调模板docs feature 模块占位crates.io 发布校验与 2.0.0 版本准备