首页 > 编程语言 >NET开发者有福了!C#版微信SDK就没见过这么全的

NET开发者有福了!C#版微信SDK就没见过这么全的

时间:2022-12-15 18:24:11浏览次数:63  
标签:版微信 封装 C# 微信 API Http NET SDK

虽然昨天微软宣布正式推出了.NET 7,但国内的.NET环境和从前比已不可同日而语。人才相对较少,待遇也相对较低,导致整个.NET生态并没有其他语言那么繁荣。

今天所介绍项目的作者自己也说,“这都 2021 年(作者开始开发项目时)了,官方本身提供的示例代码还只能运行在 .NET Framework on Windows 上”。但其实国内仍有大批的.NET簇拥为其发展贡献着他们的力量,今天介绍的项目就是一款十分全面的 C# 版微信 SDK,帮助.NET开发者在微信平台的开发更加高效。

项目名称:DotNetCore.SKIT.FlurlHttpClient.Wechat

项目作者:RHQYZ

项目地址:https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat

项目简介

该项目是基于 Flurl.Http 的微信 API HTTP 客户端,支持公众平台、开放平台、商户平台、企业微信、广告平台、对话开放平台等模块,可跨平台,且持续随官方更新中。

项目特性

基于 Flurl.Http,可与 IHttpClientFactory 集成。

支持 .NET Framework 4.6.1+、.NET Standard 2.0+、.NET Core 2.0+、.NET 5、.NET 6。

支持 Windows / Linux / macOS 多平台部署。

支持 System.Text.Json(默认)和 Newtonsoft.Json 两种序列化方式。

异步式编程。

强类型接口模型。

提供拦截器功能。

包含 SourceLink 符号文件,可在项目中无源代码调试。

完整、完善、完全的微信 API 封装。

有哪些模块?

公众平台(公众号、小程序、视频号)+ 开放平台模块

商户平台(微信支付)模块(针对 v3 版接口)

商户平台(微信支付)模块(针对 v2 版接口)

企业微信(企业号)模块

广告平台(广点通)模块

对话开放平台(微信智能对话)模块

腾讯微企付模块

开发者说

1. 为什么要“造轮子”?

这都 2021 年(作者开始开发项目时)了,官方本身提供的示例代码还只能运行在 .NET Framework on Windows 上;就连 RSA 签名这么基础的东西都没有人封装(确切地说是因为 RSA 有很多种分块模式和填充模式,网上能找到的往往只封装了其中一种,但却未必符合微信的要求);全网很难找到一个封装微信 API 尽可能全的 .NET SDK,开源的项目有不少,但作者能坚持下去的不多。

于是萌生了自己封装一个库的想法,打算解决这几个痛点,同时也是推广一下微软官方的 System.Text.Json。

2. 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 客户端方案。

微软官方关于 System.Net.HttpWebRequest 与 System.Net.Http.HttpClient 的说明:

《Microsoft Docs - HttpWebRequest 类(Systen.Net)》

《Microsoft Docs - HttpClient 类(Systen.Net.Http)》

3. 本库与盛派微信 SDK(Senparc.Weixin)有什么区别?

本库专注于 API 本身的封装,捎带提供了一些用于加解密、序列化的工具类,使用起来更加灵活,不限任何框架或项目类型;盛派微信 SDK 提供了大而全的功能,与 MVC / WebAPI 深度集成。

本库的接口模型遵循的是微软官方推荐的 C# 属性命名方式(帕斯卡命名法);盛派微信 SDK 提供的是微信接口本身的命名方式(蛇形命名法和驼峰命名法混杂)。

本库封装了目前微信官方提供的所有 API(部分不支持的已在各模块文档中列出具体原因);盛派微信 SDK 只提供了常用的 API。

4. 看了源码,发现模型定义里很多同样的代码是复制粘贴的,为什么不继承?

关于这点得吐槽微信提供的 API 了,很显然微信内部也是很多个 Team 在共同开发,每个 Team、甚至每个人的字段命名风格、约束条件、接口规则都大相径庭。就连微信支付虽然 v3 版 API 号称是 “RESTful” 的,却也没个统一标准。

