基于支付宝开放平台网关 API 实现,采用 RSA2(SHA256WithRSA)请求签名机制。
包信息
- NuGet 包:
Bitzsoft.Integrations.Payment.Alipay - 接口:
IPaymentProvider - 鉴权:RSA2(SHA256WithRSA)
- Provider ID:
alipay
配置
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
AppId | string | 是 | — | 支付宝应用 AppId |
AppPrivateKey | string | 是 | — | 应用私钥(PKCS#1 或 PKCS#8 PEM 格式,用于请求签名) |
AlipayPublicKey | string | 是 | — | 支付宝公钥(PEM 格式,用于回调验签) |
Gateway | string | 否 | https://openapi.alipay.com/gateway.do | 网关地址(沙箱 https://openapi-sandbox.dl.alipaydev.com/gateway.do) |
NotifyUrl | string? | 否 | — | 异步通知回调地址 |
SignType | string | 否 | RSA2 | 签名算法类型(可选 RSA 即 SHA1WithRSA,不推荐) |
Timeout | TimeSpan | 否 | 00:00:30 | HTTP 请求超时 |
HttpClientName | string | 否 | AlipayPaymentProvider | 命名 HttpClient 标识 |
{ "Alipay": { "AppId": "your-app-id", "AppPrivateKey": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----", "AlipayPublicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----", "Gateway": "https://openapi.alipay.com/gateway.do", "NotifyUrl": "https://your-site.com/callback/alipay", "SignType": "RSA2" }}注册
// 方式一:IConfiguration(默认读取 "Alipay" 配置节)services.AddBitzsoftAlipayPayment(configuration);
// 方式二:委托配置services.AddBitzsoftAlipayPayment(options =>{ options.AppId = "your-app-id"; options.AppPrivateKey = File.ReadAllText("app_private_key.pem"); options.AlipayPublicKey = File.ReadAllText("alipay_public_key.pem"); options.Gateway = "https://openapi.alipay.com/gateway.do";});使用示例
var orderResult = await provider.CreateOrderAsync(new PaymentOrderRequest{ OutTradeNo = "ORDER_20260801_001", Subject = "商品订单", TotalAmount = 99.90m, Scene = PaymentScene.Web});
var payUrl = orderResult.Data!.PayUrl;
// 查询状态var status = await provider.QueryStatusAsync("ORDER_20260801_001");
// 退款var refundResult = await provider.RefundAsync(new RefundRequest{ OutTradeNo = "ORDER_20260801_001", RefundAmount = 50.00m, RefundNo = "REFUND_001"});鉴权机制
- 请求签名:将所有请求参数按字典序排序拼接,使用应用私钥做 SHA256WithRSA 签名。
- 回调验签:使用支付宝公钥验证异步通知签名。
已知限制
AppPrivateKey 支持 PKCS#1 或 PKCS#8 格式,通过 RSA.ImportFromPem 自动解析。统一接口覆盖标准支付场景,复杂业务通过 partial class 扩展。