From 05cd78a5c23c3faedb98f91a033ba911aff26caa Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 25 Jan 2022 15:46:59 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +- .../Advanced_EventResourceDecryption.md | 25 + .../Advanced_EventSignatureVerification.md | 15 + docs/WechatTenpayV2/Advanced_Interceptor.md | 5 + .../WechatTenpayV2/Advanced_JsonSerializer.md | 5 + .../Advanced_ModelDefinition.md | 439 ++++++++++++++++++ docs/WechatTenpayV2/Advanced_Payment.md | 55 +++ docs/WechatTenpayV2/README.md | 101 ++++ docs/WechatTenpayV3/Advanced_Payment.md | 2 +- 9 files changed, 650 insertions(+), 4 deletions(-) create mode 100644 docs/WechatTenpayV2/Advanced_EventResourceDecryption.md create mode 100644 docs/WechatTenpayV2/Advanced_EventSignatureVerification.md create mode 100644 docs/WechatTenpayV2/Advanced_Interceptor.md create mode 100644 docs/WechatTenpayV2/Advanced_JsonSerializer.md create mode 100644 docs/WechatTenpayV2/Advanced_ModelDefinition.md create mode 100644 docs/WechatTenpayV2/Advanced_Payment.md create mode 100644 docs/WechatTenpayV2/README.md diff --git a/README.md b/README.md index 0979e701..e765c507 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ | 名称 | NuGet | 其他 | | :--------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: | | 公众平台(公众号、小程序)
+ 开放平台模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Api.svg?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Api)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.Api.svg?sanitize=true&label=Downloads)](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?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.TenpayV3.svg?sanitize=true&label=Downloads)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3) | [开发文档](./docs/WechatTenpayV3/README.md)|[示例项目](./docs/WechatTenpayV3/Sample.md) | +| 商户平台(微信支付)模块
(v3 版) | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.TenpayV3.svg?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.TenpayV3.svg?sanitize=true&label=Downloads)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3) | [开发文档](./docs/WechatTenpayV3/README.md)|[示例项目](./docs/WechatTenpayV3/Sample.md) | +| 商户平台(微信支付)模块
(v2 版) | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.TenpayV2.svg?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV2)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.TenpayV2.svg?sanitize=true&label=Downloads)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV2) | [开发文档](./docs/WechatTenpayV2/README.md) | | 企业微信(企业号)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.Work.svg?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Work)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.Work.svg?sanitize=true&label=Downloads)](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?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Ads)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.Ads.svg?sanitize=true&label=Downloads)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.Ads) | [开发文档](./docs/WechatAds/README.md) | | 对话开放平台(微信智能对话)模块 | [![NuGet Version](https://img.shields.io/nuget/v/SKIT.FlurlHttpClient.Wechat.OpenAI.svg?label=NuGet)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.OpenAI)
[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.OpenAI.svg?sanitize=true&label=Downloads)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.OpenAI) | [开发文档](./docs/WechatOpenAI/README.md) | @@ -106,8 +107,8 @@ ## 使用案例 -| 项目名称 | 项目简介 | 项目地址 | -| :------: | :--------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | +| 项目名称 | 项目简介 | 项目地址 | +| :------: | :--------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | CoreShop | 核心商城系统:支持可视化布局的 .NET 商城系统。 | [![Gitee Stars](https://gitee.com/CoreUnion/CoreShop/badge/star.svg?title=Stars)](https://gitee.com/CoreUnion/CoreShop)
[![GitHub Stars](https://img.shields.io/github/stars/CoreUnion/CoreShop?logo=github&label=Stars)](https://github.com/CoreUnion/CoreShop) | 注:以上案例均来自第三方,本项目不对其项目做任何保证,仅作列举展示。如果你有项目也使用了本库、希望加到案例列表中,可以在 Issue 中提出。 diff --git a/docs/WechatTenpayV2/Advanced_EventResourceDecryption.md b/docs/WechatTenpayV2/Advanced_EventResourceDecryption.md new file mode 100644 index 00000000..f93106c6 --- /dev/null +++ b/docs/WechatTenpayV2/Advanced_EventResourceDecryption.md @@ -0,0 +1,25 @@ +## 如何解密回调通知事件中的敏感数据? + +--- + +### 解密流程 + +对于回调通知事件的敏感信息,微信商户平台使用了商户密钥基于 AES 算法加密。 + +开发者可利用本库提供的 `AESUtility` 工具类自行解密相关字段。 + +此外,本库还封装了直接解密事件的扩展方法,下面给出一个示例代码: + +```csharp +/* 微信商户平台发来的通知内容 */ +string callbackXml = " ... "; +/* 将 XML 反序列化得到通知对象 */ +var callbackModel = client.DeserializeEvent(callbackJson); +/* 解密得到支付通知敏感数据(以退款结果通知为例) */ +var callbackResource = client.DecryptEventRequestInfo(callbackModel); +string outRefundNumber = callbackResource.OutRefundNumber; +string refundId = callbackResource.RefundId; +} +``` + +完整的回调通知模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Events_ 目录。 diff --git a/docs/WechatTenpayV2/Advanced_EventSignatureVerification.md b/docs/WechatTenpayV2/Advanced_EventSignatureVerification.md new file mode 100644 index 00000000..e6268d48 --- /dev/null +++ b/docs/WechatTenpayV2/Advanced_EventSignatureVerification.md @@ -0,0 +1,15 @@ +## 如何验证回调通知事件签名? + +--- + +### 验签流程 + +你可根据官方文档的规则利用本库提供的 `MD5Utility`、`HMACUtility` 工具类自行进行签名验证。 + +此外,本库还封装了直接解密事件的扩展方法,下面给出一个示例代码: + +```csharp +bool ret = client.VerifyEventSignature( + callbackBody: " 微信回调通知中请求正文 XML 内容 " +); +``` \ No newline at end of file diff --git a/docs/WechatTenpayV2/Advanced_Interceptor.md b/docs/WechatTenpayV2/Advanced_Interceptor.md new file mode 100644 index 00000000..ad746617 --- /dev/null +++ b/docs/WechatTenpayV2/Advanced_Interceptor.md @@ -0,0 +1,5 @@ +## 如何使用拦截器? + +--- + +拦截器在本库下的用法与在 [SKIT.FlurlHttpClient.Wechat.Api](../WechatApi/README.md) 模块下的用法类似,请参阅[相关文档](../WechatApi/Advanced_Interceptor.md)。 diff --git a/docs/WechatTenpayV2/Advanced_JsonSerializer.md b/docs/WechatTenpayV2/Advanced_JsonSerializer.md new file mode 100644 index 00000000..fd63533a --- /dev/null +++ b/docs/WechatTenpayV2/Advanced_JsonSerializer.md @@ -0,0 +1,5 @@ +## 如何指定 JSON 序列化器? + +--- + +JSON 序列化器在本库下的用法与在 [SKIT.FlurlHttpClient.Wechat.Api](../WechatApi/README.md) 模块下的用法类似,请参阅[相关文档](../WechatApi/Advanced_JsonSerializer.md)。 \ No newline at end of file diff --git a/docs/WechatTenpayV2/Advanced_ModelDefinition.md b/docs/WechatTenpayV2/Advanced_ModelDefinition.md new file mode 100644 index 00000000..3b1ec836 --- /dev/null +++ b/docs/WechatTenpayV2/Advanced_ModelDefinition.md @@ -0,0 +1,439 @@ +## 如何快速找到需要调用的 API 模型类名 / 方法名? + +--- + +本库提供的请求模型、响应模型和接口方法,三者均保持同名。 + +例如,发起退款的请求是 `CreatePayRefundRequest`,响应是 `CreatePayRefundResponse`,接口是 `ExecuteCreatePayRefundAsync()`。知道其中一个,其余两个就可以快速地推断出了。 + +再有,每个对象的命名与官方文档的接口地址大体保持一致。例如刚刚提到的发起退款,它的接口地址是 `[POST] /secapi/pay/refund`,将其中的反斜杠去掉、并以大驼峰命名法的方式调整它,就可以得到前文提到的几个对象了。 + +另外,以 `Query` 开头的一般表示列表查询;以 `Get` 开头的一般表示获取详情;以 `Create` 开头的一般表示发起或新建操作。 + +完整的模型定义可以参考项目目录下的 _src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models_ 目录。 + +--- + +### 微信支付 API 支持情况: + +
+ +[展开查看] + +| | 微信 API | 商户类型 | 备注 | +| :-: | :-----------------------------------: | :------------------------------: | :------------------: | +| √ | 支付产品:付款码支付 | 普通商户 & 境内服务商 | | +| √ | 支付产品:JSAPI 支付 | 普通商户 & 境内服务商 | | +| √ | 支付产品:Native 支付 | 普通商户 & 境内服务商 | | +| √ | 支付产品:APP 支付 | 普通商户 & 境内服务商 | | +| √ | 支付产品:H5 支付 | 普通商户 & 境内服务商 | | +| √ | 支付产品:小程序支付 | 普通商户 & 境内服务商 | | +| × | 支付产品:刷脸支付 | 普通商户 & 境内服务商 | 异构协议,需独立模块 | +| × | 支付工具:代金券或立减优惠 | 普通商户 & 境内服务商 | 请升级至 v3 API | +| √ | 支付工具:现金红包 | 普通商户 & 境内服务商 | | +| √ | 支付工具:小程序红包 | 普通商户 & 境内服务商 | | +| √ | 支付工具:付款到零钱 | 普通商户 | | +| √ | 支付工具:付款到银行卡 | 普通商户 | | +| × | 支付工具:分账 | 普通商户 & 境内服务商 | 请升级至 v3 API | +| √ | 支付工具:扣款服务(原委托代扣) | 普通商户 & 境内服务商 | | +| √ | 支付工具:酒店押金 | 境内服务商 | | +| √ | 支付工具:车主服务 | 境内服务商 | | +| √ | 清关报关 | 普通商户 | | +| × | 特约商户进件 | 境内服务商 | 请升级至 v3 API | +| √ | 特约商户配置 | 银行服务商 | | +| × | 风控数据同步 | 银行服务商 | 请升级至 v3 API | +| × | 事中风险服务接口 | 银行服务商 | 请升级至 v3 API | + +
+ +--- + +### 【附】普通商户模式 API 模型命名速查表: + +注:树形结构与[微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)目录结构保持一致。 + +
+ +[展开查看] + +- 支付工具 + + - 付款码支付: + + - 付款码支付:`CreatePayMicroPay` + + - 查询订单:`GetPayOrder` + + - 撤销订单:`ReversePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 付款码查询 OpenID:`ToolsAuthCodeToOpenId` + + - JSAPI 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - Native 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 转换短链接:`ToolsShortUrl` + + - APP 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - H5 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 小程序支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + +- 支付工具: + + - 现金红包: + + - 发放红包:`SendPayMarketingTransfersRedPack` + + - 发放裂变红包:`SendPayMarketingTransfersGroupRedPack` + + - 查询红包记录:`GetPayMarketingTransfersRedPackInfo` + + - 小程序红包: + + - 发放红包:`SendPayMarketingTransfersMiniProgramRedPack` + + - 查询红包记录:`GetPayMarketingTransfersRedPackInfo` + + - 付款到零钱: + + - 付款:`CreatePayMarketingTransfersPromotionTransfer` + + - 查询付款:`GetPayMarketingTransfersTransferInfo` + + - 付款到银行卡: + + - 付款到银行卡:`CreatePayServicePartnerTransfersPayToBank` + + - 查询付款银行卡:`GetPayServicePartnerTransfersPayToBankInfo` + + - 获取 RSA 加密公钥:`GetRiskPublicKey` + + - 扣款服务: + + - APP 纯签约:`CreatePAPPayPreEntrustWeb` + + - H5 纯签约:`CreatePAPPayH5EntrustWeb` + + - 支付中签约:`CreateContractOrder` + + - 申请扣款:`ApplyPAPPay` + + - 申请解约:`DeletePAPPayContract` + + - 查询订单:`GetPayOrder` + + - 查询签约关系:`GetPAPPayContract` + +- 清关报关: + + - 订单附加信息提交接口:`CreateMerchantCustomsCustomDeclaration` + + - 订单附加信息查询接口:`QueryMerchantCustomsCustomDeclaration` + + - 订单附加信息重推接口:`RedeclareMerchantCustomsCustomDeclaration` + +
+ +--- + +### 【附】境内服务商模式 API 模型命名速查表: + +注:树形结构与[微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/api/sl.html)目录结构保持一致。 + +
+ +[展开查看] + +- 支付工具 + + - 付款码支付: + + - 付款码支付:`CreatePayMicroPay` + + - 查询订单:`GetPayOrder` + + - 撤销订单:`ReversePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 付款码查询 OpenID:`ToolsAuthCodeToOpenId` + + - JSAPI 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - Native 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 转换短链接:`ToolsShortUrl` + + - APP 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - H5 支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 小程序支付: + + - 统一下单:`CreatePayUnifiedOrder` + + - 查询订单:`GetPayOrder` + + - 关闭订单:`ClosePayOrder` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 下载交易账单:`DownloadPayBill` + + - 下载资金账单:`DownloadPayFundFlow` + + - 交易保障:`SubmitPayITILReport` + + - 扣款服务: + + - APP 纯签约:`CreatePAPPayPartnerPreEntrustWeb` + + - H5 纯签约:`CreatePAPPayPartnerH5EntrustWeb` + + - 申请扣款:`ApplyPAPPayPartner` + + - 申请解约:`DeletePAPPayContract` + + - 查询订单:`GetPayOrder` + + - 查询签约关系:`GetPAPPayPartnerContract` + + - 酒店押金: + + - 支付押金(JSAPI / APP):`CreateDepositUnifiedOrder` + + - 支付押金(人脸):`CreateDepositFacePay` + + - 支付押金(付款码):`CreateDepositMicroPay` + + - 查询订单:`GetDepositOrder` + + - 撤销订单:`ReverseDepositOrder` + + - 消费押金:`ConsumeDeposit` + + - 申请退款:`CreateDepositRefund` + + - 查询退款:`GetDepositRefund` + + - 车主平台: + + - 用户入场通知:`NotifyVehiclePartnerPay` + + - 申请扣款:`ApplyVehiclePartnerPay` + + - 下载交易账单:`DownloadPayBill` + + - 申请退款:`CreatePayRefund` + + - 查询退款:`GetPayRefund` + + - 用户状态查询:`GetVehiclePartnerPayState` + +- 支付工具: + + - 现金红包: + + - 发放红包:`SendPayMarketingTransfersRedPack` + + - 发放裂变红包:`SendPayMarketingTransfersGroupRedPack` + + - 查询红包记录:`GetPayMarketingTransfersRedPackInfo` + + - 小程序红包: + + - 发放红包:`SendPayMarketingTransfersMiniProgramRedPack` + + - 查询红包记录:`GetPayMarketingTransfersRedPackInfo` + +
+ +--- + +### 【附】银行服务商模式 API 模型命名速查表: + +注:树形结构与[微信支付开发文档](https://pay.weixin.qq.com/wiki/doc/api/bank.html)目录结构保持一致。 + +
+ +[展开查看] + +- 特约商户配置: + + - 支付目录配置:`AddSubMerchantDevelopConfig` + + - 绑定 AppID 配置:`AddSubMerchantDevelopConfig` + + - 配置查询:`GetSubMerchantDevelopConfig` + +- 风控数据同步: + + - 违规记录查询:`QueryRiskViolation` + +
diff --git a/docs/WechatTenpayV2/Advanced_Payment.md b/docs/WechatTenpayV2/Advanced_Payment.md new file mode 100644 index 00000000..8a86f7b1 --- /dev/null +++ b/docs/WechatTenpayV2/Advanced_Payment.md @@ -0,0 +1,55 @@ +## 如何生成客户端调起支付时所需的参数及签名? + +--- + +> 请先自行阅读: +> +> [《微信支付开发文档 - JSAPI 支付:JSAPI 调起支付》](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6) +> +> [《微信支付开发文档 - APP 支付:调起支付接口》](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2) +> +> [《微信支付开发文档 - 小程序支付:小程序调起支付 API》](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5) + +你可根据官方文档的规则利用本库提供的 `MD5Utility`、`HMACUtility` 工具类自行进行签名生成。 + +此外,本库还封装了直接生成参数及签名的扩展方法,下面给出一个示例代码: + +```csharp +/* 以生成 JSAPI 调起支付所需参数为例 */ +var request = new Models.CreatePayUnifiedOrderRequest() +{ + OutTradeNumber = "商户订单号", + AppId = "公众号 AppId", + Body = "描述", + TotalFee = 0, + OpenId = "用户 OpenId", + TradeType = "JSAPI", + SignType = "HMAC-SHA256" +}; +var response = await client.ExecuteCreatePayUnifiedOrderAsync(request); +var paramMap = client.GenerateParametersForJsapiGetBrandPayRequest(request.AppId, response.PrepayId, request.SignType); +``` + +--- + +### 【附】生成参数相关扩展方法速查表: + +- 生成客户端 JSAPI 调起支付所需的参数字典:`GenerateParametersForJsapiGetBrandPayRequest` + +- 生成客户端 APP 调起支付所需的参数字典:`GenerateParametersForAppGetBrandPayRequest` + +- 生成客户端小程序调起支付所需的参数字典:`GenerateParametersForMiniProgramRequestPayment` + +- 生成客户端小程序调起领取红包所需的参数字典:`GenerateParametersForJsapiSendBusinessRedPack` + +- 生成客户端公众号唤起微信委托代扣的 URL:`GenerateParameterizedUrlForMediaPlatformPAPPayEntrustWeb` / `GenerateParameterizedUrlForMediaPlatformPAPPayPartnerEntrustWeb` + +- 生成客户端小程序唤起微信委托代扣页面所需的参数字典:`GenerateParametersForMiniProgramPAPPayEntrust` / `GenerateParametersForMiniProgramPAPPayPartnerEntrust` + +- 生成客户端 APP 唤起开通车主服务页面所需的参数字典:`GenerateParametersForAppVehiclePAPPayPartnerAuth` + +- 生成客户端小程序唤起开通车主服务页面所需的参数字典:`GenerateParametersForMiniProgramVehiclePAPPayPartnerAuth` + +- 生成客户端小程序唤起免密支付升级无感支付页面所需的参数字典:`GenerateParametersForAppVehiclePAPPayPartnerNoSensePayment` + +- 生成客户端 App 唤起免密支付升级无感支付页面所需的参数字典:`GenerateParametersForMiniProgramVehiclePAPPayPartnerNoSensePayment` diff --git a/docs/WechatTenpayV2/README.md b/docs/WechatTenpayV2/README.md new file mode 100644 index 00000000..abe49f09 --- /dev/null +++ b/docs/WechatTenpayV2/README.md @@ -0,0 +1,101 @@ +# SKIT.FlurlHttpClient.Wechat.TenpayV2 + +基于 `Flurl.Http` 的[微信商户平台](https://pay.weixin.qq.com/) API v2 版客户端。 + +如需微信支付 v3 版 API 客户端,请移步 [`SKIT.FlurlHttpClient.WechantTenpayV3`](../WechatTenpayV3/README.md) 模块。 + +--- + +## 功能 + +- 基于微信支付 v2 版 API 封装。 + +- 支持普通商户、境内服务商、银行服务商三种模式。 + +- 请求时自动生成签名,无需开发者手动干预。 + +- 提供了微信支付所需的 AES、MD5、HMAC-SHA-256 等算法工具类。 + +- 提供了生成调起支付签名、解析回调通知事件等扩展方法。 + +> **注意**:本库仅仅包含微信支付未提供 v3 版 API 的部分功能,如需微信支付 v3 版 API 客户端,欢迎使用 [`SKIT.FlurlHttpClient.WechantTenpayV3`](../WechatTenpayV3/README.md) 模块。 + +--- + +## 基础用法 + +### 安装: + +提示:如果你使用 Visual Studio NuGet 管理器图形化界面,请在搜索结果中勾选“**包括预发行版**”。 + +```shell +# 通过 NuGet 安装 +> Install-Package SKIT.FlurlHttpClient.Wechat.TenpayV2 + +# 通过 dotnet-tools 安装 +> dotnet add package SKIT.FlurlHttpClient.Wechat.TenpayV2 +``` + +### 初始化: + +```csharp +using SKIT.FlurlHttpClient.Wechat; +using SKIT.FlurlHttpClient.Wechat.TenpayV2; + +var options = new WechatTenpayClientOptions() +{ + MerchantId = "微信商户号", + MerchantSecret = "微信商户 API 密钥", + MerchantCertificateBytes = Convert.FromBase64String("微信商户证书内容,即 `apiclient_cert.p12` 文件内容的 Base64 编码结果"), + MerchantCertificatePassword = "微信商户证书密码,通常是商户号" +}; +var client = new WechatTenpayClient(options); +``` + +### 请求 & 响应: + +```csharp +using SKIT.FlurlHttpClient.Wechat.TenpayV2; +using SKIT.FlurlHttpClient.Wechat.TenpayV2.Models; + +/* 以付款码付款接口为例 */ +var request = new CreatePayMicroPayRequestRequest() +{ + OutTradeNumber = "商户订单号", + AppId = "微信 AppId", + Body = "订单详情", + ExpireTime = DateTimeOffset.Now.AddMinutes(15), + TotalFee = 1, + AuthCode = "付款码" +}; +var response = await client.ExecuteCreatePayMicroPayRequestAsync(request); +if (response.IsSuccessful()) +{ + Console.WriteLine("微信支付订单号:" + response.TransactionId); +} +else +{ + Console.WriteLine("状态代码:" + response.ReturnCode); + Console.WriteLine("状态描述:" + response.ReturnMessage); + Console.WriteLine("错误代码:" + response.ErrorCode); + Console.WriteLine("错误描述:" + response.ErrorCodeDescription); + Console.WriteLine("业务结果代码:" + response.ResultCode); + Console.WriteLine("业务结果描述:" + response.ResultMessage); +} +``` + +--- + +## 高级技巧 + +- [如何快速找到需要调用的 API 模型类名 / 方法名(附完整 API 对照表)?](./Advanced_ModelDefinition.md) + +- [如何指定 JSON 序列化器?](./Advanced_JsonSerializer.md) + +- [如何使用拦截器?](./Advanced_Interceptor.md) + +- [如何解密回调通知事件中的敏感数据?](./Advanced_EventResourceDecryption.md) + +- [如何验证回调通知事件签名?](./Advanced_EventSignatureVerification.md) + +- [如何生成客户端调起支付时所需的参数及签名?](./Advanced_Payment.md) diff --git a/docs/WechatTenpayV3/Advanced_Payment.md b/docs/WechatTenpayV3/Advanced_Payment.md index 3d0f87ad..a5b2c053 100644 --- a/docs/WechatTenpayV3/Advanced_Payment.md +++ b/docs/WechatTenpayV3/Advanced_Payment.md @@ -41,4 +41,4 @@ var paramMap = client.GenerateParametersForJsapiPayRequest(request.AppId, respon - 生成客户端 JSAPI / 小程序调起支付所需的参数字典:`GenerateParametersForJsapiPayRequest` -- 生成 APP 调起支付所需的参数字典:`GenerateParametersForAppPayRequest` +- 生成客户端 APP 调起支付所需的参数字典:`GenerateParametersForAppPayRequest`