Mabang.Sdk 0.1.0

dotnet add package Mabang.Sdk --version 0.1.0
                    
NuGet\Install-Package Mabang.Sdk -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Mabang.Sdk" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mabang.Sdk" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="Mabang.Sdk" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Mabang.Sdk --version 0.1.0
                    
#r "nuget: Mabang.Sdk, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Mabang.Sdk@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Mabang.Sdk&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=Mabang.Sdk&version=0.1.0
                    
Install as a Cake Tool

Mabang SDK

面向 .NET 10 的马帮接口 SDK。首版正在实现中,目标是统一封装马帮公开 API 与已授权网页接口,并支持 DI、直接构造和运行时动态多账号。

当前状态

已完成:

  • net10.0 解决方案与双包结构。
  • 账号注册表、账号代际和内存会话快照存储。
  • 分层身份模型、会话优先身份解析和统一结果模型。
  • 统一客户端、账号上下文和首版业务服务契约。
  • DI Singleton 注册与基础契约测试。
  • 库存 SKU 公开 API 查询、新增的 HMAC-SHA256 请求、响应映射与真实 HTTP 执行器。

库存 SKU 公开 API 查询、新增、授权网页登录、库存 SKU 网页查询和库存分类列表网页接口已经接入;其余网页接口和业务路由仍会返回 CapabilityUnavailable 结果。网页登录会在建立 signed Cookie 后,从 cMKey 换取业务 API 的短期 Bearer token,供已支持的网页业务接口使用。真实网络执行器需要显式注入,避免未配置凭据时意外访问正式环境。

services.AddMabangSdk(options => options.DefaultAccountId = "account-1");

var registry = serviceProvider.GetRequiredService<IAccountRegistry>();
await registry.AddAsync(new AccountRegistration(
    "account-1",
    new AccountIdentity(PublicApi: new PublicApiCredentials("app-key", "app-secret"))));

var result = await serviceProvider
    .GetRequiredService<IMabangClient>()
    .ForAccount("account-1")
    .Stock
    .SearchSkuAsync(new SearchSkuRequest(Page: 1, PageSize: 50));

库存 SKU 网页查询使用已授权 Cookie 会话;请求默认查询正常销售的库存 SKU,并提供语义化链式条件:

var request = new StockSkuQueryRequest()
    .SearchStockSku()
    .LikeStart("MX-ABC-001")
    .StatusNormalSale()
    .OnPage(1)
    .WithRowsPerPage(100)
    .Build();

var result = await client.ForAccount("account-1").Stock.SearchStockSkuAsync(request);

条件参数也可以直接作用于同一个构建器,不需要接收每个链式方法的返回值:

var requestBuilder = new StockSkuQueryRequest();
requestBuilder.SearchStockSku();
if (!string.IsNullOrWhiteSpace(sku))
    requestBuilder.LikeStart(sku);

var request = requestBuilder.StatusAutoCreated().Build();

Build() 会校验当前条件并生成独立的请求快照。

外部会话/账号存储

AddMabangSdk 默认注册线程安全的 Singleton 内存实现;生产应用可以在组合根替换为独立适配器包提供的 Redis、MySQL 或 SQLite 实现。核心包不携带这些驱动依赖:

services.AddSingleton<IAccountRegistry, RedisAccountRegistry>();
services.AddSingleton<IWebSessionStore, RedisWebSessionStore>();
services.AddMabangSdk(options => options.DefaultAccountId = "account-1");

也可以直接安装 Mabang.Sdk.Redis 或 Mabang.Sdk.Sqlite,使用适配器提供的组合根扩展:

services.AddMabangRedisStorage(redisConnectionMultiplexer);
// 或:services.AddMabangSqliteStorage("Data Source=mabang.db");
services.AddMabangSdk(options => options.DefaultAccountId = "account-1");

由于 SDK 使用 TryAddSingleton,上述注册放在 AddMabangSdk 前后都可以。直接构造时,把 IAccountRegistry 作为现有参数传入,并用 MabangClient.Create 的第四个参数传入自定义 IWebSessionStore。适配器必须实现按账号隔离、版本乐观并发和快照无损序列化;详见 ADR-0089。

使用网页接口前,调用方必须拥有相应授权并遵守马帮服务条款、频率限制和数据保护要求。SDK 不绕过验证码、MFA 或风控。

默认客户端和 AddMabangSdk 仍使用 fail-closed 的能力占位执行器。要显式开启网络请求,推荐调用 AddMabangHttpTransports;也可以手动注册 PublicApiRequestExecutor、WebRequestExecutor、ProtocolRequestExecutor 和 IWebSessionAuthenticator。控制台项目包含完整示例。

HTTP 审计切面

