.Net Core微信JSAPI支付API V3实现流程
1. 准备工作
在开始实现微信JSAPI支付API V3之前,需要确保以下准备工作已完成:
- 注册微信商户号,获取商户号和API密钥。
- 安装.Net Core开发环境,并创建一个.Net Core项目。
2. 导入微信支付SDK
在.Net Core项目中,使用NuGet包管理器导入微信支付SDK。打开NuGet包管理器控制台,运行以下命令:
Install-Package WechatPaySDK -Version 1.0.0
这个SDK提供了微信支付API V3的封装,让我们可以方便地调用微信支付的各种功能。
3. 配置微信支付参数
在代码中添加一个配置文件,用于存储微信支付相关的配置参数。在appsettings.json文件中添加以下配置项:
"WeChatPay": {
"AppId": "你的微信公众号AppId",
"MerchantId": "你的微信商户号",
"APIPrivateKeyPath": "你的API私钥文件路径",
"SerialNo": "你的证书序列号",
"WeChatPayCertificatePath": "你的微信支付平台证书文件路径",
"APICertificatePath": "你的API证书文件路径",
"APIPrivateKeyPassphrase": "你的API私钥密码"
}
这些参数将用于后续的API调用。
4. 发起微信支付
4.1 创建订单
首先,我们需要在后台生成一个订单,并将订单信息存储在数据库中。在创建订单时,需要指定以下参数:
- 商品描述
- 商户订单号
- 商品金额
- 用户的openid
- 支付成功后的回调URL
在代码中,可以使用微信支付SDK提供的UnifiedOrderRequest
类来构造订单请求参数,示例代码如下:
var request = new UnifiedOrderRequest
{
AppId = Configuration["WeChatPay:AppId"],
MerchantId = Configuration["WeChatPay:MerchantId"],
Description = "商品描述",
OutTradeNo = "商户订单号",
Amount = new Amount
{
Total = 1, // 商品金额,单位为分
Currency = "CNY" // 货币类型,目前仅支持人民币
},
Payer = new Payer
{
OpenId = "用户的openid"
},
NotifyUrl = "支付成功后的回调URL"
};
4.2 调用微信支付API
使用微信支付SDK提供的WechatPayClient
类来调用微信支付的API。实例化一个WechatPayClient
对象,并调用其ExecuteAsync
方法,传入订单请求参数,示例代码如下:
var client = new WechatPayClient(
new WechatPayOptions
{
MerchantId = Configuration["WeChatPay:MerchantId"],
PrivateKey = new PrivateKey("你的API私钥文件路径", "你的API私钥密码"),
Certificate = new Certificate("你的微信支付平台证书文件路径", "你的API证书文件路径")
}
);
var response = await client.ExecuteAsync(request);
ExecuteAsync
方法会返回一个UnifiedOrderResponse
对象,其中包含了微信支付的响应信息。
5. 处理支付结果
当用户在微信客户端完成支付后,微信服务器会将支付结果通知到我们指定的回调URL。我们需要在回调URL对应的接口中处理支付结果。
5.1 验证签名
首先,我们需要验证微信服务器发送过来的通知是否是合法的。使用微信支付SDK提供的WechatPayNotifyClient
类来验证签名。实例化一个WechatPayNotifyClient
对象,并调用其VerifyWechatPayNotifyAsync
方法,传入收到的通知原始内容和HTTP请求头,示例代码如下:
var client = new WechatPayNotifyClient(
new WechatPayOptions
{
MerchantId = Configuration["WeChatPay:MerchantId"],
Certificate = new Certificate("你的微信支付平台证书文件路径", "你的API证书文件路径")
}
);
bool isValid = await client.VerifyWechatPayNotifyAsync(requestBody, requestHeaders);
VerifyWechatPayNotifyAsync
方法会返回一个布尔值,表示