举个例子,以分页查询为例,看似字段相同,都由 offset、cursor、page、limit + data、total_count、next_cursor 这几个字段构成,但某些接口的 offset、cursor、page、limit 字段是可选参数,某些却是必填项;某些 page 值从 0 起始,某些却是从 1 起始;某些接口的 data、total_count、next_cursor 字段一定会返回,某些却是一定不返回,某些只在特定条件下返回。一共十几个分页查询的接口,却有七八种分页的数据结构,这种情况下很难抽象出一个公共的基类出来。

除此之外,同样一个东西在不同接口里竟然拼法不一样;同样是表示数组有的是 JSON、有的却是字符串;诸如此类“奇葩”的情况很多很多。

本项目已经尽可能在条件允许的范围内抽象出了一些公共基类、并封装了各种奇怪场景下的 JsonConverter,聊胜于无。

5. 为什么不支持 .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 以下版本的技术支持(详情请阅读官方公告)。也就是说,微软已经不再为此提供安全更新,在大部分技术合规要求中这一点都是扣分项,所以建议各位开发者目标框架能升级就升级。

6. 所有 API 都经过了测试吗?

由于微信的产品业务线众多,很多业务也需要前置条件才能继续,截至目前本项目已封装超过 1900 余个 API,虽然同时也编写了若干单元测试用例,但与数量庞大的 API 相比仍远远不够。

本项目严格按照微信官方提供的开发文档进行封装,并利用自动化工具保证封装结果的正确。但微信的文档本身质量很低,所以存在错误在所难免。

如果你在使用中遇到了因接口或模型定义错误而产生的问题,欢迎提出 Issue。 作者:Gitee酱 https://www.bilibili.com/read/cv19669194 出处:bilibili

标签:版微信,封装,C#,微信,API,Http,NET,SDK
From: https://www.cnblogs.com/guangzhiruijie/p/16985775.html

相关文章

  • vite vue3 使用iconfont svg形式
    1.登录https://www.iconfont.cn/官网,把自己喜欢得图标添加到项目中2.按照标红的顺序选择把文件下载下来,下来以后解压缩把iconfont.js放到项目中3.写一个全局svgIcon.vu......
  • Java同步器之Condition源码分析
    一、概述条件锁,就是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。比如,在阻塞队列中,当队列中没有元素的时候是无......
  • Docker安装和基本原理及镜像管理
    一、Docker概述1.1IT架构的演进:裸金属→虚拟机→容器→函数化、代码化   云计算涌现出很多改变传统IT架构和运维方式的新技术,比如虚拟机、容器、微服务......
  • c# .net 多类实现同一个接口,动态指定使用哪一个类的实现
    usingMicrosoft.Extensions.DependencyInjection;usingSystem;usingSystem.Runtime.CompilerServices;usingstaticSystem.Net.Mime.MediaTypeNames;namespaceW......
  • c++ 类型转换
    string转int可以使用std::stoi,std::stol,std::stoll来转换。intstoi(conststd::string&str,std::size_t*pos=nullptr,intbase=10);参考:h......
  • Docker基础
    一、Docker概述1、Docker的概念•Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源•Docker是在Linux容器里运行应用的开源工具,是一种轻量级......
  • 30分钟带你掌握Alexnet
    今天,我们将介绍深度学习领域的一个著名网络AlexNet。2012年,Hinton的学生AlexKrizhevsky在寝室用GPU死磕了一个DeepLearning模型,一举摘下了视觉领域竞赛ILSVRC桂冠,在百万......
  • .NET Core Hangfire任务计划.NET Core Hangfire任务计划
    .NETCoreHangfire任务计划 安装Hangfire 新建ASP.NETCore空项目,.NetCore版本3.1 往*.csproj添加包引用,添加新的PackageReference标记。如下所示。请注意,下面代码段......
  • 妙啊!纯 CSS 实现拼图游戏
    本文,将向大家介绍一种将多个CSS技巧运用到极致的技巧,利用纯CSS实现拼图游戏。本技巧源自于​​TemaniAfif​​​的CodePen​​CSSOnlyPuzzlegame​​。一款完全......
  • pycharm更改镜像源
    为什么?pycharm安装第三方库时,默认时从官方地址下载安装。但是由于这些镜像源在国外,下载速度一般比较慢,还有可能下载不成功。所以可以将镜像源地址改为国内的地址,这样下载......