在完成了所有的准备工作之后,我们开始进行实际的对接工作,由于官方没有提供C#版本的SDK我们需要自己手动实现所有的功能,介于再去研究文档太麻烦我们借助第三方的sdk 盛派微信 SDK 它是由苏震巍先生发起的国内知名的 .NET 开源项目。https://github.com/JeffreySu/WeiXinMPSDK
1.安装
盛派提供了源码和Nuget包两种方式,可以直接引用 Senparc.Weixin 的源码进行开发,也可以引用已经打包完成的 dll(通过 Nuget 包),这里我选择了引用Nuget包,方便后期直接更新。
这里我们安装以下四个包。
Senparc.Weixin
Senparc.Weixin.TenpayV3
Senparc.Weixin.MP.dll
Senparc.Weixin.AspNet
2.注册微信支付
在program中添加以下代码,需要注册微信公众号(因为微信支付需要一个载体(需要微信用户的标识openid),我使用的是公众号所以同时需要注册公众号)
//添加盛派sdk相关微信配置 这两句在Build之前
var app = builder.Build();
builder.Services.AddMemoryCache();
builder.Services.AddSenparcWeixinServices(builder.Configuration);
var app = builder.Build();
//启用盛派微信配置 下边这段代码在Build之后
var registerService = app.UseSenparcWeixin(app.Environment,
null /* 不为 null 则覆盖 appsettings 中的 SenpacSetting 配置*/,
null /* 不为 null 则覆盖 appsettings 中的 SenpacWeixinSetting 配置*/,
register => { /* CO2NET 全局配置 */ },
(register, weixinSetting) =>
{
//注册公众号信息(可以执行多次,注册多个公众号)
register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号");
//注册微信支付(可以执行多次,注册多个微信支付)
register.RegisterTenpayApiV3(weixinSetting, "【盛派网络小助手】微信支付(ApiV3)");
});
其中,weixinSetting 的值默认来自于 appsettings.json:
字符串内#和{}为占位符,如果有明文信息可以直接替换。比如"Token": “asdasdaszxczxvfdgf”
"SenparcWeixinSetting": {
"IsDebug": true,
//公众号
"Token": "#{Token}#",
"EncodingAESKey": "#{EncodingAESKey}#",
"WeixinAppId": "#{WeixinAppId}#",
"WeixinAppSecret": "#{WeixinAppSecret}#",
//微信支付V3
"TenPayV3_AppId": "#{TenPayV3_AppId}#",
"TenPayV3_AppSecret": "#{TenPayV3_AppSecret}#",
"TenPayV3_SubAppId": "#{TenPayV3_SubAppId}#",
"TenPayV3_SubAppSecret": "#{TenPayV3_SubAppSecret}#",
"TenPayV3_MchId": "#{TenPayV3_MchId}#",
"TenPayV3_SubMchId": "#{TenPayV3_SubMchId}#", //子商户,没有可留空
"TenPayV3_Key": "#{TenPayV3_Key}#",
"TenPayV3_TenpayNotify": "#{TenPayV3_TenpayNotify}#", //http://YourDomainName/TenpayApiV3/PayNotifyUrl
/* 支付证书私钥
* 1、支持明文私钥(无换行字符)
* 2、私钥文件路径(如:~/App_Data/cert/apiclient_key.pem),注意:必须放在 App_Data 等受保护的目录下,避免泄露
*/
"TenPayV3_PrivateKey": "#{TenPayV3_PrivateKey}#", //(新)证书私钥
"TenPayV3_SerialNumber": "#{TenPayV3_SerialNumber}#", //(新)证书序列号
"TenPayV3_ApiV3Key": "#{TenPayV3_APIv3Key}#" //(新)APIv3 密钥
}
Token
EncodingAESKey
WeixinAppId
WeixinAppSecret
这几个可以在微信公众号管理端获取,WeixinAppId,WeixinAppSecret必填。
TenPayV3_AppId,TenPayV3_AppSecret与公众号的一致
TenPayV3_MchId为微信支付商户的
TenPayV3_Key和TenPayV3_ApiV3Key一致在服务商后台,API安全中获取(第二篇文章有介绍)
TenPayV3_PrivateKey和TenPayV3_SerialNumber也在服务商后台,API安全中获取