WechatApiHttpClient.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. using Newtonsoft.Json;
  7. namespace Admin.NET.Core.Service;
  8. /// <summary>
  9. /// 微信API客户端
  10. /// </summary>
  11. public partial class WechatApiClientFactory : ISingleton
  12. {
  13. private readonly IHttpClientFactory _httpClientFactory;
  14. public readonly WechatOptions _wechatOptions;
  15. public WechatApiClientFactory(IHttpClientFactory httpClientFactory, IOptions<WechatOptions> wechatOptions)
  16. {
  17. _httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory));
  18. _wechatOptions = wechatOptions.Value ?? throw new ArgumentNullException(nameof(wechatOptions));
  19. }
  20. /// <summary>
  21. /// 微信公众号
  22. /// </summary>
  23. /// <returns></returns>
  24. public WechatApiClient CreateWechatClient()
  25. {
  26. if (string.IsNullOrEmpty(_wechatOptions.WechatAppId) || string.IsNullOrEmpty(_wechatOptions.WechatAppSecret))
  27. throw Oops.Oh("微信公众号配置错误");
  28. var client = WechatApiClientBuilder.Create(new WechatApiClientOptions()
  29. {
  30. AppId = _wechatOptions.WechatAppId,
  31. AppSecret = _wechatOptions.WechatAppSecret,
  32. PushToken = _wechatOptions.WechatToken,
  33. PushEncodingAESKey = _wechatOptions.WechatEncodingAESKey,
  34. })
  35. .UseHttpClient(_httpClientFactory.CreateClient(), disposeClient: false) // 设置 HttpClient 不随客户端一同销毁
  36. .Build();
  37. client.Configure(config =>
  38. {
  39. JsonSerializerSettings jsonSerializerSettings = NewtonsoftJsonSerializer.GetDefaultSerializerSettings();
  40. jsonSerializerSettings.Formatting = Formatting.Indented;
  41. config.JsonSerializer = new NewtonsoftJsonSerializer(jsonSerializerSettings); // 指定 System.Text.Json JSON序列化
  42. // config.JsonSerializer = new SystemTextJsonSerializer(jsonSerializerOptions); // 指定 Newtonsoft.Json JSON序列化
  43. });
  44. return client;
  45. }
  46. /// <summary>
  47. /// 微信小程序
  48. /// </summary>
  49. /// <returns></returns>
  50. public WechatApiClient CreateWxOpenClient()
  51. {
  52. if (string.IsNullOrEmpty(_wechatOptions.WxOpenAppId) || string.IsNullOrEmpty(_wechatOptions.WxOpenAppSecret))
  53. throw Oops.Oh("微信小程序配置错误");
  54. var client = WechatApiClientBuilder.Create(new WechatApiClientOptions()
  55. {
  56. AppId = _wechatOptions.WxOpenAppId,
  57. AppSecret = _wechatOptions.WxOpenAppSecret,
  58. PushToken = _wechatOptions.WxToken,
  59. PushEncodingAESKey = _wechatOptions.WxEncodingAESKey,
  60. })
  61. .UseHttpClient(_httpClientFactory.CreateClient(), disposeClient: false) // 设置 HttpClient 不随客户端一同销毁
  62. .Build();
  63. client.Configure(config =>
  64. {
  65. JsonSerializerSettings jsonSerializerSettings = NewtonsoftJsonSerializer.GetDefaultSerializerSettings();
  66. jsonSerializerSettings.Formatting = Formatting.Indented;
  67. config.JsonSerializer = new NewtonsoftJsonSerializer(jsonSerializerSettings); // 指定 System.Text.Json JSON序列化
  68. // config.JsonSerializer = new SystemTextJsonSerializer(jsonSerializerOptions); // 指定 Newtonsoft.Json JSON序列化
  69. });
  70. return client;
  71. }
  72. }