Mud.Wechat.Abstractions
1.0.0
dotnet add package Mud.Wechat.Abstractions --version 1.0.0
NuGet\Install-Package Mud.Wechat.Abstractions -Version 1.0.0
<PackageReference Include="Mud.Wechat.Abstractions" Version="1.0.0" />
<PackageVersion Include="Mud.Wechat.Abstractions" Version="1.0.0" />
<PackageReference Include="Mud.Wechat.Abstractions" />
paket add Mud.Wechat.Abstractions --version 1.0.0
#r "nuget: Mud.Wechat.Abstractions, 1.0.0"
#:package Mud.Wechat.Abstractions@1.0.0
#addin nuget:?package=Mud.Wechat.Abstractions&version=1.0.0
#tool nuget:?package=Mud.Wechat.Abstractions&version=1.0.0
Mud.Wechat.Abstractions
Mud.Wechat 全仓的跨产品线共享叶层:七条产品线(企业微信 / 公众号 / 小程序 / 开放平台 / 微信支付 / 微信小店·视频号 / 腾讯广告)共同依赖的最底层包——响应契约、令牌存储端口与桥接编解码、回调密码学与信封契约、配置基座、异常判定、可观测性契约面。
零 ProjectReference(契约守卫 AB-G1 锁定),依赖单向向下收敛:任何包都可以引它,它不引任何本仓工程。
内容
- 响应契约(
Contracts/):IWechatApiResponse(ErrorCode/ErrorMessage/IsSuccess)——各产品线响应 DTO 的统一基底,Work.DataModels 等据此实现。 - 异常判定(
Exceptions/):WechatApiException与WechatApiResponseGuard.ThrowIfFailed<TResponse>(...)——把「官方errcode != 0」的判定收敛为单点,各线不再各写一份。 - 令牌存储端口(
TokenManager/):IWechatTokenStore(继承组件ITokenStore)与可选批量端口IWechatTokenStoreBatchRemove;InMemoryWechatTokenStore为默认进程内实现(并实现官方ITokenStoreAppPurge按应用清库面,U-4);WechatTokenStoreBridge(internal)负责接线组件桥接器与键映射,值编解码走官方MigrationTokenStoreCodec.Instance(U-1 迁移期:写侧单写相对秒{expiresInSeconds}|{token},读侧双读旧{expireMs}|{token}存量);各线失效码判定器经WechatTokenRecoveryPostConfigure追加进组件AdditionalTokenInvalidationDetectors(并集语义,多产品线互不覆盖)。 - 令牌恢复注册(
TokenManager/WechatTokenRecoveryRegistration.cs):AddWechatApiHosts(IServiceCollection)——SSRF 白名单的唯一登记点(把WechatApiHosts.AllowedBaseUrlDomains交予组件侧);AddWechatTokenRecovery(IServiceCollection)——注册恢复选项、校验器与令牌提供者,内部先调AddWechatApiHosts,并对后台刷新服务做Any(descriptor…)去重(防多线重复注册产生多个刷新宿主)。
- 回调共享内核(
Callback/):WechatCallbackCrypto(SHA1 排序验签 + AES-256-CBC + 官方 32 字节块手工 PKCS7 补位/剥离、Encrypt/Decrypt(out receiveId)/ParseSignatureQuery)、IWechatCallbackEnvelope、IWechatCallbackReplayGuard+InMemoryWechatCallbackReplayGuard(fail-closed 语义在端口层定义)、WechatCallbackException/WechatCallbackFailureKind/WechatCallbackInfrastructureException(基础设施故障,宿主映射 503 触发 96238 重推)/WechatCallbackDispatchOutcome、WechatCallbackQuery、WechatCallbackRouteKeys.Wildcard("*")、XElementPayloadSource(同名兄弟合并投影器)与WechatPayloadSourceCache、WechatCallbackTypeRegistry<T>(「应用键 → 类型」注册表基座:专属桶先于通配桶的匹配序在此单点定义,各线以派生类承载自己的处理器标记接口)。 - 配置基座(
Configuration/WechatAppConfigBase):AppKey/BaseUrl/AllowCustomBaseUrl/TimeoutSeconds/TokenRefreshThreshold/IsDefault等各线公共属性,子类只补本线凭据。 - 主机与键形状护栏(根目录):
WechatApiHosts(WorkBaseUrl = https://qyapi.weixin.qq.com、OfficialAccountBaseUrl = https://api.weixin.qq.com、AllowedBaseUrlDomains)、WechatAppKeyValidator([A-Za-z0-9]开头 +[\w.\-_]+ ≤128,防令牌键别名)、WechatCustomBaseUrlRegistry(internal,自定义主机登记)。 - 可观测性契约面(
Observability/Metrics/):WechatActivitySource(源名恒Mud.Wechat、Tags.Product/AppKey/Outcome/ErrorType/CorrelationId、Products.{work,officialaccount,miniprogram,openplatform,pay})与MeterExtensions.RecordDuration(Histogram<double>[,TagList])。本包只定义契约,不引入 OpenTelemetry 依赖——装配层在Mud.Wechat.OpenTelemetry。
用法
宿主通常不直接使用本包(它随各线主包传递引入)。仅在两种场景需要显式打交道:
// ① 自建存储端口实现(替换默认进程内实现)时,端口在本包:
services.TryAddSingleton<IWechatTokenStore>(new MyTokenStore());
services.TryAddSingleton<IWechatCallbackReplayGuard>(new MyReplayGuard()); // 故障必须上抛,不得吞
// ② 产品线无关的响应判定与令牌恢复装配(各线 DI 入口内部即走这两步):
services.AddWechatTokenRecovery();
WechatApiResponseGuard.ThrowIfFailed(response); // 非零 errcode → WechatApiException
自研 Activity / Meter 时按契约面打标签,勿另起键名:
using var activity = WechatActivitySource.Instance.StartActivity("send");
activity?.SetTag(WechatActivitySource.Tags.Product, WechatActivitySource.Products.Work);
依赖
Mud.HttpUtils3.0.9(唯一外部依赖)- 被引而不引:
Work.Abstractions/OfficialAccount.Abstractions/MiniProgram.Abstractions/Pay.Abstractions/OpenPlatform.Abstractions/Redis/OpenTelemetry等下游包均依赖本包。 InternalsVisibleTo授予各线主包与测试工程(含DynamicProxyGenAssembly2供 Moq)。
说明
- 目标框架:
netstandard2.0/net6.0/net8.0/net10.0(继承根Directory.Build.props)。netstandard2.0无IsExternalInitpolyfill ⇒ 本包内init/record一律禁用。 - 回调密码学的填充口径不可「修正」:官方按 32 字节块手工 PKCS7,pad 取值范围 17..32,禁用 .NET 内置
PaddingMode.PKCS7(16 块)否则会误拒合法报文。 - 抗重放是 fail-closed 语义:
IWechatCallbackReplayGuard实现遇到存储故障必须上抛(推荐WechatCallbackInfrastructureException,企微中间件专用 catch 映射 503 触发官方 96238 重推),禁止吞异常返回true(放行重放)或false(静默丢事件且官方不再重试)。 - Pay 线不使用本包的 XML 密码学(其为 JSON + AEAD-GCM 体系),只复用响应契约、配置基座与可观测性契约面。
- 本包的契约面由
Tests/Mud.Wechat.Abstractions.Tests/ContractGuards/锁定:WechatAbstractionsContractGuards(AB-G1 叶子无工程引用 … AB-G7 回调宿主包必须产 nupkg 且内嵌analyzers/dotnet/cs、两工具工程IsPackable=false)与WechatCallbackKernelContractGuards(CB-L1 系列,编号与企微侧 CB1~CB24 避让)。新增/改动共享面须同批更新守卫。 - 七条产品线在同一宿主共存的能力边界由
CrossProductLineCoexistenceTests(X1~X7)锁定——尤其「同一进程内各线令牌互不串号」。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options (>= 10.0.12)
- Mud.HttpUtils (>= 3.0.9)
- System.Text.Json (>= 10.0.12)
-
net10.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options (>= 10.0.12)
- Mud.HttpUtils (>= 3.0.9)
-
net6.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options (>= 10.0.12)
- Mud.HttpUtils (>= 3.0.9)
-
net8.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options (>= 10.0.12)
- Mud.HttpUtils (>= 3.0.9)
NuGet packages (10)
Showing the top 5 NuGet packages that depend on Mud.Wechat.Abstractions:
| Package | Downloads |
|---|---|
|
Mud.Wechat.AI
微信生态 AI 共享层(跨七线):契约面 —— 工具身份轴 WechatToolPrincipal / 风险词表 WechatToolRiskVocabulary / 会话事实 WechatConversationFacts / 事件装配端口 IContextAssembler;运行时面 —— 统一信封读取器 WechatApiResultReader(IWechatApiResponse → 中立 ToolApiOutcome<T>)与会话请求投影工厂 WechatConversationRequestFactory。依赖限于中立引擎契约 Mud.AI.Abstractions / Mud.AI.Agent,不依赖任何产品线专属包(原 Mud.Wechat.AI.Abstractions 与 Mud.Wechat.AI.Agent 两包于 2026-10 包合并并入本包,命名空间不变)。 |
|
|
Mud.Wechat.Channels
微信小店/视频号(channels 生态)SDK:配置面 ChannelsAppConfig、令牌类型/管理器(Wechat.Channels.AccessToken,双通道 token/stable_token)、多应用基座、异常与错误码、回调信封与载荷契约、27 个业务域官方 DTO(AOT 源生成 JsonContext)、业务声明式客户端(商品/订单/售后/物流/资金/营销/联盟/会员/直播留资/橱窗/团购核销等)、模块注册器。一线一入口包(2026-10 包合并:原 Mud.Wechat.Channels.Abstractions / Mud.Wechat.Channels.DataModels 并入本包,命名空间不变;收推送另引 Mud.Wechat.Channels.Callback)。小店 AppID 与公众号/小程序 AppID 不互通,令牌域独立(设计方案 v1 §3.2)。 |
|
|
Mud.Wechat.Pay
微信支付 SDK:商户配置面、签名/验签与加解密端口、平台证书存储端口、通知信封、官方错误码与异常(以上原 Abstractions 面)、APIv3 与 APIv2 全部出入参 DTO(AOT 源生成 JsonContext)、业务声明式客户端(基础交易/退款/账单/平台证书/分账/商家转账/发票/_pay_score_ 等 v3 域,与 v2 XML+MD5/HMAC-SHA256 遗留域)、模块注册器、RSA 签名器、AES-256-GCM 加解密、账单下载通道。一线一入口包(2026-10 包合并:原 Mud.Wechat.Pay.Abstractions / Mud.Wechat.Pay.DataModels / Mud.Wechat.Pay.V2 / Mud.Wechat.Pay.V2.DataModels 并入本包,命名空间不变;收通知另引 Mud.Wechat.Pay.Callback)。 |
|
|
Mud.Wechat.Ads
腾讯广告(Tencent Ads) Marketing API v3.0 SDK:应用配置面与 OAuth 凭据端口、官方错误码与异常、全部出入参 DTO(AOT 源生成 JsonContext)、业务声明式客户端(OAuth 授权、客户账号、营销单元、创意、创意组件、素材、人群包、资质、定向包、报表、资金、异步任务)与模块注册器。一线一工程(2026-10 包合并:原 Mud.Wechat.Ads.Abstractions / Mud.Wechat.Ads.DataModels 并入本包,命名空间不变)。 |
|
|
Mud.Wechat.OpenTelemetry
Mud.Wechat OpenTelemetry 适配包,一键开启微信 SDK 的分布式追踪与指标采集,自动注册 Wechat ActivitySource、产品线 Meter 以及 Mud.HttpUtils 可观测性源,net8.0+ 原生 AOT 兼容。 |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 75 | 10/29/2026 |