微信支付 API v3 Rust SDK
微信支付 API v3 的 Rust 实现 SDK,提供类型安全、高性能的微信支付接口封装。
✨ 特性
- 🔐 完整的签名与验签 - SHA256-RSA 签名算法,自动请求签名和应答验签
- 🔒 敏感信息加解密 - RSA-OAEP 加密/解密,AES-256-GCM 回调通知解密
- 📜 证书管理 - 自动定时下载和更新微信支付平台证书
- 💳 全支付方式支持 - JSAPI、Native、H5、APP 支付
- 🔄 回调通知处理 - 完整的支付回调验证和解密
- 📊 丰富的业务 API - 支付、退款、分账、转账等完整业务支持
- ⚡ 异步优先 - 基于 Tokio 的全异步实现,高性能并发
- 🛡️ 类型安全 - Rust 强类型系统保障,编译期错误检查
📦 安装
在 Cargo.toml 中添加:
[]
= "2.0.0"
= { = "1", = ["full"] }
= { = "1", = ["derive"] }
= "1"
🧭 迁移与 Webhook 示例入口
如果你是从 wechatpay-apiv3/wechatpay-go 迁移过来,或者准备直接接入支付/退款回调,可以先看这几份材料:
- examples/webhook_axum.rs:
Axum支付/退款回调可编译骨架 - examples/webhook_actix.rs:
Actix-Web支付/退款回调可编译骨架 - .env.example:本地联调所需环境变量模板
常见启动方式:
# Axum
# Actix-Web
Go 风格兼容入口
为了让 wechatpay-go 迁移更平滑,当前还额外提供了一层薄兼容入口:
client.refunddomestic()/client.transferbatch()/client.profitsharing()client.query().query_order_by_out_trade_no(...)client.query().query_order_by_id(...)client.refunddomestic().query_by_out_refund_no(...)client.transferbatch().initiate_batch_transfer(...)client.transferbatch().get_transfer_batch_by_out_batch_no(...)client.profitsharing().create_order(...)client.profitsharing().query_order(...)client.profitsharing().finish_order(...)
如果你希望在第一轮迁移中尽量少改调用名,可以优先使用这层兼容入口,后续再逐步回收成 wxpay-rs 原生风格 API。
说明:
- 仓库内不再跟踪迁移草稿型文档,发布版以
README、crate API 和examples/为准。 - 如果你需要本地迁移笔记,建议放在已忽略的
local-docs/目录中自行维护。
🚀 快速开始
初始化客户端
use ;
use PathBuf;
async
JSAPI 支付示例
use *;
use WxPayClient;
async
Native 支付示例
use *;
async
查询订单
use *;
async
申请退款
use *;
async
处理回调通知
use ;
use Transaction;
async
📁 项目结构
wxpay-rs/
├── Cargo.toml # 项目配置
├── src/
│ ├── lib.rs # 库入口
│ ├── client.rs # HTTP 客户端实现
│ ├── config.rs # 配置管理
│ ├── error.rs # 错误类型定义
│ ├── auth/ # 认证模块
│ │ ├── mod.rs
│ │ ├── signer.rs # 签名器
│ │ ├── verifier.rs # 验签器
│ │ └── credentials.rs # 凭证管理
│ ├── cipher/ # 加解密模块
│ │ ├── mod.rs
│ │ ├── rsa.rs # RSA-OAEP 加解密
│ │ └── aes.rs # AES-256-GCM 加解密
│ ├── cert/ # 证书管理
│ │ ├── mod.rs
│ │ ├── downloader.rs # 证书下载器
│ │ └── visitor.rs # 证书访问器
│ ├── notify/ # 回调通知处理
│ │ ├── mod.rs
│ │ └── handler.rs # 通知处理器
│ ├── utils/ # 工具函数
│ │ ├── mod.rs
│ │ ├── nonce.rs # 随机数生成
│ │ ├── signature.rs # 签名工具
│ │ └── xml.rs # XML 处理(v2 兼容)
│ └── services/ # 业务服务模块
│ ├── mod.rs
│ ├── certificates.rs # 平台证书服务
│ ├── payments/ # 支付服务
│ │ ├── mod.rs
│ │ ├── jsapi.rs # JSAPI 支付
│ │ ├── native.rs # Native 支付
│ │ ├── h5.rs # H5 支付
│ │ ├── app.rs # APP 支付
│ │ └── query.rs # 订单查询
│ ├── refund.rs # 退款服务
│ ├── profit_sharing.rs # 分账服务
│ ├── transfer.rs # 转账服务
│ └── fileuploader.rs # 文件上传服务
├── examples/ # 示例代码
│ ├── jsapi_payment.rs
│ ├── native_payment.rs
│ ├── refund.rs
│ └── notify.rs
└── tests/ # 集成测试
├── integration_test.rs
└── mock_server.rs
🔧 配置选项
完整配置示例
use ;
use PathBuf;
let config = builder
.app_id
.mch_id
.api_v3_key
.merchant_cert_path
.merchant_key_path
.sign_type // 签名类型
.auth_type // 认证类型:证书或公钥
.timeout // 超时时间
.auto_download_certs // 自动下载证书
.cert_download_interval // 证书下载间隔(秒)
.base_url // API 基础 URL
.sandbox // 是否使用沙箱环境
.build?;
使用公钥验签(新入驻商户)
let config = builder
.app_id
.mch_id
.api_v3_key
.merchant_cert_path
.merchant_key_path
.auth_type
.build?;
📚 支持的 API 列表
支付服务
| API | 说明 | 状态 |
|---|---|---|
jsapi().prepay() |
JSAPI 预支付 | ✅ |
native().prepay() |
Native 预支付 | ✅ |
h5().prepay() |
H5 预支付 | ✅ |
app().prepay() |
APP 预支付 | ✅ |
query().by_transaction_id() |
微信支付单号查询 | ✅ |
query().by_out_trade_no() |
商户订单号查询 | ✅ |
query().by_filter() |
复杂条件查询 | ✅ |
query().close() |
关闭订单 | ✅ |
退款服务
| API | 说明 | 状态 |
|---|---|---|
refund().create() |
申请退款 | ✅ |
refund().query() |
查询退款 | ✅ |
分账服务
| API | 说明 | 状态 |
|---|---|---|
profit_sharing().create() |
创建分账 | ✅ |
profit_sharing().query() |
查询分账 | ✅ |
profit_sharing().add_receiver() |
添加分账接收方 | ✅ |
profit_sharing().delete_receiver() |
删除分账接收方 | ✅ |
profit_sharing().finish() |
完成分账 | ✅ |
转账服务
| API | 说明 | 状态 |
|---|---|---|
transfer().create() |
发起转账 | ✅ |
transfer().query() |
查询转账 | ✅ |
证书服务
| API | 说明 | 状态 |
|---|---|---|
certificates().get_certificates() |
获取平台证书 | ✅ |
文件服务
| API | 说明 | 状态 |
|---|---|---|
fileuploader().upload_image() |
上传图片 | ✅ |
fileuploader().upload_video() |
上传视频 | ✅ |
🔐 安全特性
签名算法
- SHA256-RSA - 默认签名算法,推荐使用
- HMAC-SHA256 - 备用签名算法
敏感信息加密
use RsaCipher;
// 加密敏感信息
let encrypted = encrypt_with_certificate?;
// 解密敏感信息
let decrypted = decrypt_with_private_key?;
回调通知验证
use NotifyHandler;
// 验证通知签名
let is_valid = handler.verify_signature?;
// 解密通知数据
let decrypted = handler.decrypt_notification?;
🧪 测试
运行测试
# 运行所有测试
# 运行集成测试
# 运行示例
沙箱环境测试
let config = builder
.sandbox
// ... 其他配置
.build?;
📖 示例代码
完整的支付流程示例
use ;
use PathBuf;
async
🤝 贡献
欢迎提交 Issue 和 Pull Request!
开发环境设置
# 克隆仓库
# 运行测试
# 运行示例
📄 许可证
本项目采用 Apache-2.0 许可证。
🔗 相关链接
⚠️ 注意事项
- 密钥安全:请妥善保管商户私钥和 APIv3 密钥,不要泄露或提交到代码仓库
- 证书更新:建议启用自动证书下载功能,确保证书及时更新
- 错误处理:所有 API 调用都应进行适当的错误处理
- 日志记录:建议开启日志记录,便于问题排查
- 超时设置:根据业务需求合理设置超时时间
📞 支持
如有问题,请通过以下方式联系:
- 提交 GitHub Issue
- 邮件联系:housemecn@gmail.com