如何创建一个企业网站,重庆网站推广方法大全,网络推广外包联系方式,网站备案变更接入缘起今年公司某个项目需要全面接入微信支付 V3 版 API。起初觉得#xff0c;2014 年微信支付就已上线了 V3 版 API#xff0c;这都 2021 年了#xff0c;就算官方不给力#xff0c;怎么着社区也该有几个造好的 .NET 的轮子了吧#xff1f;于是兴冲冲地到 NuGet 上开始搜索… 缘起今年公司某个项目需要全面接入微信支付 V3 版 API。起初觉得2014 年微信支付就已上线了 V3 版 API这都 2021 年了就算官方不给力怎么着社区也该有几个造好的 .NET 的轮子了吧于是兴冲冲地到 NuGet 上开始搜索“微信支付”四个大字结果……倒不是没有现成的轮子但基本都是只包含一些简单 API如下单、查单、退款等等与需求不符偶尔有一些看似封装全的点进去一看却是基于 V2 版 API 的。没办法自己动手丰衣足食接入了微信支付后想着既然微信支付都有了为啥不把公众号、小程序、企业微信之类的也接入了呢于是乎 SKIT.FlurlHttpClient.Wechat 这个项目就诞生了。 项目介绍SKIT.FlurlHttpClient.Wechat 是一个基于 Flurl.Http 的微信 API HTTP 客户端。包含以下特性支持 .NET Framework 4.6.1、.NET Standard 2.0、.NET Core 2.0、.NET 5。支持 Windows / Linux / macOS 多平台部署。支持 System.Text.Json默认和 Newtonsoft.Json 两种序列化方式。异步式编程。强类型接口模型。提供拦截器功能。提供微信 API 所需的 MD5、SHA-1、SHA-256、AES、RSA 等算法工具类。完整、完善、完全的微信 API 封装同时可灵活自行扩展。现有以下模块公众平台公众号、小程序、小游戏、小商店 开放平台模块SKIT.FlurlHttpClient.Wechat.Api商户平台微信支付模块SKIT.FlurlHttpClient.Wechat.TenpayV3企业微信企业号模块SKIT.FlurlHttpClient.Wechat.Work广告平台广点通模块SKIT.FlurlHttpClient.Wechat.Ads 快速开始以接入微信支付为例其他模块的开发流程与之十分类似。安装dotnet add package SKIT.FlurlHttpClient.Wechat.TenpayV3
初始化using SKIT.FlurlHttpClient.Wechat;using SKIT.FlurlHttpClient.Wechat.TenpayV3;using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings;
/* 平台证书管理器具体用法请参见文档 */var certManager new InMemoryCertificateManager();/* 仅列出必须配置项。也包含一些诸如超时时间、UserAgent 等的配置项 */var options new WechatTenpayClientOptions(){MerchantId 微信商户号,MerchantV3Secret 微信商户 v3 API 密钥,MerchantCertSerialNumber 微信商户证书序列号,MerchantCertPrivateKey -----BEGIN PRIVATE KEY-----微信商户证书私钥-----END PRIVATE KEY-----,CertificateManager certManager};var client new WechatTenpayClient(options);发送请求using SKIT.FlurlHttpClient.Wechat.TenpayV3;using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models;
/* 以 JSAPI 统一下单接口为例 */var request new CreatePayTransactionJsapiRequest(){OutTradeNumber 商户订单号,AppId 微信 AppId,Description 订单描述,ExpireTime DateTimeOffset.Now.AddMinutes(15),NotifyUrl https://example.com,Amount new CreatePayTransactionJsapiRequest.Types.Amount(){Total 100},Payer new CreatePayTransactionJsapiRequest.Types.Payer(){OpenId 微信 OpenId}};var response await client.ExecuteCreatePayTransactionJsapiAsync(request);if (response.IsSuccessful()){Console.WriteLine(PrepayId response.PrepayId);}else{Console.WriteLine(HTTP 状态 response.RawStatus);Console.WriteLine(错误代码 response.ErrorCode);Console.WriteLine(错误描述 response.ErrorMessage);}验证响应签名/* 一般情况下可以跳过验证响应的签名 */bool valid client.VerifyResponseSignature(response);生成客户端 JS-SDK 调起支付所需参数/* 字典结构包含客户端 JS-SDK 调起支付所需的完整参数 */var paramMap client.GenerateParametersForJsapiPayRequest(request.AppId, response.PrepayId);验签、解析并解密微信回调通知中的敏感信息string callbackJson { 微信商户平台发来的 JSON 格式的通知内容 };string callbackTimestamp 微信回调通知中的 Wechatpay-Timestamp 标头;string callbackNonce 微信回调通知中的 Wechatpay-Nonce 标头;string callbackSignature 微信回调通知中的 Wechatpay-Signature 标头;string callbackSerialNumber 微信回调通知中的 Wechatpay-Serial 标头;
bool valid client.VerifyEventSignature(callbackTimestamp, callbackNonce, callbackJson, callbackSignature, callbackSerialNumber);if (valid){/* 将 JSON 反序列化得到通知对象 *//* 你也可以将 WechatTenpayEvent 类型直接绑定到 MVC 模型上这样就不再需要手动反序列化 */var callbackModel client.DeserializeEvent(callbackJson);if (TRANSACTION.SUCCESS.Equals(callbackModel.EventType)){/* 根据事件类型解密得到支付通知敏感数据 */var callbackResource client.DecryptEventResourceEvents.TransactionResource(callbackModel);string outTradeNumber callbackResource.OutTradeNumber;string transactionId callbackResource.TransactionId;Console.WriteLine(订单 {0} 已完成支付交易单号为 {1}, outTradeNumber, transactionId);}}更多使用说明请阅读项目仓库中的开发文档。项目仓库中还包含了一个示例项目以供开发者快速掌握本库的使用方法。 FAQ1. Flurl.Http 是什么Flurl.Http 是一个轻量级 HTTP 库是 .NET 中最受欢迎扩展库之一在 NuGet 上的累计下载量超过 1700 万、日均下载量超过 6 千、GitHub 2.6k Stars数据统计截至 2021-06-01。与另一个流行的 HTTP 库 RestSharp 相比Flurl.Http 底层基于 System.Net.Http.HttpClient而 RestSharp 底层则基于 System.Net.HttpWebRequest前者在多核多线程环境下的性能基准测试中表现要远优于后者同时也是微软官方目前推荐的 HTTP 客户端方案。2. 本库与盛派微信 SDKSenparc.Weixin有什么区别本库专注于 API 本身的封装捎带提供了一些用于加解密、序列化的工具类使用更灵活盛派微信 SDK 提供了大而全的功能可与 MVC / WebAPI 深度集成。本库遵循微软官方推荐的 C# 属性命名方式大驼峰命名法对接口模型进行定义盛派微信 SDK 提供的是微信接口本身的命名方式蛇形命名法和小驼峰命名法混杂。本库封装了目前微信官方提供的所有 API盛派微信 SDK 只提供了常用的 API。3. 为什么不支持 .NET Framework 4.0 / .NET Framework 4.5直接原因是本库的依赖库最低支持到 .NET Framework 4.6.1。间接原因是为了支持跨平台的 .NET Standard 2.0只能兼容到 .NET Framework 4.6.1。根本原因是微软官方已于 2016 年 1 月 12 日终止了对 .NET Framework 4.6.1 以下版本的技术支持。也就是说微软已经不再为此提供安全更新在大部分技术合规要求中这一点都是扣分项所以建议各位开发者目标框架能升级就升级。 仓库GitHubhttps://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.WechatGiteehttps://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat以上仓库地址同步更新均可接受 Issue 或 Pull Request。