mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-04-04 14:43:45 +08:00
parent 1574709ba5
author Fu Diwei <fudiwei@sina.com> 1635352443 +0800 committer Fu Diwei <fudiwei@sina.com> 1635414361 +0800 docs: 完善文档
This commit is contained in:
parent
1574709ba5
commit
9fdcf30c74
@ -44,7 +44,7 @@
|
||||
|
||||
1. 操作系统:请填写发生问题的操作系统环境信息(如:Windows Server 2012 R2)
|
||||
2. .NET 版本:请填写发生问题的 .NET 环境信息(如:.NET Framework 4.7.2 / .NET 5.0)
|
||||
3. 使用的模块及版本:请填写发生问题的模板信息(如:SKIT.FlurlHttpClient.Wechat.Api 1.0.0)
|
||||
3. 使用的模块及版本:请填写发生问题的模块信息(如:SKIT.FlurlHttpClient.Wechat.Api 1.0.0)
|
||||
4. 其他环境信息。
|
||||
|
||||
---
|
||||
|
2
.github/ISSUE_TEMPLATE/1_bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/1_bug_report.md
vendored
@ -40,7 +40,7 @@ assignees: ''
|
||||
|
||||
1. 操作系统:请填写发生问题的操作系统环境信息(如:Windows Server 2012 R2)
|
||||
2. .NET 版本:请填写发生问题的 .NET 环境信息(如:.NET Framework 4.7.2 / .NET 5.0)
|
||||
3. 使用的模块及版本:请填写发生问题的模板信息(如:SKIT.FlurlHttpClient.Wechat.Api 1.0.0)
|
||||
3. 使用的模块及版本:请填写发生问题的模块信息(如:SKIT.FlurlHttpClient.Wechat.Api 1.0.0)
|
||||
4. 其他环境信息。
|
||||
|
||||
---
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
同样的,你既可以利用本库提供的 `RSAUtility` 工具类自行进行签名验证,也可以通过 `CertificateManager` 尝试自动完成签名验证:
|
||||
|
||||
注意,有关 `CertificateManager` 的具体用法,请务必阅读上方给出的相关文档。
|
||||
请注意,有关 `CertificateManager` 的具体用法、及相关证书或公钥格式的说明,请务必先阅读上方给出的相关文档。
|
||||
|
||||
```csharp
|
||||
bool ret = client.VerifyEventSignature(
|
||||
|
@ -8,7 +8,7 @@
|
||||
>
|
||||
> [《微信支付开发者文档 - 平台证书:更新指引》](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay5_0.shtml)
|
||||
|
||||
验签过程中需要使用的微信商户平台证书,开发者可通过本库封装的 `QueryCertificatesAsync()` 方法来获取。
|
||||
验签过程中需要使用的平台证书,开发者可通过本库封装的 `QueryCertificatesAsync()` 方法来获取。
|
||||
|
||||
每个响应对象均包含名为 `WechatpayTimestamp`、`WechatpayNonce`、`WechatpaySignature` 的几个公共字段,你可根据官方文档的规则利用本库提供的 `RSAUtility` 工具类自行进行签名验证。
|
||||
|
||||
@ -16,6 +16,19 @@
|
||||
|
||||
---
|
||||
|
||||
### 重要说明
|
||||
|
||||
请在开发过程中注意区分**商户证书**和**平台证书**:
|
||||
|
||||
- **商户证书**用于生成请求的签名,需要在构建客户端配置项时指定(即 `WechatTenpayClientOptions` 对象中的证书序列号和公钥);
|
||||
- **平台证书**用于验证响应或回调的签名,需要通过接口获取(即 `QueryCertificatesAsync` 方法,注意证书内容需要解密)。
|
||||
|
||||
如果你在后面的验签过程出现验签不通过的情况,请先检查是否混淆了这两个证书。
|
||||
|
||||
关于证书的更多注意事项,请参阅[《微信支付开发者文档 - 常见问题:证书相关》](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay7_0.shtml)
|
||||
|
||||
---
|
||||
|
||||
### 密钥文件格式说明:
|
||||
|
||||
需要注意的是,微信商户平台提供的是 PEM 格式的密钥文件,分为以下几种:
|
||||
@ -72,3 +85,40 @@ certManager.SetCertificate("CER 证书序列号", "CER 证书内容");
|
||||
```csharp
|
||||
bool ret = client.VerifyResponseSignature(response);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 自定义 `CertificateManager` 实现
|
||||
|
||||
上一小节提到,你可自行继承并实现一个 `CertificateManager`,例如利用数据库或 Redis 等方式存取证书信息。
|
||||
|
||||
下面给出一个利用 Redis 存储的示例代码:
|
||||
|
||||
```csharp
|
||||
using StackExchange.Redis;
|
||||
|
||||
public class RedisCertificateManager : CertificateManager
|
||||
{
|
||||
private readonly ConnectionMultiplexer _connection;
|
||||
|
||||
public RedisCertificateManager(string connectionString)
|
||||
{
|
||||
_connection = ConnectionMultiplexer.Connect(connectionString);
|
||||
}
|
||||
|
||||
private string GenerateRedisKey(string serialNumber)
|
||||
{
|
||||
return string.Format("wxpaypc-{0}", serialNumber);
|
||||
}
|
||||
|
||||
public override string GetCertificate(string serialNumber)
|
||||
{
|
||||
return _connection.StringGet(GenerateRedisKey(serialNumber));
|
||||
}
|
||||
|
||||
public override void SetCertificate(string serialNumber, string certificate)
|
||||
{
|
||||
_connection.StringSet(GenerateRedisKey(serialNumber), certificate, TimeSpan.FromDays(90));
|
||||
}
|
||||
}
|
||||
```
|
@ -1,9 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings
|
||||
{
|
||||
@ -32,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings
|
||||
/// </summary>
|
||||
public class InMemoryCertificateManager : CertificateManager
|
||||
{
|
||||
public IDictionary<string, string> _dict;
|
||||
private readonly IDictionary<string, string> _dict;
|
||||
|
||||
public InMemoryCertificateManager()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user