diff --git a/README.md b/README.md index 6a330696..9b6183f1 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ ### 1. 为什么要“造轮子”? -这都 2021 年了,官方本身提供的示例代码还只能运行在 .NET Framework on Windows 上;就连 RSA 签名这么基础的东西都没有人封装(确切的说是因为 RSA 有很多种分块模式和填充模式,网上能找到的往往只封装了其中一种,但却未必符合微信的要求);全网你也找不到一个封装 API 尽可能全的 .NET SDK,开源的项目不少,但作者都能坚持下去的不多。 +这都 2021 年了,官方本身提供的示例代码还只能运行在 .NET Framework on Windows 上;就连 RSA 签名这么基础的东西都没有人封装(确切地说是因为 RSA 有很多种分块模式和填充模式,网上能找到的往往只封装了其中一种,但却未必符合微信的要求);全网很难找到一个封装微信 API 尽可能全的 .NET SDK,开源的项目有不少,但作者能坚持下去的不多。 于是萌生了自己封装一个库的想法,打算解决这几个痛点,同时也是推广一下微软官方的 `System.Text.Json`。 @@ -61,10 +61,10 @@ 与另一个流行的 HTTP 库 [`RestSharp`](https://restsharp.dev/) 相比,`Flurl.Http` 底层基于 `System.Net.Http.HttpClient`,而 `RestSharp` 底层则基于 `System.Net.HttpWebRequest`,前者在多核多线程环境下的性能基准测试中表现要远优于后者,同时也是微软官方目前推荐的 HTTP 客户端方案。 -【附】微软官方关于 `System.Net.HttpWebRequest` 与 `System.Net.Http.HttpClient` 的说明: - -- https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httpwebrequest#remarks -- https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient#httpclient-and-net-core) +> 微软官方关于 `System.Net.HttpWebRequest` 与 `System.Net.Http.HttpClient` 的说明: +> +> - [《Microsoft Docs - HttpWebRequest 类(Systen.Net)》](https://docs.microsoft.com/zh-cn/dotnet/api/system.net.httpwebrequest#remarks) +> - [《Microsoft Docs - HttpClient 类(Systen.Net.Http)》](https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient#httpclient-and-net-core) ### 3. 本库与[盛派微信 SDK(Senparc.Weixin)](https://github.com/JeffreySu/WeiXinMPSDK)有什么区别? @@ -106,9 +106,9 @@ ## 使用案例 -| 项目名称 | 项目简介 | 项目地址 | -| :------: | :--------------------------------------------: | :--------------------------------------------------------------------------------------------: | -| CoreShop | 核心商城系统:支持可视化布局的 .NET 小程序商城 | [Gitee](https://gitee.com/CoreUnion/CoreShop)|[GitHub](https://github.com/CoreUnion/CoreShop) | +| 项目名称 | 项目简介 | 项目地址 | +| :------: | :--------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | +| CoreShop | 核心商城系统:支持可视化布局的 .NET 小程序商城 | [Gitee Repo](https://gitee.com/CoreUnion/CoreShop)
[GitHub Repo](https://github.com/CoreUnion/CoreShop) | 注:以上案例均来自第三方,本项目不对其项目做任何保证,仅作列举展示。如果你有项目也使用了本库、希望加到案例列表中,可以在 Issue 中提出。 @@ -116,9 +116,9 @@ ## 参与贡献 -- GitHub:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat +- GitHub Repo:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git -- Gitee:https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat +- Gitee Repo:https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git 以上仓库地址同步更新,均可接受 Issue 或 Pull Request。 diff --git a/docs/WechatApi/Advanced_JsonSerializer.md b/docs/WechatApi/Advanced_JsonSerializer.md index 90038941..41864f43 100644 --- a/docs/WechatApi/Advanced_JsonSerializer.md +++ b/docs/WechatApi/Advanced_JsonSerializer.md @@ -46,3 +46,5 @@ client.Configure(settings => settings.JsonSerializer = new FlurlNewtonsoftJsonSerializer(jsonSettings); }); ``` + +需要注意的是,虽然你也可在代码中指定成其他实现 `ISerializer` 的 JSON 序列化器,但因本库的接口模型定义与实际发送的 JSON 数据并非完全一致,使用其他实现会导致意外的执行结果,所以请务必只使用本库内置的这两种 JSON 序列化器。 \ No newline at end of file diff --git a/docs/WechatTenpayV3/Advanced_MerchantCertSerialNumber.md b/docs/WechatTenpayV3/Advanced_MerchantCertSerialNumber.md index 0a1f04b8..3bbeeaea 100644 --- a/docs/WechatTenpayV3/Advanced_MerchantCertSerialNumber.md +++ b/docs/WechatTenpayV3/Advanced_MerchantCertSerialNumber.md @@ -6,4 +6,13 @@ > > [《微信支付开发者文档 - 证书/密钥/签名介绍:私钥和证书 - 声明所使用的证书》](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_1.shtml#part-3) > -> [《微信支付开发者文档 - 常见问题:证书相关 - 如何查看证书序列号?》](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay7_0.shtml#part-5) \ No newline at end of file +> [《微信支付开发者文档 - 常见问题:证书相关 - 如何查看证书序列号?》](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay7_0.shtml#part-5) + +请开发者按上面参考阅读给出的方法自行查看证书序列号。 + +如果你已有 CER/CRT 格式的证书文件,你也可以利用本库提供的提供的 `RSAUtility` 工具类导出证书序列号: + +```csharp +string certificate = "CRT/CER 证书内容"; +string serialNumber = RSAUtility.ExportSerialNumber(certificate); +``` \ No newline at end of file diff --git a/docs/WechatTenpayV3/Advanced_RequestSensitiveDataEncryption.md b/docs/WechatTenpayV3/Advanced_RequestSensitiveDataEncryption.md index ea925197..6a965689 100644 --- a/docs/WechatTenpayV3/Advanced_RequestSensitiveDataEncryption.md +++ b/docs/WechatTenpayV3/Advanced_RequestSensitiveDataEncryption.md @@ -97,7 +97,7 @@ var client = new WechatTenpayClient(options); ```csharp var manager = new InMemoryCertificateManager(); // 为便于后续使用,该对象可使用全局单例的方式声明 -var options = new WechatTenpayClientOptions() { CertificateManager = certManager }; +var options = new WechatTenpayClientOptions() { CertificateManager = manager }; var client = new WechatTenpayClient(options); ``` @@ -109,7 +109,7 @@ var client = new WechatTenpayClient(options); /* 注意:QueryCertificatesAsync() 接口返回值需解密后再存入 */ /*    存入的证书式请参考上一小节给出的 CRT/CER 证书文件示例 */ /*    示例项目中也包含一段关于此的演示程序 */ -certManager.SetEntry(new CertificateEntry("CRT/CER 证书序列号", "CRT/CER 证书内容", "证书生效时间", "证书过期时间")); +manager.SetEntry(new CertificateEntry("CRT/CER 证书序列号", "CRT/CER 证书内容", "证书生效时间", "证书过期时间")); ``` 当然,现在的平台证书离过期还有很久,你也可以选择“偷懒”:提前下载好平台证书,在程序启动时记录一次即可。 diff --git a/docs/WechatTenpayV3/README.md b/docs/WechatTenpayV3/README.md index 8ea2108f..fe399d52 100644 --- a/docs/WechatTenpayV3/README.md +++ b/docs/WechatTenpayV3/README.md @@ -39,14 +39,14 @@ using SKIT.FlurlHttpClient.Wechat; using SKIT.FlurlHttpClient.Wechat.TenpayV3; using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings; -var certManager = new InMemoryCertificateManager(); +var manager = new InMemoryCertificateManager(); var options = new WechatTenpayClientOptions() { MerchantId = "微信商户号", MerchantV3Secret = "微信商户 v3 API 密钥", MerchantCertSerialNumber = "微信商户证书序列号", MerchantCertPrivateKey = "-----BEGIN PRIVATE KEY-----微信商户证书私钥-----END PRIVATE KEY-----", - CertificateManager = certManager // 证书管理器的具体用法请参阅下文的高级技巧 + CertificateManager = manager // 证书管理器的具体用法请参阅下文的高级技巧 }; var client = new WechatTenpayClient(options); ``` @@ -100,16 +100,16 @@ else - [如何使用拦截器?](./Advanced_Interceptor.md) -- [如何验证响应签名?](./Advanced_ResponseSignatureVerification.md) - - [如何加密请求中的敏感数据?](./Advanced_RequestSensitiveDataEncryption.md) - [如何解密响应中的敏感数据?](./Advanced_ResponseSensitiveDataDecryption.md) -- [如何验证回调通知事件签名?](./Advanced_EventSignatureVerification.md) +- [如何验证响应签名?](./Advanced_ResponseSignatureVerification.md) - [如何解密回调通知事件中的敏感数据?](./Advanced_EventResourceDecryption.md) +- [如何验证回调通知事件签名?](./Advanced_EventSignatureVerification.md) + - [如何生成客户端调起支付时所需的参数及签名?](./Advanced_Payment.md) - [如何扩展额外的 API?](./Advanced_Extensions.md)