docs: 完善文档

This commit is contained in:
Fu Diwei 2021-07-27 18:37:38 +08:00
parent b62867de8d
commit 864cf5bdcf
31 changed files with 107 additions and 40 deletions

View File

@ -56,7 +56,7 @@
- Release 1.4.0
- **新增**:新增批量获取分账账单相关接口。
- **新增**:新增获取分账账单相关接口。
- **新增**:随官方更新分账、服务商分账接口相关字段。

View File

@ -35,12 +35,12 @@
## 模块
| 名称 | NuGet | 其他 |
| :---------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------: |
| 公众平台(公众号、小程序) & 开放平台模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Api.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Api) | [文档](./docs/WechatApi/README.md) |
| 商户平台(微信支付)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.TenpayV3.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3) | [文档](./docs/WechatTenpayV3/README.md) |
| 企业微信(企业号)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Work.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Work) | [文档](./docs/WechatWork/README.md) |
| 广告平台(广点通)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Ads.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Ads) | [文档](./docs/WechatAds/README.md) |
| 名称 | NuGet | 其他 |
| :---------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------: |
| 公众平台(公众号、小程序) & 开放平台模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Api.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Api) | [开发文档](./docs/WechatApi/README.md)[示例项目](./docs/WechatApi/Sample.md) |
| 商户平台(微信支付)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.TenpayV3.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3) | [开发文档](./docs/WechatTenpayV3/README.md) |
| 企业微信(企业号)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Work.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Work) | [开发文档](./docs/WechatWork/README.md) |
| 广告平台(广点通)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Ads.svg?sanitize=true)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Ads) | [开发文档](./docs/WechatAds/README.md) |
---

View File

@ -1,4 +1,4 @@
### 如何获取接口调用凭据?
## 如何获取接口调用凭据?
---

View File

@ -1,4 +1,4 @@
### 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
## 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
---

View File

@ -1,4 +1,4 @@
### 如何使用拦截器?
## 如何使用拦截器?
---

View File

@ -1,4 +1,4 @@
### 如何指定 JSON 序列化器?
## 如何指定 JSON 序列化器?
---

View File

@ -1,4 +1,4 @@
### 如何快速找到需要调用的 API 模型类名 / 方法名?
## 如何快速找到需要调用的 API 模型类名 / 方法名?
---

View File

@ -1,4 +1,4 @@
### 如何解析回调通知事件?
## 如何解析回调通知事件?
---

View File

@ -1,4 +1,4 @@
### 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
## 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
---
@ -32,9 +32,9 @@ public class WechatApiClientFactory
_httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory));
}
public Flurl.Http.IFlurlClient Get(Flurl.Url url)
public IFlurlClient Get(Flurl.Url url)
{
return new FlurlClient(_httpClientFactory.CreateClient(url.ToUri()));
return new FlurlClient(_httpClientFactory.CreateClient(url.ToUri().Host));
}
public void Dispose()

View File

@ -1,4 +1,4 @@
### 如何使用拦截器?
## 如何使用拦截器?
---

View File

@ -1,4 +1,4 @@
### 如何生成 JS-SDK 初始化时所需的参数及签名?
## 如何生成 JS-SDK 初始化时所需的参数及签名?
---

View File

@ -1,4 +1,4 @@
### 如何指定 JSON 序列化器?
## 如何指定 JSON 序列化器?
---

View File

@ -1,4 +1,4 @@
### 如何快速找到需要调用的 API 模型类名 / 方法名?
## 如何快速找到需要调用的 API 模型类名 / 方法名?
---

View File

@ -178,3 +178,9 @@ else
- [如何解析回调通知事件?](./Advanced_EventDataDeserialization.md)
- [如何生成 JS-SDK 初始化时所需的参数及签名?](./Advanced_JSSDK.md)
---
## 示例项目
- [示例项目说明](./Sample.md)

61
docs/WechatApi/Sample.md Normal file
View File

