基于微信支付 APIv3 实现,采用 RSA-SHA256 请求签名和 AES-256-GCM 回调解密。
包信息
- NuGet 包:
Bitzsoft.Integrations.Payment.WeChatPay - 接口:
IPaymentProvider - 鉴权:RSA-SHA256 请求签名
- Provider ID:
wechatpay
配置
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
AppId | string | 是 | — | 微信应用 AppId(公众号 / 小程序 / APP) |
MchId | string | 是 | — | 商户号 |
MchSerialNo | string | 是 | — | 商户证书序列号(APIv3 请求签名头) |
APIv3Key | string | 是 | — | APIv3 密钥(32 字节,仅用于回调 AES-256-GCM 解密) |
PrivateKey | string | 是 | — | 商户 API 私钥(PEM 格式,用于 RSA-SHA256 签名) |
WeChatPayPublicKey | string | 是 | — | 微信支付平台公钥(PEM 格式,用于回调验签,非商户公钥) |
NotifyUrl | string? | 否 | — | 异步通知回调地址 |
ApiBase | string | 否 | https://api.mch.weixin.qq.com | API 基地址 |
Timeout | TimeSpan | 否 | 00:00:30 | HTTP 请求超时 |
HttpClientName | string | 否 | WeChatPayPaymentProvider | 命名 HttpClient 标识 |
{ "WeChatPay": { "AppId": "wx-your-appid", "MchId": "your-mch-id", "MchSerialNo": "your-cert-serial-no", "APIv3Key": "your-32-byte-apiv3-key", "PrivateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "WeChatPayPublicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----", "NotifyUrl": "https://your-site.com/callback/wechatpay" }}注册
// 方式一:IConfiguration(默认读取 "WeChatPay" 配置节)services.AddBitzsoftWeChatPayPayment(configuration);
// 方式二:委托配置services.AddBitzsoftWeChatPayPayment(options =>{ options.AppId = "wx-your-appid"; options.MchId = "your-mch-id"; options.MchSerialNo = "your-cert-serial-no"; options.APIv3Key = "your-32-byte-apiv3-key"; options.PrivateKey = File.ReadAllText("wechat_private_key.pem"); options.WeChatPayPublicKey = File.ReadAllText("wechatpay_public_key.pem");});使用示例
var orderResult = await provider.CreateOrderAsync(new PaymentOrderRequest{ OutTradeNo = "ORDER_20260801_002", Subject = "微信商品订单", TotalAmount = 199.00m, Scene = PaymentScene.App});
// 查询状态var status = await provider.QueryStatusAsync("ORDER_20260801_002");
// 关闭订单await provider.CloseOrderAsync("ORDER_20260801_002");鉴权机制
- 请求签名:使用商户私钥对请求做 RSA-SHA256 签名,
Authorization头携带商户证书序列号和签名。 - 回调验签:使用微信支付平台公钥验证
Wechatpay-Signature,再用APIv3Key做 AES-256-GCM 解密回调资源。
已知限制
WeChatPayPublicKey 是微信支付平台公钥,不是商户自己的公钥。多证书轮换暂不支持,当前仅使用单一配置公钥。