诺诺开放平台SDK - 支持 .NET 8/9/10
- 🚀 开箱即用:使用强类型模型参数,无需手动拼接参数
- 🎯 多版本支持:.NET 8、.NET 9、.NET 10
- 🔧 依赖注入:完美集成 ASP.NET Core 依赖注入容器
- 📝 完整文档:提供详细的 XML 文档注释
- 🛡️ 类型安全:强类型请求和响应模型
- ⚡ 高性能:使用最新的 .NET 特性优化性能
dotnet add package NuoNuoOpenSdk// 方式一:从配置文件读取
builder.Services.AddNuoNuoSdk(builder.Configuration, "NuoNuo");
// 方式二:直接配置
builder.Services.AddNuoNuoSdk(options =>
{
options.AppKey = "your_app_key";
options.AppSecret = "your_app_secret";
options.UserTax = "your_user_tax";
options.AccessToken = "your_access_token"; // 可选
options.Timeout = 30; // 超时时间(秒)
});{
"NuoNuo": {
"AppKey": "your_app_key",
"AppSecret": "your_app_secret",
"UserTax": "your_user_tax",
"AccessToken": "your_access_token",
"Timeout": 30
}
}public class InvoiceController : ControllerBase
{
private readonly INuoNuoSdk _nuoNuoSdk;
public InvoiceController(INuoNuoSdk nuoNuoSdk)
{
_nuoNuoSdk = nuoNuoSdk;
}
[HttpGet("token")]
public async Task<IActionResult> GetToken()
{
// 获取访问令牌
var token = await _nuoNuoSdk.GetMerchantTokenAsync();
return Ok(token);
}
[HttpGet("stock")]
public async Task<IActionResult> GetInvoiceStock()
{
// 查询发票余量
var stockRes = await _nuoNuoSdk.GetInvoiceStockAsync(new GetInvoiceStockRequest
{
// AccessToken 会自动从配置中获取,也可以手动指定
});
return Ok(stockRes);
}
[HttpPost("billing")]
public async Task<IActionResult> RequestBilling([FromBody] RequestBillingRequest request)
{
// 请求开具发票
var result = await _nuoNuoSdk.RequestBillingRequest(request);
return Ok(result);
}
}- ✅ 获取访问令牌 (
GetMerchantTokenAsync) - ✅ ISV获取访问令牌 (
GetIsvTokenAsync) - ✅ ISV刷新访问令牌 (
RefreshIsvTokenAsync) - ✅ 企业发票余量查询 (
GetInvoiceStockAsync) - ✅ 请求开具发票 (
RequestBillingRequest) - ✅ 开票结果查询 (
QueryInvoiceResultAsync) - ✅ 开票重试 (
ReInvoiceAsync) - ✅ 发票重新交付 (
DeliveryInvoiceAsync) - ✅ 发票作废 (
InvoiceCancellationAsync)
builder.Services.AddNuoNuoSdk(builder.Configuration)
.ConfigureHttpClient(client =>
{
client.Timeout = TimeSpan.FromSeconds(60);
// 其他自定义配置
});try
{
var result = await _nuoNuoSdk.GetInvoiceStockAsync(request);
if (result.Success)
{
// 处理成功结果
Console.WriteLine($"库存查询成功: {result.Result}");
}
else
{
// 处理业务错误
Console.WriteLine($"业务错误: {result.Code} - {result.Describe}");
}
}
catch (HttpRequestException ex)
{
// 处理网络错误
Console.WriteLine($"网络错误: {ex.Message}");
}MIT License - 详见 LICENSE 文件
欢迎提交 Issue 和 Pull Request!
如有问题,请访问 诺诺开放平台官方文档 或提交 Issue。