@ -0,0 +1,61 @@
## 示例项目
---
示例项目位于 _samples/SKIT.FlurlHttpClient.Wechat.Api.Sample_Net5_。
示例项目基于 .NET 5.0 实现,依赖如下的第三方库:
- [`DistributedLock`](https://github.com/madelson/DistributedLock):分布式锁。
- [`NMemory`](https://github.com/zzzprojects/nmemory):内存数据库。
示例项目实现了以下功能:
- 多租户 AccessToken 中控;
- 验证并接收微信服务器推送数据;
- 一个根据 OpenId 获取用户信息的 API。
---
### 关于 AccessToken 的刷新机制:
示例项目遵循微信官方建议的“使用中控服务器统一获取和刷新”原则,实现了 AccessToken 的主动刷新机制,开发者不需要、也不应该在业务代码中手动执行刷新操作。
所谓“主动刷新机制”,即由系统在后台周期性地执行刷新操作,在需要使用 AccessToken 时直接读取已有的记录即可,无需关心 AccessToken 是否过期。
与之相对应的是“被动刷新机制”,即在每次读取时先判断已有的记录是否过期,如果未过期则直接返回,如果过期则执行一次刷新操作后再返回。
开发者可根据业务需要自行实现被动刷新机制。
---
### 使用须知:
示例项目仅作为业务上的参考,不代表可直接用于生产。
开发者应提前知晓:
### 1. 分布式锁:
示例项目使用分布式锁来确保多节点并发情况下不会产生 AccessToken 刷新冲突问题。
示例中的分布式锁是基于文件系统实现的,仅为展示工作原理,只可用于单机环境下;如在生产项目中,请自行替换成基于数据库或 Redis 等实现的锁。
更多的分布式锁实现方案可直接参考 [`DistributedLock`](https://github.com/madelson/DistributedLock) 的开发文档。
### 2. 数据持久化:
示例项目仅为展示工作流程,未集成数据库来实现数据持久化。
程序中的全部数据都只在运行时内存可访问,一旦进程终止,数据将会丢失;如在生产项目中,请自行集成 MySql / SQL Server / Oracle 等数据库,或其他数据持久化方案。
### 3. 容错性:
示例项目中未额外处理异常(如:空指针等)。
### 4. 安全性:
示例项目中不包含授权认证等相关的业务逻辑,开发者可根据业务需要自行实现。

View File

@ -1,4 +1,4 @@
### 如何解密回调通知事件中的敏感数据?
## 如何解密回调通知事件中的敏感数据?
---

View File

@ -1,4 +1,4 @@
### 如何验证回调通知事件签名?
## 如何验证回调通知事件签名?
---

View File

@ -1,4 +1,4 @@
### 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
## 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
---

View File

@ -1,4 +1,4 @@
### 如何使用拦截器?
## 如何使用拦截器?
---

View File

@ -1,4 +1,4 @@
### 如何指定 JSON 序列化器?
## 如何指定 JSON 序列化器?
---

View File

@ -1,4 +1,4 @@
### 如何查看商户证书序列号?
## 如何查看商户证书序列号?
---

View File

@ -1,4 +1,4 @@
### 如何快速找到需要调用的 API 模型类名 / 方法名?
## 如何快速找到需要调用的 API 模型类名 / 方法名?
---
@ -14,7 +14,7 @@
---
【附 1】直连商户模式 API 模型命名速查表:
### 【附 1】直连商户模式 API 模型命名速查表:
注:树形结构与[微信支付开发者文档](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/index.shtml)目录结构保持一致。
@ -366,7 +366,7 @@
---
【附 2】服务商模式 API 模型命名速查表:
### 【附 2】服务商模式 API 模型命名速查表:
注:树形结构与[微信支付开发者文档](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/index.shtml)目录结构保持一致。

View File

@ -1,4 +1,4 @@
### 如何生成客户端调起支付时所需的参数及签名?
## 如何生成客户端调起支付时所需的参数及签名?
---

View File

@ -1,4 +1,4 @@
### 如何解密响应中的敏感数据?
## 如何解密响应中的敏感数据?
---

View File

@ -1,4 +1,4 @@
### 如何验证响应签名?
## 如何验证响应签名?
---
@ -16,7 +16,7 @@
---
#### 密钥文件格式说明:
### 密钥文件格式说明:
需要注意的是,微信商户平台提供的是 PEM 格式的密钥文件,分为以下几种:
@ -43,7 +43,7 @@ bool ret = RSAUtility.VerifyWithSHA256(publicKey, data, sign);
---
#### 通过 `CertificateManager` 管理平台证书信息:
### 通过 `CertificateManager` 管理平台证书信息:
微信商户平台证书需要通过 API 的方式获取、且可能同时存在多个有效证书,本库提供了一个 `CertificateManager` 类型可用于管理证书信息。

View File

@ -1,4 +1,4 @@
### 如何解析回调通知事件?
## 如何解析回调通知事件?
---

View File

@ -1,4 +1,4 @@
### 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
## 如何在 ASP.NET Core 中与 `IHttpClientFactory` 集成?
---

View File

@ -1,4 +1,4 @@
### 如何使用拦截器?
## 如何使用拦截器?
---

View File

@ -1,4 +1,4 @@
### 如何生成 JS-SDK 初始化时所需的参数及签名?
## 如何生成 JS-SDK 初始化时所需的参数及签名?
---

View File

@ -1,4 +1,4 @@
### 如何指定 JSON 序列化器?
## 如何指定 JSON 序列化器?
---

View File

@ -1,4 +1,4 @@
### 如何快速找到需要调用的 API 模型类名 / 方法名?
## 如何快速找到需要调用的 API 模型类名 / 方法名?
---