目結(jié)構(gòu)與部署指南)
后端即時(shí)通訊金融科技【免費(fèi)下載鏈接】WeiXinMPSDK微信全平臺 .NET SDK Senparc.Weixin for C#支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公眾號、小程序、小游戲、微信支付、企業(yè)微信/企業(yè)號、開放平臺、JSSDK、微信周邊等全平臺。 WeChat SDK for C#.項(xiàng)目地址https://gitcode.com/gh_mirrors/we/WeiXinMPSDK點(diǎn)擊查看免費(fèi)下載Senparc.Weixin.Sample.Net8 是 WeiXinMPSDK 倉庫中面向 .NET 8.0 的 MVC 綜合示例項(xiàng)目將公眾號、小程序、企業(yè)微信、微信支付V2/V3、開放平臺等 Senparc.Weixin SDK 全部模塊集成于一個(gè) Web 應(yīng)用。閱讀本文后你將掌握該示例的編譯環(huán)境要求、目錄與配置結(jié)構(gòu)、核心啟動(dòng)注冊流程以及公眾號消息處理的兩種接入方式可直接據(jù)此部署測試或在真實(shí)項(xiàng)目中對照參考。一、項(xiàng)目定位SDK 各模塊的綜合演練場Samples/All/net8-mvc/目錄下的 Senparc.Weixin.Sample.Net8 承擔(dān)著雙重角色可部署的綜合示例它提供了 .NET 8.0 的 Mvc 項(xiàng)目示例可以直接進(jìn)行部署測試。開箱即可運(yùn)行基礎(chǔ)功能高級功能測試則需要修改配置文件如修改 appId、Token、Secret 等真實(shí)微信賬號信息。SDK 調(diào)試與多目標(biāo)編譯載體該 Sample 可用于調(diào)試 Senparc.Weixin SDK 本身支持 .NET 4.6.2、.NET Standard 2.1、.NET 8.0 的不同版本庫編譯并且在 Release 編譯條件下可以生成 NuGet 包。正因?yàn)樗撬心K集成在一起的綜合示例業(yè)務(wù)邏輯復(fù)雜度明顯高于單模塊示例。倉庫作者在Samples/All/net8-mvc/readme.md中特別說明如果只需要查看單個(gè)模塊的示例代碼公眾號、小程序、開放平臺、微信支付等可以直接查看 Samples/ 目錄下的其他對應(yīng)文件夾——例如 Samples/MP、Samples/WxOpen、Samples/TenPayV3、Samples/Work 等獨(dú)立示例項(xiàng)目。不過無需擔(dān)心閱讀障礙示例中已經(jīng)將各個(gè)模塊使用注釋、文件夾等方式進(jìn)行了區(qū)分代碼結(jié)構(gòu)清晰。對于需要同時(shí)接入多個(gè)微信產(chǎn)品線的綜合場景本示例是非常合適的實(shí)際項(xiàng)目參考模板。二、編譯環(huán)境要求與多目標(biāo)框架說明原文檔對開發(fā)環(huán)境給出了明確要求這是編譯本項(xiàng)目的第一道門檻Visual Studio需要升級到 VS 2022或?qū)砀掳姹尽?NET 8.0 SDK必須安裝官方下載地址。條件編譯提示由于src/目錄下的 SDK 源碼中采用了條件編譯Conditional Compilation默認(rèn)情況下開發(fā)環(huán)境需要同時(shí)安裝 .NET Framework 4.6.2 和 .NET 8.0才能編譯成功。這是因?yàn)橥惶自创a需要針對 .NET Framework 與 .NET Core/.NET 8.0 兩個(gè)平臺輸出不同版本的庫。從 Senparc.Weixin.Sample.net8.csproj 可以看到該示例項(xiàng)目的目標(biāo)框架為net8.0并通過ProjectReference引用了Senparc.Weixin.Net8Sample.CommonService.csproj公共業(yè)務(wù)服務(wù)層位于 Samples/All/Senparc.Weixin.Sample.CommonService同時(shí)以Shared方式導(dǎo)入Senparc.Weixin.Sample.Shared.projitems共享視圖與靜態(tài)資源。項(xiàng)目還引用了Microsoft.Extensions.Configuration.Json、Senparc.AI.Kernel、Senparc.CO2NET.WebApi、Senparc.NeuChar.App/AspNet等關(guān)鍵 NuGet 包體現(xiàn)了完整的依賴棧。注意原文檔中采用 .NET 7.0 作為默認(rèn) Web 運(yùn)行框架的說法屬于歷史版本說明當(dāng)前示例已升級為 .NET 8.0 目標(biāo)框架實(shí)際以 csproj 中的net8.0為準(zhǔn)。三、項(xiàng)目目錄結(jié)構(gòu)導(dǎo)讀按微信模塊劃分的 Controller從源碼結(jié)構(gòu)看示例將 Controller 按微信產(chǎn)品線清晰分目錄組織見 Controllers目錄對應(yīng)模塊代表性文件Controllers/Weixin/MP/公眾號WeixinController.cs、MenuController、OAuth2Controller、JSSDK、訂閱消息、WebSocket 等Controllers/Weixin/Open/開放平臺OpenController、OpenOAuthControllerControllers/Weixin/TenPay/微信支付TenPayControllerV2、TenPayV3Controller、TenPayApiV3ControllerControllers/Weixin/ThirdPartyAuth/第三方平臺授權(quán)ThirdPartyAuthControllerControllers/Weixin/Work/企業(yè)微信WorkControllerControllers/Weixin/WxOpen/小程序WxOpenControllerControllers/Tools/輔助工具CacheController、QrCodeController、AiDocController、SimulateToolController 等此外Controllers/下還有BaseController.cs所有 Controller 的基類統(tǒng)一輸出當(dāng)前緩存策略類型到視圖與CaseCollectionController.cs、HomeController.cs。公共的業(yè)務(wù)處理邏輯消息處理器、模板消息、事件服務(wù)等則統(tǒng)一放在 Samples/All/Senparc.Weixin.Sample.CommonService 中被各版本示例共享。四、核心配置文件appsettings.json 參數(shù)全解示例的微信賬號與系統(tǒng)配置全部集中在 appsettings.json 中由三個(gè)頂層節(jié)點(diǎn)組成key 會被 SDK 自動(dòng)識別切勿修改 key 名稱未使用的參數(shù)可以直接刪除整條配置。1.SenparcSettingCO2NET 全局配置SenparcSetting: { IsDebug: true, DefaultCacheNamespace: DefaultCache, Cache_Redis_Configuration: #{Cache_Redis_Configuration}#, Cache_Memcached_Configuration: #{Cache_Memcached_Configuration}#, SenparcUnionAgentKey: #{SenparcUnionAgentKey}# }IsDebug調(diào)試模式開關(guān)開啟后會在App_Data/WeixinTraceLog/目錄下記錄全部 API 請求日志正式發(fā)布建議關(guān)閉。Cache_Redis_ConfigurationRedis 連接字符串。默認(rèn)值#{Cache_Redis_Configuration}#是 Azure DevOps 占位符格式未修改時(shí)不啟用 Redis。啟用示例localhost:6379無密碼或localhost:6379,passwordsenparc,connectTimeout1000,connectRetry2,syncTimeout10000,defaultDatabase3。Cache_Memcached_ConfigurationMemcached 連接字符串規(guī)則同上默認(rèn)占位符時(shí)不啟用。2.SenparcWeixinSetting微信賬號配置SenparcWeixinSetting: { IsDebug: true, Token: #{Token}#, EncodingAESKey: #{EncodingAESKey}#, WeixinAppId: #{WeixinAppId}#, WeixinAppSecret: #{WeixinAppSecret}#, WxOpenAppId: #{WxOpenAppId}#, WxOpenAppSecret: #{WxOpenAppSecret}#, WxOpenToken: #{WxOpenToken}#, WxOpenEncodingAESKey: #{WxOpenEncodingAESKey}#, WeixinCorpId: #{WeixinCorpId}#, WeixinCorpAgentId: #{WeixinCorpAgentId}#, WeixinCorpSecret: #{WeixinCorpSecret}#, WeixinCorpToken: #{WeixinCorpToken}#, WeixinCorpEncodingAESKey: #{WeixinCorpEncodingAESKey}#, TenPayV3_MchId: #{TenPayV3_MchId}#, TenPayV3_Key: #{TenPayV3_Key}#, TenPayV3_CertPath: #{TenPayV3_CertPath}#, TenPayV3_CertSecret: #{TenPayV3_CertSecret}#, TenPayV3_PrivateKey: #{TenPayV3_PrivateKey}#, TenPayV3_SerialNumber: #{TenPayV3_SerialNumber}#, TenPayV3_ApiV3Key: #{TenPayV3_APIv3Key}#, EncryptionType: #{EncryptionType}#, Component_Appid: #{Component_Appid}#, Component_Secret: #{Component_Secret}#, Component_Token: #{Component_Token}#, Component_EncodingAESKey: #{Component_EncodingAESKey}# }關(guān)鍵參數(shù)說明公眾號Token、EncodingAESKey、WeixinAppId、WeixinAppSecret對應(yīng)公眾平臺后臺的接口配置信息Token 必須與后臺完全一致區(qū)分大小寫。小程序WxOpenAppId/WxOpenAppSecret/WxOpenToken/WxOpenEncodingAESKey。企業(yè)微信WeixinCorpId、WeixinCorpAgentId應(yīng)用 AgentId、WeixinCorpSecret、WeixinCorpToken、WeixinCorpEncodingAESKey。微信支付 V3TenPayV3_MchId商戶號、TenPayV3_Key、TenPayV3_CertPath證書路徑支持物理路徑如D:\cert\apiclient_cert.p12或受保護(hù)目錄下的相對路徑如~/App_Data/cert/...、TenPayV3_CertSecret證書密碼、TenPayV3_PrivateKey私鑰明文或 pem 文件路徑、TenPayV3_SerialNumber證書序列號、TenPayV3_ApiV3KeyAPIv3 密鑰、TenPayV3_TenpayNotify支付回調(diào)地址。EncryptionType必填為 RSA 或 SMSM2需根據(jù)商戶平臺申請證書時(shí)的類型選擇大部分情況為 RSA。開放平臺Component_Appid、Component_Secret、Component_Token、Component_EncodingAESKey。3. 多賬號注冊Items節(jié)點(diǎn)Items節(jié)點(diǎn)下可以添加任意多個(gè)、任意模塊、任意組合的賬號每個(gè)條目的字段格式與上一級節(jié)點(diǎn)對應(yīng)key 不能重復(fù)。配置文件內(nèi)置了第二個(gè)公眾號第三個(gè)公眾號第二個(gè)小程序企業(yè)微信審批等多個(gè)示例組。例如Items: { 第二個(gè)小程序: { WxOpenAppId: #{WxOpenAppId2}#, WxOpenAppSecret: #{WxOpenAppSecret2}#, WxOpenToken: #{WxOpenToken2}#, WxOpenEncodingAESKey: #{WxOpenEncodingAESKey2}# } }4.SenparcAiSetting可選 AI 能力示例還集成了 Senparc.AI支持 AzureOpenAI、OpenAI、NeuChar 等多種平臺通過AiPlatform枚舉選擇如AiPlatform: AzureOpenAI并可在Items下注冊額外的模型組合如AzureDalle3圖像生成配置。配置值中的#{...}#為 Azure DevOps 部署占位符。如果你有明文信息請刪除占位符符號直接寫入完整字符串例如Token: MyFullToken。五、啟動(dòng)與注冊流程Program.cs 與 Startup.cs1. 入口Program.csProgram.cs 使用標(biāo)準(zhǔn)的 Generic Host 創(chuàng)建 Web 主機(jī)關(guān)鍵在于通過UseServiceProviderFactory(new SenparcServiceProviderFactory())注入 Senparc 自定義的依賴注入工廠這是 SDK 注冊的基礎(chǔ)Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder { webBuilder.UseStartupStartup(); }).UseServiceProviderFactory(new SenparcServiceProviderFactory());2. 服務(wù)注冊ConfigureServicesStartup.cs 的ConfigureServices()完成了核心注冊services.AddSession()使用 Session必須在配置 Mvc 之前。AddControllersWithViews().AddNewtonsoftJson()MVC 視圖 NewtonsoftJson 序列化支持。services.AddMemoryCache()本地緩存內(nèi)存緩存必加。services.AddSignalR()WebSocket 實(shí)時(shí)通信。services.AddSenparcWeixin(Configuration, Env)Senparc.Weixin 注冊必須隨后通過.AddSenparcWebSocketCustomNetCoreWebSocketMessageHandler()注冊 WebSocket.AddSenparcAI(Configuration)注冊 AI 能力可選。部署在 IIS 時(shí)需啟用services.ConfigureIISServerOptions(options options.AllowSynchronousIO true)部署在 Linux 時(shí)對應(yīng)配置KestrelServerOptions源碼中已給出注釋示例。3. 管道配置ConfigureConfigure()中展示了完整的中間件編排順序其注冊順序具有強(qiáng)參考價(jià)值Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // 啟用 GB2312按需 app.UseEnableRequestRewind(); app.UseSession(); app.UseSenparcGlobal(env, senparcSetting.Value, globalRegister { /* 緩存、日志、APM 配置 */ }) .UseSenparcWeixin(senparcWeixinSetting.Value, (weixinRegister, weixinSetting) { /* 微信賬號注冊 */ }); app.UseAuthorization(); app.UseEndpoints(endpoints { ... });其中UseSenparcGlobal()內(nèi)的globalRegister回調(diào)負(fù)責(zé)全局緩存配置ChangeDefaultCacheNamespace()設(shè)置緩存命名空間多網(wǎng)站共用同一分布式緩存時(shí)的隔離手段按需注冊 CsRedisUseKeyValueRedisNow()鍵值對策略推薦或 MemcachedUseMemcachedNow()。TraceLog 注冊RegisterTraceLog(ConfigTraceLog)其中ConfigTraceLog()演示了SenparcTrace.SendCustomLog、SenparcTrace.OnLogFunc、WeixinTrace.OnWeixinExceptionFunc異常時(shí)發(fā)送模板消息給管理員等日志回調(diào)。UseSenparcWeixin()內(nèi)的weixinRegister回調(diào)則負(fù)責(zé)微信賬號注冊建議按以下順序執(zhí)行尤其須將緩存放在第一位微信緩存UseSenparcWeixinCacheCsRedis()與 StackExchange.Redis 兩選一、UseSenparcWeixinCacheMemcached()。注意使用非本地緩存卻不注冊會收到當(dāng)前擴(kuò)展緩存策略沒有進(jìn)行注冊的異常。公眾號/小程序RegisterMpAccount(...)、RegisterWxOpenAccount(senparcWeixinSetting.Value, 【盛派網(wǎng)絡(luò)小助手】小程序)并演示了使用Items[第二個(gè)小程序]注冊第二個(gè)賬號。企業(yè)微信RegisterWorkAccount(senparcWeixinSetting.Value, 【盛派網(wǎng)絡(luò)】企業(yè)微信)、RegisterWorkAccount(senparcWeixinSetting.Value[企業(yè)微信審批], ...)。微信支付RegisterTenpayOld(...)V2、RegisterTenpayV3(...)、RegisterTenpayApiV3(...)最新的 APIv3。開放平臺RegisterOpenComponent(...)并給出三個(gè)委托實(shí)現(xiàn)——getComponentVerifyTicketFunc從App_Data/OpenTicket讀取 component_verify_ticket、getAuthorizerRefreshTokenFunc從App_Data/AuthorizerInfo讀取授權(quán)方 refresh_token、authorizerTokenRefreshedFunctoken 刷新后回寫本地文件。源碼注釋明確提示本地文件存儲僅方便演示分布式系統(tǒng)請使用其他存儲方式。六、公眾號消息接入的兩種方式方式一MessageHandler 中間件推薦Startup.cs 中使用app.UseMessageHandlerForMp(/WeixinAsync, ...)直接掛載公眾號消息處理器無需單獨(dú)創(chuàng)建 Controller。其 options 演示了完整配置項(xiàng)app.UseMessageHandlerForMp(/WeixinAsync, CustomMessageHandler.GenerateMessageHandler, options { options.AccountSettingFunc context senparcWeixinSetting.Value; // [必須] 動(dòng)態(tài)指定賬號配置 options.DefaultMessageHandlerAsyncEvent DefaultMessageHandlerAsyncEvent.SelfSynicMethod; // [可選] 未重寫異步方法時(shí)調(diào)用同步方法 options.EnableRequestLog true; // [可選] 請求日志默認(rèn)為 true options.EnbleResponseLog true; // [可選] 回復(fù)日志默認(rèn)為 true options.AggregateExceptionCatch ex { /* 異常處理 */ return false; }; options.TextResponseLimitOptions new TextResponseLimitOptions(2048, senparcWeixinSetting.Value.WeixinAppId); // 超長文本自動(dòng)走客服接口分批次回復(fù) });中間件同樣支持小程序與企業(yè)微信UseMessageHandlerForWxOpen(/WxOpenAsync, ...)與UseMessageHandlerForWork(/WorkAsync, ...)。中間件還支持多賬號通過 URL 參數(shù)如/Weixin?id1在AccountSettingFunc中從context.Request讀取參數(shù)并返回對應(yīng)的SenparcWeixinSetting。方式二傳統(tǒng) Controller精細(xì)控制WeixinController.cs 展示了有特殊自定義需求時(shí)的消息處理方案可高度控制處理過程的每個(gè)細(xì)節(jié)。其Get微信后臺驗(yàn)證方法核心邏輯為[HttpGet] [ActionName(Index)] public ActionResult Get(PostModel postModel, string echostr) { if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return Content(echostr); // 返回隨機(jī)字符串則表示驗(yàn)證通過 } ... }Controller 從Config.SenparcWeixinSetting.MpSetting讀取Token、EncodingAESKey、WeixinAppId與公眾平臺后臺保持一致區(qū)分大小寫Post方法則通過messageHandler.ExecuteAsync()處理用戶消息SDK 已全面轉(zhuǎn)向異步方法驅(qū)動(dòng)不再推薦同步方法。七、其他運(yùn)行框架的對應(yīng) Demo如果你的運(yùn)行環(huán)境并非 .NET 8.0倉庫在同一目錄族下提供了其他版本的示例.NET 10.0 Demo推薦net10-mvc/Senparc.Weixin.Sample.Net10與當(dāng)前 .NET 8 示例結(jié)構(gòu)基本一致面向最新 .NET 版本。.NET Framework 4.5 Demonet45-mvc/Senparc.Weixin.MP.Sample。注意.NET Framework 4.5 版示例已于 2019 年 9 月 1 日起停止小版本更新但大版本更新仍保持同步且 .NET 4.5 所有庫的更新不受影響。此外Samples/MP 目錄下還提供了僅包含公眾號模塊的精簡示例Senparc.Weixin.Sample.MP與Senparc.Weixin.Sample.MP.Simple適合作為最小可運(yùn)行模板快速上手。八、部署與調(diào)試建議首次運(yùn)行確保本機(jī)安裝了 .NET 8.0 SDK建議配合 VS 2022克隆倉庫后直接打開解決方案編譯。若因條件編譯報(bào)錯(cuò)請檢查是否已安裝 .NET Framework 4.6.2 開發(fā)包。接入真實(shí)賬號將appsettings.json中對應(yīng)模塊的#{...}#占位符替換為真實(shí)參數(shù)Token、AppId、AppSecret 等并在微信公眾平臺/小程序后臺將服務(wù)器 URL 指向本示例對應(yīng)路由如/WeixinAsync或/Weixin。分布式緩存生產(chǎn)環(huán)境建議配置Cache_Redis_Configuration啟用 Redis并通過ChangeDefaultCacheNamespace設(shè)置命名空間本地聯(lián)調(diào)可直接使用默認(rèn)內(nèi)存緩存。日志與異常開發(fā)階段保持IsDebug true以記錄完整 API 請求日志正式發(fā)布前關(guān)閉 Debug并利用WeixinTrace.OnWeixinExceptionFunc接入異常告警如模板消息通知管理員。學(xué)習(xí)路徑先對照 Samples/All/net8-mvc/readme.md 理解項(xiàng)目全貌再按模塊逐個(gè)閱讀Controllers/Weixin/下的分模塊代碼配合 Samples/All/Senparc.Weixin.Sample.CommonService 中的消息處理器CustomMessageHandler 等與 src 目錄下的 SDK 源碼理解底層實(shí)現(xiàn)。本示例覆蓋了 SDK 從服務(wù)注冊、賬號配置、消息路由到緩存、日志、支付的完整接入鏈路是學(xué)習(xí) Senparc.Weixin 在 .NET 8.0 下綜合集成的首選參考也是將公眾號、小程序、企業(yè)微信、微信支付與開放平臺組合進(jìn)同一系統(tǒng)的落地范本。贊分享后端即時(shí)通訊金融科技【免費(fèi)下載鏈接】WeiXinMPSDK微信全平臺 .NET SDK Senparc.Weixin for C#支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公眾號、小程序、小游戲、微信支付、企業(yè)微信/企業(yè)號、開放平臺、JSSDK、微信周邊等全平臺。 WeChat SDK for C#.項(xiàng)目地址https://gitcode.com/gh_mirrors/we/WeiXinMPSDK點(diǎn)擊查看免費(fèi)下載相關(guān)推薦WeiXinMPSDK .NET 10 MVC 綜合示例指南基于 net10-mvc 部署與調(diào)試 Senparc.Weixin SDK 全平臺模塊WeiXinMPSDK .NET 10 MVC 綜合示例指南基于 net10 mvc 部署與調(diào)試 Senparc.Weixin SDK 全平臺模塊 本文以 W后端即時(shí)通訊金融科技Senparc.Weixin SDK .NET Framework 示例項(xiàng)目net45-mvc完全指南編譯、配置與全模塊實(shí)戰(zhàn)Senparc.Weixin SDK .NET Framework 示例項(xiàng)目net45 mvc完全指南編譯、配置與全模塊實(shí)戰(zhàn) 本文圍繞 WeiXinMPS后端即時(shí)通訊金融科技基于 .NET 10 的微信全平臺 SDK 綜合示例實(shí)戰(zhàn)Senparc.Weixin.Sample.Net10 架構(gòu)解析與 AI 對話集成基于 .NET 10 的微信全平臺 SDK 綜合示例實(shí)戰(zhàn)Senparc.Weixin.Sample.Net10 架構(gòu)解析與 AI 對話集成 本篇技術(shù)指南以 S后端即時(shí)通訊金融科技上一篇Netgear路由器救磚終極指南5分鐘快速恢復(fù)變磚設(shè)備下一篇終極Netgear路由器救磚指南nmrpflash工具完全解析創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考