拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Senparc.Weixin SDK 全平台示例导览:从 Samples/All 快速搭建微信公众号、小程序、企业微信与支付的多模块开发环境

后端即时通讯金融科技【免费下载链接】WeiXinMPSDK微信全平台 .NET SDK Senparc.Weixin for C#支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.项目地址https://gitcode.com/gh_mirrors/we/WeiXinMPSDK点击查看免费下载本文以仓库中 Samples/All/readme.md 为骨架完整梳理 Senparc.Weixin SDK 示例集的目录结构、解决方案选择方法与运行方式并结合net10-mvc、console、notebook等示例的源码与配置文件深入讲解 SDK 的注册流程、配置参数与 MessageHandler 中间件用法帮助你根据实际场景Web 应用、命令行/桌面应用、Notebook 探索快速选定并跑通一套可扩展的全平台微信接入环境。1. Samples/All 的定位多模块集成的综合示例Samples/All是 Senparc.Weixin SDK 的全家桶示例目录其中除console外的所有 Sample 都是集成多个模块的演示同时涵盖微信公众号MP、微信支付TenPay V2/V3、企业微信Work、小程序WxOpen、开放平台Open、WebSocket、AI 等能力相比各独立模块的单一示例代码组织与依赖关系会复杂得多。正因为它是综合场景非常适合作为真实项目从 0 到 1 的参考蓝本模块之间通过注释、文件夹做了清晰区分阅读时可以按需聚焦。若只想学习某一单一模块则应转向Samples/MP、Samples/WxOpen、Samples/Work、Samples/TenPayV2、Samples/TenPayV3等目录下的独立 Sample或直接阅读对应模块的单元测试项目如 Senparc.Weixin.MP.Test。2. 示例项目结构总览Samples/All目录下各文件夹的定位如下表完整继承自 Samples/All/readme.md文件夹说明net10-mvc【快速更新推荐】.NET 10.0 示例可用于直接部署net8-mvc【停止更新】.NET 8.0 示例可用于直接部署net7-mvc【停止更新】.NET 7.0 示例可用于直接部署net6-mvc【停止更新】.NET 6.0 示例可用于直接部署console【正常更新】命令行注册过程演示 Demo接口调用可参考 Web 项目net45-mvc【停止更新】ASP.NET 4.5 MVC 示例可用于直接部署此项目中包含 CommonServices 项目供其他各 Sample 公用Senparc.Weixin.Sample.CommonService所有 Sample 中共享的公共代码库仅为 Sample 服务和 SDK 源码无关Senparc.Weixin.Sample.Shared所有 Sample 中共享的wwwroot等静态文件资源仅为 Sample 服务和 SDK 源码无关notebook用于运行 Polyglot Notebooks 的 VS Code 示例关于net45-mvc命名的特别说明该 Sample 自 2022 年 5 月 4 日起已升级为 .NET Framework 4.6.2并将一直支持到微软官方停止对该版本的支持其后升级到 .NET Framework 4.8为了方便交流暂时保留net45这个名字用以代表 .NET Framework Sample详见 net45-mvc/readme.md。3. 如何选择适合你的解决方案Samples/All/readme.md给出了三条清晰的选型路径核心判断依据是目标运行框架与应用形态学习并使用最新的 .NET 10.0且已安装 VS2022v16.9 以上打开net10-mvc/Senparc.Weixin.Sample.Net10.sln解决方案Samples/All/net10-mvc/Senparc.Weixin.Sample.Net10.sln它同时可用于直接部署与调试 SDK 源码。将 Senparc.Weixin SDK 用于命令行或桌面应用打开console下的解决方案例如 Samples/All/console/Senparc.Weixin.MP.Sample.Consoles.NET10.sln仓库中同时保留 .NET 8 版本 Senparc.Weixin.MP.Sample.Consoles.NET8.sln。其他情况如没有安装 VS2017或只是想调试 .NET Framework 4.6.2 项目打开net45-mvc/Senparc.Weixin.MP.Sample.Net45.slnSamples/All/net45-mvc/Senparc.Weixin.MP.Sample.Net45.sln。需要强调的一点是无论选择哪个解决方案类库SDK 各模块的功能都是一致的——差异仅在于承载应用的框架与形态。例如net10-mvc与console走的是完全相同的注册 API只是前者托管在 ASP.NET Core 的请求管道中后者在Main方法中直接构建宿主。4. 解决方案文件与 Visual Studio 版本说明Samples/All/readme.md对 .sln 文件的命名规则做了说明如果解决方案文件名写明了 Visual Studio 版本如Senparc.Weixin.MP.Sample.Consoles.vs2019.sln则表明该项目需要使用对应版本或以上的 Visual Studio 打开。当前仓库中实际保留的 sln 直接以目标框架命名如Senparc.Weixin.Sample.Net10.sln、Senparc.Weixin.MP.Sample.Consoles.NET10.sln从 Senparc.Weixin.MP.Sample.Consoles.NET10.sln 的头部可以看到# Visual Studio Version 17即需使用 VS 202217.x及以上版本打开。编译提示由于src目录下的 SDK 源码采用了条件编译默认情况下开发环境需要同时安装 .NET Framework 4.6.2 与 .NET 10.0才能完整编译成功见 net10-mvc 项目说明。5. 深入 net10-mvc.NET 10 全平台集成示例net10-mvc是当前【快速更新推荐】的综合示例其 readme 明确说明该示例同时集成了微信公众号、微信支付、企业微信、小程序等多个模块非常适合综合场景的实际项目参考。下面结合源码拆解它的启动与注册流程。5.1 入口与宿主构建Program.cs入口文件 Program.cs 使用SenparcServiceProviderFactory接管了默认的依赖注入容器这是 Senparc 系列CO2NET/SDK注册机制的基础public static IHostBuilder CreateHostBuilder(string[] args) Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder { webBuilder.UseStartupStartup(); }).UseServiceProviderFactory(new SenparcServiceProviderFactory());5.2 服务注册ConfigureServices在 Startup.cs 的ConfigureServices中除了常规的 MVC、Session、SignalR、本地缓存外最核心的是这行链式调用services.AddSenparcWeixin(Configuration, Env) // Senparc.Weixin 注册必须 .AddSenparcWebSocketCustomNetCoreWebSocketMessageHandler() // Senparc.WebSocket 注册按需 .AddSenparcAI(Configuration) // 注册 Senparc.AI提供 AI 能力可选 ;其中AddSenparcWeixin(Configuration, Env)是 SDK 接入的必须步骤负责解析appsettings.json中的SenparcSetting与SenparcWeixinSetting并注册基础服务AddSenparcWebSocketT()为按需模块示例中注册了CustomNetCoreWebSocketMessageHandlerAddSenparcAI(Configuration)为可选模块示例在 v10.1.0.0 版本后切换为通过 Senparc.AI AgentKernel 提供服务若部署在 IIS 上需要保留services.ConfigureIISServerOptions(options options.AllowSynchronousIO true)配置Linux 上使用 Kestrel 时同理可开启同步 IO。5.3 请求管道与全局注册ConfigureConfigure方法中注册顺序遵循CO2NET 全局注册 → Senparc.Weixin 注册 → 中间件/路由的固定链路Startup.csvar registerService app.UseSenparcGlobal(env, senparcSetting.Value, globalRegister { /* CO2NET 全局配置 */ }, true) .UseSenparcWeixin(senparcWeixinSetting.Value, (weixinRegister, weixinSetting) { /* 微信相关配置 */ });UseSenparcGlobal负责 CO2NET 层配置包括全局缓存通过ChangeDefaultCacheNamespace(DefaultCO2NETCache)设置命名空间多站点共用分布式缓存时用于隔离示例提供了 RedisCsRedis 库的UseKeyValueRedisNow()键值对策略或UseHashRedisNow()Hash 策略以及 StackExchange.Redis 的Senparc.CO2NET.Cache.Redis库与 MemcachedUseMemcachedNow()两套可选方案未启用时默认使用内存缓存。示例还给出了UseRedis()/UseMemcached()辅助方法通过判断配置字符串是否仍为占位符#{...#}#来决定是否启用Startup.cs。日志RegisterTraceLog(ConfigTraceLog)注册微信跟踪日志Debug 状态下会在App_Data/WeixinTraceLog/目录生成所有 API 请求日志WeixinTrace.OnWeixinExceptionFunc可在发生WeixinException时执行自定义逻辑如向管理员推送模板消息。APM 统计CO2NET.APM.Config.EnableAPM true默认开启DataExpire默认可设为 60 分钟。5.4 微信账号、缓存、支付与开放平台注册在UseSenparcWeixin回调中示例展示了全平台账号的注册方式Startup.cs顺序建议为缓存先行 → 公众号/小程序 → 企业微信 → 微信支付 → 开放平台weixinRegister .RegisterMpAccount(senparcWeixinSetting.Value, 【盛派网络小助手】公众号) // 公众号可多个 .RegisterWxOpenAccount(senparcWeixinSetting.Value, 【盛派网络小助手】小程序) // 小程序可多个 .RegisterWxOpenAccount(senparcWeixinSetting.Value.Items[第二个小程序], 第二个...) // 多账号配置 .RegisterWorkAccount(senparcWeixinSetting.Value, 【盛派网络】企业微信) // 企业微信可多个 .RegisterTenpayOld(senparcWeixinSetting.Value, 【盛派网络小助手】公众号) // 微信支付 V2旧版 .RegisterTenpayV3(senparcWeixinSetting.Value, 【盛派网络小助手】公众号) // 微信支付 V3 .RegisterTenpayApiV3(senparcWeixinSetting.Value, 【盛派网络小助手】公众号-ApiV3) // TenPay V3 API .RegisterOpenComponent(senparcWeixinSetting.Value, getComponentVerifyTicketFunc, getAuthorizerRefreshTokenFunc, authorizerTokenRefreshedFunc, 【盛派网络】开放平台); // 第三方平台几个值得注意的细节缓存注册必须在微信账号注册之前微信的 Redis/Memcached 缓存通过weixinRegister.UseSenparcWeixinCacheCsRedis()CsRedis 与 StackExchange.Redis 两选一与UseSenparcWeixinCacheMemcached()注册如果不使用本地缓存而不执行注册代码会收到当前扩展缓存策略没有进行注册的异常。多账号能力RegisterMpAccount等方法可多次调用注册多个账号示例还展示了通过Items配置节注册第二个小程序、企业微信审批等多个组合账号。开放平台RegisterOpenComponent需要提供三个委托——getComponentVerifyTicketFunc获取 component_verify_ticket、getAuthorizerRefreshTokenFunc读取授权方 refresh_token、authorizerTokenRefreshedFunc保存刷新后的 token。示例用App_Data下的本地文件演示存取仅适合演示与单机部署分布式系统需替换为其他存储。支付证书services.AddSenparcWeixin()会自动为默认senparcWeixinSetting对应的 TenpayV3 配置进行 Cert 证书配置若额外注册的支付信息与默认配置不同需要在ConfigureServices中用services.AddCertHttpClient(name, pwd, path)添加对应证书。5.5 MessageHandler 中间件无需再创建独立 Controller示例使用了 MessageHandler 中间件取代传统独立的 ControllerStartup.csapp.UseMessageHandlerForMp(/WeixinAsync, CustomMessageHandler.GenerateMessageHandler, options { options.AccountSettingFunc context senparcWeixinSetting.Value; // [必须]动态提供 Token、EncodingAESKey 等 options.DefaultMessageHandlerAsyncEvent DefaultMessageHandlerAsyncEvent.SelfSynicMethod; // [可选] options.EnableRequestLog true; // [可选]请求日志 options.EnbleResponseLog true; // [可选]回复日志 options.AggregateExceptionCatch ex { return false; }; // [可选]异常处理 options.TextResponseLimitOptions new TextResponseLimitOptions(2048, senparcWeixinSetting.Value.WeixinAppId); // 超长文本分批回复 }); app.UseMessageHandlerForWxOpen(/WxOpenAsync, CustomWxOpenMessageHandler.GenerateMessageHandler, options { ... }); app.UseMessageHandlerForWork(/WorkAsync, WorkCustomMessageHandler.GenerateMessageHandler, o o.AccountSettingFunc c senparcWeixinSetting.Value); // 最简方式要点说明AccountSettingFunc为必须配置的委托可以根据context动态判断并返回对应账号的SenparcWeixinSetting因此一套中间件即可支持多账号如 URL 参数?id1分发。TextResponseLimitOptions(2048, appId)设置最大文本长度回复限制超长后 SDK 会调用客服接口分批次回复避免单条消息超限。公众号、小程序、企业微信分别对应UseMessageHandlerForMp、UseMessageHandlerForWxOpen、UseMessageHandlerForWork三个扩展方法其底层实现可分别在 Senparc.Weixin.MP.Middleware、Senparc.Weixin.WxOpen.Middleware、Senparc.Weixin.Work.Middleware 中查看。5.6 配置文件 appsettings.json 参数详解net10-mvc 的 appsettings.json 是理解全平台配置的最佳模板结构分为三大部分SenparcSettingCO2NET 全局设置参数说明IsDebug是否开启调试影响日志与 TraceLog 输出DefaultCacheNamespace全局缓存命名空间Cache_Redis_ConfigurationRedis 连接字符串如localhost:6379或带密码/参数的localhost:6379,passwordsenparc,connectTimeout1000,connectRetry2,syncTimeout10000,defaultDatabase3保持占位符#{Cache_Redis_Configuration}#即不启用Cache_Memcached_ConfigurationMemcached 连接字符串规则同上SenparcUnionAgentKeySenparcUnionAgent 密钥SenparcWeixinSetting微信账号设置包含全局IsDebug以及公众号Token、EncodingAESKey、WeixinAppId、WeixinAppSecret、小程序WxOpenAppId、WxOpenAppSecret、WxOpenToken、WxOpenEncodingAESKey、企业微信WeixinCorpId、WeixinCorpAgentId、WeixinCorpSecret等、微信支付 V2WeixinPay_PartnerId、WeixinPay_Key等、微信支付 V3TenPayV3_MchId、TenPayV3_Key、TenPayV3_AppId、TenPayV3_CertPath、TenPayV3_PrivateKey、TenPayV3_SerialNumber、TenPayV3_ApiV3Key、EncryptionTypeRSA/SM等、开放平台Component_Appid、Component_Secret、Component_Token、Component_EncodingAESKey以及扩展代理参数AgentUrl、AgentToken、SenparcWechatAgentKey。Items多账号配置节在Items下可以添加任意多个公众号、小程序、企业微信、微信支付V2/V3、开放平台组合示例中给出了第二个公众号、第三个公众号、第二个小程序、第四个公众号对应小程序对应微信支付、企业微信审批等组合。注意两点所有字符串值都可能被用于字典索引因此请勿留空字符串可以删除整条设置key不能重复且修改 key 后 SDK 将无法自动识别。SenparcAiSettingAI 设置可选包含AiPlatform如AzureOpenAI、NeuCharAIKeys、AzureOpenAIKeys、OpenAIKeys等平台密钥配置以及Items下的多平台组合如AzureDallE3文生图。配置文件中形如#{...#}#的值是占位符Azure DevOps 默认格式填入真实信息时应删除#和{}符号例如Token: MyFullToken。5.7 控制器与视图组织从目录结构看Controllers 下除了HomeController、BaseController、CaseCollectionController外按功能模块划分为Weixin、AiDoc、Analysis、AsyncMethods、Cache、Device、Document、Menu、OAuth2、OpenOAuth、Plugins、QrCode、SimulateTool、TenPay、TenPayV3、TenPayApiV3、WebSocket、WeixinJSSDK、Work、WxOpen等目录与 Views 一一对应读者可以按模块名定位到具体功能的示例代码。6. console命令行 / 桌面应用注册流程演示console目录下的 Senparc.Weixin.MP.Sample.Consoles 展示了脱离 Web 宿主时 SDK 的接入方式同样适用于 WinForm 和 WPF文件头注释明确说明了这一点。6.1 一行代码注册 一句代码启用Program.cs 的核心流程是// 1. 读取配置 var senparcSetting config.GetSection(SenparcSetting).GetSenparcSetting(); var senparcWeixinSetting config.GetSection(SenparcWeixinSetting).GetSenparcWeixinSetting(); // 2. 本地缓存必须 var services new ServiceCollection(); services.AddMemoryCache(); // 3. 添加微信配置一行代码必须 services.AddSenparcWeixinServices(config); // 4. 启用微信配置一句代码必须 var registerService app.UseSenparcWeixin( senparcSetting, // 不为 null 则覆盖 appsettings 中的 SenparcSetting 配置 senparcWeixinSetting, // 不为 null 则覆盖 appsettings 中的 SenparcWeixinSetting 配置 register { /* CO2NET 全局配置 */ }, (register, weixinSetting) { register.RegisterMpAccount(weixinSetting, 【盛派网络小助手】公众号); // 可注册多个公众号 });配置读取支持DOTNET_ENVIRONMENT环境变量区分环境自动追加读取appsettings.{environment}.json。注册完成后即可在Main中调用高级接口如推送消息或添加监听程序通过Console.ReadLine() ! exit保持运行。6.2 启动耗时统计示例使用Senparc.CO2NET的SystemTime对 SDK 启动过程做了分段计时dt_AddSdkStart至dt_AddSdkEnd为注册耗时dt_UseSdkStart至dt_UseSdkEnd为启用耗时并在退出前打印整体启动时间方便量化 SDK 初始化开销。6.3 依赖与工程配置从 Senparc.Weixin.MP.Sample.Consoles.net10.csproj 可以看到控制台示例通过 NuGet 引用了Senparc.Weixin.MP、Senparc.Weixin.Open、Senparc.Weixin.TenPayV3、Senparc.Weixin.Work、Senparc.Weixin.WxOpen、Senparc.Weixin.Cache.CsRedis、Senparc.Weixin.Cache.Memcached、Senparc.Weixin.Cache.Redis、Senparc.WebSocket等包并项目引用了Senparc.Weixin.Net10SampleForConsole.CommonServiceappsettings.json配置了CopyToOutputDirectoryPreserveNewest/CopyToOutputDirectory保证运行时随输出复制。7. CommonService 与 Shared跨框架复用的共享代码与静态资源Senparc.Weixin.Sample.CommonService 是各 Sample 共用的公共代码库其中包含CustomMessageHandler在 MessageHandlers/CustomMessageHandler 下另有_Events分部类承载事件处理、WorkMessageHandler、WxOpenMessageHandler、OpenMessageHandler、WebSocket 消息处理、模板消息与事件服务EventService、LocationService、TemplateMessageService等可在 .NET Framework / .NET 8.0 / .NET 10.0 / WebForms 等不同环境中重用。该目录同时维护了 多个目标框架的 csproj.NET 4.6.2、.NET Core 3.0、.NET 6.0/7.0/8.0/10.0 各一份。Senparc.Weixin.Sample.Shared 存放共享的wwwroot静态资源CSS、JS、图片、favicon 等。net10-mvc的Startup.cs在 DEBUG 模式下通过PhysicalFileProvider将Senparc.Weixin.Sample.Shared/wwwroot映射为静态文件目录Startup.cs使各框架 Sample 无需各自维护一套前端资源。8. notebookPolyglot Notebooks 交互式体验notebook 目录提供 VS Code Polyglot Notebooks 的交互式示例使用步骤见 notebook/README.md安装 Visual Studio Code安装并配置扩展Polyglot Notebooks修改 senparc.json 配置文件的内容包含SenparcSetting与SenparcWeixinSetting的账号信息打开 sample.ipynb修改注册盛派 SDK节中的 json 文件的绝对路径视个人需求调整代码后运行。senparc.json中SenparcSetting使用了IsDebug: false、DefaultCacheNamespace: WeChatCache并给出了带密码与超时参数的 Redis 连接串示例SenparcWeixinSetting中则填入公众号Token、EncodingAESKey、WeixinAppId、WeixinAppSecret与小程序WxOpenAppId、WxOpenAppSecret的占位信息。9. 使用注意事项汇总综合文档与源码在动手搭建时有以下几点需要留意模块复杂度Samples/All下的示例是全家桶涉及公众号、支付、企业微信、小程序、开放平台等多模块只想验证单一能力时优先参考对应模块的独立 Sample 或单元测试。注册顺序微信账号注册前必须先完成缓存注册UseSenparcGlobalCO2NET要先行随后才是UseSenparcWeixin。缓存占位符#{...#}#为占位符不替换则对应缓存/配置不会启用UseRedis/UseMemcached正是以此判断SenparcWeixinSetting中字符串值不能留空。证书与密钥V3 证书路径与私钥应放在App_Data等受保护目录下TenPayV3_EncryptionType需按微信后台申请证书类型填RSA或SM若注册的支付账号与默认配置不同需用AddCertHttpClient补充证书。运行环境差异Linux/Kestrel 与 IIS 部署可能需要开启AllowSynchronousIO生产环境记得关闭IsDebug避免App_Data/WeixinTraceLog持续记录全部 API 请求日志。版本与工具链不同 sln 对 Visual Studio 版本有要求编译 SDK 源码需要同时具备 .NET Framework 4.6.2 与 .NET 10.0 目标框架。以上内容完整覆盖了 Samples/All/readme.md 的全部信息并进一步延伸到net10-mvc、console、notebook等示例的源码与配置实现可作为你在 Senparc.Weixin SDK 中快速选型、启动与扩展多平台微信应用的实操参考。赞分享后端即时通讯金融科技【免费下载链接】WeiXinMPSDK微信全平台 .NET SDK Senparc.Weixin for C#支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.项目地址https://gitcode.com/gh_mirrors/we/WeiXinMPSDK点击查看免费下载相关推荐微信公众号网页 JSAPI 支付接入实战基于 Senparc.Weixin SDK 微信支付 V3 全流程解析微信公众号网页 JSAPI 支付接入实战基于 Senparc.Weixin SDK 微信支付 V3 全流程解析 导读 本文以 Senparc.WeixinW后端即时通讯金融科技Senparc.Weixin 微信支付V2接入实战全局注册、公众号与支付模块注册及 appsettings.json 配置全解Senparc.Weixin 微信支付V2接入实战全局注册、公众号与支付模块注册及 appsettings.json 配置全解 本文基于 Senparc.后端即时通讯金融科技10个实战技巧使用llama-nemotron-embed-vl-1b-v2-fp8构建高效视觉文档检索系统10个实战技巧使用llama nemotron embed vl 1b v2 fp8构建高效视觉文档检索系统 llama nemotron embed vl后端即时通讯金融科技上一篇如何 5 分钟备份 QQ空间全部历史说说GetQzonehistory 上手指南下一篇5个实用技巧让RTL8821AU无线网卡在Linux系统上完美运行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门