外部应用可以注册 IMabangHttpObserver 接收 SDK HTTP 调用前后的快照。快照包含账号、业务操作、组件、ExchangeId、URL、请求/响应 headers、body、状态码和耗时;公开 API、网页接口以及网页登录流程都会进入同一观察接口。默认会脱敏 Authorization、Cookie、token、密码、用户名、AppKey 和 cMKey,body 默认最多记录 64 KiB。

services.AddSingleton<IMabangHttpObserver, AuditObserver>();
services.AddMabangSdk();
services.AddMabangHttpTransports(options =>
{
    options.MaximumBodyLength = 256 * 1024;
    // 只有在受控调试环境中才显式打开完整凭据和 Cookie 采集。
    options.IncludeSensitiveData = false;
});

AddMabangHttpTransports 会注册公开 API、网页 API、协议路由执行器和默认网页登录器,并自动把已注册的 IMabangHttpObserver 注入进去。若应用已经注册自定义 IWebSessionAuthenticator,SDK 会保留自定义实现。观察器抛出的异常会被 SDK 忽略,不会改变实际接口调用结果。若要记录完整 Authorization、Cookie 或网页登录表单,必须明确设置 IncludeSensitiveData = true,并自行确保日志存储符合安全要求。

控制台调试程序

仓库包含一个独立控制台程序,用于导入正式账号并调试 SKU 查询、新增和库存分类列表。add-sku 会产生写操作,请只使用明确授权的测试 SKU。它显式注册公开 API、网页登录和网页接口执行器,单元测试不会因此读取正式凭据。

控制台按 endpoint 拆分调试功能,可通过 --endpoint <name>、--test <name>、逗号分隔名称或 --all 选择运行哪些功能;完整配置、参数和新增 endpoint 的说明见 samples/Mabang.Sdk.Console/README.md。

dotnet user-secrets set "Mabang:DefaultAccountId" "production" --project samples/Mabang.Sdk.Console
dotnet user-secrets set "Mabang:Accounts:production:AppKey" "<app-key>" --project samples/Mabang.Sdk.Console
dotnet user-secrets set "Mabang:Accounts:production:AppSecret" "<app-secret>" --project samples/Mabang.Sdk.Console
dotnet user-secrets set "Mabang:Accounts:production:WebLogin:UserName" "<web-user-name>" --project samples/Mabang.Sdk.Console
dotnet user-secrets set "Mabang:Accounts:production:WebLogin:Password" "<web-password>" --project samples/Mabang.Sdk.Console
dotnet user-secrets set "Mabang:Query:Sku" "<sku>" --project samples/Mabang.Sdk.Console

dotnet run --project samples/Mabang.Sdk.Console
dotnet run --project samples/Mabang.Sdk.Console -- --account production --sku "<sku>" --page-size 20
dotnet run --project samples/Mabang.Sdk.Console -- --endpoint sku-search --account production --sku "<sku>"

可以在 Mabang:Accounts 下配置多个账号;--account 选择本次调用的账号。密钥和密码不通过命令行传入,也不会打印到控制台。AppToken 也可作为 AppSecret 的兼容别名。环境变量可使用 MABANG_Mabang__Accounts__production__AppKey 或 MABANG_Mabang__Accounts__production__WebLogin__Password 这类形式覆盖配置。

控制台样例使用 Serilog 将每个 HTTP 请求、响应和传输异常以脱敏 JSON 快照保存到运行目录的 logs/ 中,按日和 32 MiB 大小滚动,最多保留 30 个文件。详情见 samples/Mabang.Sdk.Console/README.md。

正式账号集成测试

正式账号只用于显式启用的集成测试,普通单元测试不读取或依赖真实凭据。集成测试项目通过 .NET user-secrets 读取以下值:

dotnet user-secrets set "Mabang:Integration:Enabled" "true" --project tests/Mabang.Sdk.IntegrationTests
dotnet user-secrets set "Mabang:Integration:AppKey" "<app-key>" --project tests/Mabang.Sdk.IntegrationTests
dotnet user-secrets set "Mabang:Integration:AppSecret" "<app-secret>" --project tests/Mabang.Sdk.IntegrationTests
dotnet user-secrets set "Mabang:Integration:Sku" "<sku>" --project tests/Mabang.Sdk.IntegrationTests
dotnet test tests/Mabang.Sdk.IntegrationTests --filter "Category=Integration"

测试缺少开关、凭据或 SKU 时会跳过;测试输出不会记录 AppSecret、签名或完整供应商响应。也可以使用环境变量 MABANG_Mabang__Integration__... 覆盖本机 user-secrets。

Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Mabang.Sdk:

Package Downloads
Mabang.Sdk.DependencyInjection

Mabang.Sdk 在 .NET 10 上的依赖注入集成。

Mabang.Sdk.Redis

基于 Redis 的 Mabang.Sdk 账号注册与网页会话存储适配器。

Mabang.Sdk.Sqlite

基于 SQLite 的 Mabang.Sdk 账号注册与网页会话存储适配器。

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 138 10/5/2026