// 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。 // // 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。 using Newtonsoft.Json; namespace Admin.NET.Core.Service; /// /// 微信API客户端 /// public partial class WechatApiClientFactory : ISingleton { private readonly IHttpClientFactory _httpClientFactory; public readonly WechatOptions _wechatOptions; public WechatApiClientFactory(IHttpClientFactory httpClientFactory, IOptions wechatOptions) { _httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory)); _wechatOptions = wechatOptions.Value ?? throw new ArgumentNullException(nameof(wechatOptions)); } /// /// 微信公众号 /// /// public WechatApiClient CreateWechatClient() { if (string.IsNullOrEmpty(_wechatOptions.WechatAppId) || string.IsNullOrEmpty(_wechatOptions.WechatAppSecret)) throw Oops.Oh("微信公众号配置错误"); var client = WechatApiClientBuilder.Create(new WechatApiClientOptions() { AppId = _wechatOptions.WechatAppId, AppSecret = _wechatOptions.WechatAppSecret, }) .UseHttpClient(_httpClientFactory.CreateClient(), disposeClient: false) // 设置 HttpClient 不随客户端一同销毁 .Build(); client.Configure(config => { JsonSerializerSettings jsonSerializerSettings = NewtonsoftJsonSerializer.GetDefaultSerializerSettings(); jsonSerializerSettings.Formatting = Formatting.Indented; config.JsonSerializer = new NewtonsoftJsonSerializer(jsonSerializerSettings); // 指定 System.Text.Json JSON序列化 // config.JsonSerializer = new SystemTextJsonSerializer(jsonSerializerOptions); // 指定 Newtonsoft.Json JSON序列化 }); return client; } /// /// 微信小程序 /// /// public WechatApiClient CreateWxOpenClient() { if (string.IsNullOrEmpty(_wechatOptions.WxOpenAppId) || string.IsNullOrEmpty(_wechatOptions.WxOpenAppSecret)) throw Oops.Oh("微信小程序配置错误"); var client = WechatApiClientBuilder.Create(new WechatApiClientOptions() { AppId = _wechatOptions.WxOpenAppId, AppSecret = _wechatOptions.WxOpenAppSecret }) .UseHttpClient(_httpClientFactory.CreateClient(), disposeClient: false) // 设置 HttpClient 不随客户端一同销毁 .Build(); client.Configure(config => { JsonSerializerSettings jsonSerializerSettings = NewtonsoftJsonSerializer.GetDefaultSerializerSettings(); jsonSerializerSettings.Formatting = Formatting.Indented; config.JsonSerializer = new NewtonsoftJsonSerializer(jsonSerializerSettings); // 指定 System.Text.Json JSON序列化 // config.JsonSerializer = new SystemTextJsonSerializer(jsonSerializerOptions); // 指定 Newtonsoft.Json JSON序列化 }); return client; } }