From 77232bc3034c10bfebe44747f8d5138049dd6aae Mon Sep 17 00:00:00 2001 From: zpc Date: Tue, 27 Jan 2026 13:45:39 +0800 Subject: [PATCH] 32 --- server/HoneyBox/src/HoneyBox.Api/Program.cs | 5 +++++ .../HoneyBox/src/HoneyBox.Api/appsettings.json | 3 +++ .../HoneyBox.Core/Services/WechatPayService.cs | 17 +++++++++++++++++ .../Modules/ServiceModule.cs | 3 ++- .../HoneyBox.Model/Models/Auth/AppSettings.cs | 13 +++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 server/HoneyBox/src/HoneyBox.Model/Models/Auth/AppSettings.cs diff --git a/server/HoneyBox/src/HoneyBox.Api/Program.cs b/server/HoneyBox/src/HoneyBox.Api/Program.cs index 1e182d8e..a9ee1558 100644 --- a/server/HoneyBox/src/HoneyBox.Api/Program.cs +++ b/server/HoneyBox/src/HoneyBox.Api/Program.cs @@ -62,6 +62,11 @@ try builder.Configuration.GetSection("AmapSettings").Bind(amapSettings); builder.Services.AddSingleton(amapSettings); + // 配置应用程序设置(测试环境等) + var appSettings = new AppSettings(); + builder.Configuration.GetSection("AppSettings").Bind(appSettings); + builder.Services.AddSingleton(appSettings); + // 配置微信支付设置 builder.Services.Configure(builder.Configuration.GetSection("WechatPaySettings")); diff --git a/server/HoneyBox/src/HoneyBox.Api/appsettings.json b/server/HoneyBox/src/HoneyBox.Api/appsettings.json index ea3cd213..b5444bc3 100644 --- a/server/HoneyBox/src/HoneyBox.Api/appsettings.json +++ b/server/HoneyBox/src/HoneyBox.Api/appsettings.json @@ -3,6 +3,9 @@ "DefaultConnection": "Server=192.168.195.15;uid=sa;pwd=Dbt@com@123;Database=honey_box;MultipleActiveResultSets=true;pooling=true;min pool size=5;max pool size=32767;connect timeout=20;Encrypt=True;TrustServerCertificate=True;", "Redis": "192.168.195.15:6379,abortConnect=false,connectTimeout=5000" }, + "AppSettings": { + "IsTestEnvironment": true + }, "WechatPaySettings": { "DefaultMerchant": { "Name": "默认商户", diff --git a/server/HoneyBox/src/HoneyBox.Core/Services/WechatPayService.cs b/server/HoneyBox/src/HoneyBox.Core/Services/WechatPayService.cs index 0933283c..ea663230 100644 --- a/server/HoneyBox/src/HoneyBox.Core/Services/WechatPayService.cs +++ b/server/HoneyBox/src/HoneyBox.Core/Services/WechatPayService.cs @@ -5,6 +5,7 @@ using System.Xml; using HoneyBox.Core.Interfaces; using HoneyBox.Model.Data; using HoneyBox.Model.Entities; +using HoneyBox.Model.Models.Auth; using HoneyBox.Model.Models.Payment; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -24,6 +25,7 @@ public class WechatPayService : IWechatPayService private readonly IWechatService _wechatService; private readonly IRedisService _redisService; private readonly WechatPaySettings _settings; + private readonly AppSettings _appSettings; private readonly Lazy? _v3ServiceLazy; /// @@ -46,6 +48,11 @@ public class WechatPayService : IWechatPayService /// private static readonly TimeSpan FAILED_SHIPPING_EXPIRY = TimeSpan.FromDays(3); + /// + /// 测试用户支付金额(分) + /// + private const int TEST_USER_PAY_AMOUNT = 1; // 0.01元 = 1分 + public WechatPayService( HoneyBoxDbContext dbContext, HttpClient httpClient, @@ -54,6 +61,7 @@ public class WechatPayService : IWechatPayService IWechatService wechatService, IRedisService redisService, IOptions settings, + AppSettings appSettings, Lazy? v3ServiceLazy = null) { _dbContext = dbContext; @@ -63,6 +71,7 @@ public class WechatPayService : IWechatPayService _wechatService = wechatService; _redisService = redisService; _settings = settings.Value; + _appSettings = appSettings; _v3ServiceLazy = v3ServiceLazy; } @@ -132,6 +141,14 @@ public class WechatPayService : IWechatPayService var body = TruncateBody(request.Body, 30); var totalFee = (int)Math.Round(request.Amount * 100); // 转换为分 + // 测试环境下,IsTest=2 的用户支付金额改为 0.01 元 + if (_appSettings.IsTestEnvironment && user.IsTest == 2) + { + _logger.LogInformation("测试用户支付金额调整: UserId={UserId}, 原金额={OriginalAmount}分, 调整为={TestAmount}分", + request.UserId, totalFee, TEST_USER_PAY_AMOUNT); + totalFee = TEST_USER_PAY_AMOUNT; + } + var unifiedOrderParams = new Dictionary { { "appid", appId }, diff --git a/server/HoneyBox/src/HoneyBox.Infrastructure/Modules/ServiceModule.cs b/server/HoneyBox/src/HoneyBox.Infrastructure/Modules/ServiceModule.cs index be5be189..a7d98972 100644 --- a/server/HoneyBox/src/HoneyBox.Infrastructure/Modules/ServiceModule.cs +++ b/server/HoneyBox/src/HoneyBox.Infrastructure/Modules/ServiceModule.cs @@ -264,9 +264,10 @@ public class ServiceModule : Module var wechatService = c.Resolve(); var redisService = c.Resolve(); var settings = c.Resolve>(); + var appSettings = c.Resolve(); // Autofac 原生支持 Lazy,直接解析即可 var v3ServiceLazy = c.Resolve>(); - return new WechatPayService(dbContext, httpClientFactory.CreateClient(), logger, configService, wechatService, redisService, settings, v3ServiceLazy); + return new WechatPayService(dbContext, httpClientFactory.CreateClient(), logger, configService, wechatService, redisService, settings, appSettings, v3ServiceLazy); }).As().InstancePerLifetimeScope(); // 注册支付服务 diff --git a/server/HoneyBox/src/HoneyBox.Model/Models/Auth/AppSettings.cs b/server/HoneyBox/src/HoneyBox.Model/Models/Auth/AppSettings.cs new file mode 100644 index 00000000..915e90b8 --- /dev/null +++ b/server/HoneyBox/src/HoneyBox.Model/Models/Auth/AppSettings.cs @@ -0,0 +1,13 @@ +namespace HoneyBox.Model.Models.Auth; + +/// +/// 应用程序配置 +/// +public class AppSettings +{ + /// + /// 是否测试环境 + /// 测试环境下,IsTest=2 的用户支付金额会改为 0.01 元 + /// + public bool IsTestEnvironment { get; set; } = false; +}