Roc пре 6 година
родитељ
комит
e08a28c159

+ 13 - 10
samples/WebApplicationSample/Controllers/JDPayController.cs

@@ -4,6 +4,7 @@ using Essensoft.AspNetCore.Payment.JDPay;
 using Essensoft.AspNetCore.Payment.JDPay.Notify;
 using Essensoft.AspNetCore.Payment.JDPay.Request;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
 using WebApplicationSample.Models;
 
 namespace WebApplicationSample.Controllers
@@ -12,11 +13,13 @@ namespace WebApplicationSample.Controllers
     {
         private readonly IJDPayClient _client;
         private readonly IJDPayNotifyClient _notifyClient;
+        private readonly IOptions<JDPayOptions> _optionsAccessor;
 
-        public JDPayController(IJDPayClient client, IJDPayNotifyClient notifyClient)
+        public JDPayController(IJDPayClient client, IJDPayNotifyClient notifyClient, IOptions<JDPayOptions> optionsAccessor)
         {
             _client = client;
             _notifyClient = notifyClient;
+            _optionsAccessor = optionsAccessor;
         }
 
         /// <summary>
@@ -59,7 +62,7 @@ namespace WebApplicationSample.Controllers
                 UserId = viewModel.UserId
             };
 
-            var response = await _client.PageExecuteAsync(request);
+            var response = await _client.PageExecuteAsync(request, _optionsAccessor.Value);
             return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
@@ -94,7 +97,7 @@ namespace WebApplicationSample.Controllers
                 UserId = viewModel.UserId
             };
 
-            var response = await _client.PageExecuteAsync(request);
+            var response = await _client.PageExecuteAsync(request, _optionsAccessor.Value);
             return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
@@ -128,7 +131,7 @@ namespace WebApplicationSample.Controllers
                 TradeType = viewModel.TradeType
             };
 
-            var response = await _client.ExecuteAsync(request);
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
             ViewData["qrcode"] = response.QrCode;
             ViewData["response"] = response.Body;
             return View();
@@ -159,7 +162,7 @@ namespace WebApplicationSample.Controllers
                 TradeType = viewModel.TradeType
             };
 
-            var response = await _client.ExecuteAsync(request);
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
             ViewData["response"] = response.Body;
             return View();
         }
@@ -191,7 +194,7 @@ namespace WebApplicationSample.Controllers
                 NotifyUrl = viewModel.NotifyUrl
             };
 
-            var response = await _client.ExecuteAsync(request);
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
             ViewData["response"] = response.Body;
             return View();
         }
@@ -221,7 +224,7 @@ namespace WebApplicationSample.Controllers
                 TradeType = viewModel.TradeType
             };
 
-            var response = await _client.ExecuteAsync(request);
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
             ViewData["response"] = response.Body;
             return View();
         }
@@ -277,7 +280,7 @@ namespace WebApplicationSample.Controllers
                 BankCardId = viewModel.BankCardId
             };
 
-            var response = await _client.ExecuteAsync(request);
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
             ViewData["response"] = response.Body;
             return View();
         }
@@ -308,7 +311,7 @@ namespace WebApplicationSample.Controllers
                 TradeType = viewModel.TradeType
             };
 
-            var response = await _client.ExecuteAsync(request);
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
             ViewData["response"] = response.Body;
             return View();
         }
@@ -324,7 +327,7 @@ namespace WebApplicationSample.Controllers
         {
             try
             {
-                var notify = await _notifyClient.ExecuteAsync<JDPaySyncReturn>(Request);
+                var notify = await _notifyClient.ExecuteAsync<JDPaySyncReturn>(Request, _optionsAccessor.Value);
                 ViewData["response"] = "支付成功";
                 return View();
             }

+ 5 - 3
samples/WebApplicationSample/Controllers/NotifyController.cs

@@ -318,10 +318,12 @@ namespace WebApplicationSample.Controllers
     public class JDPayNotifyController : Controller
     {
         private readonly IJDPayNotifyClient _client;
+        private readonly IOptions<JDPayOptions> _optionsAccessor;
 
-        public JDPayNotifyController(IJDPayNotifyClient client)
+        public JDPayNotifyController(IJDPayNotifyClient client, IOptions<JDPayOptions> optionsAccessor)
         {
             _client = client;
+            _optionsAccessor = optionsAccessor;
         }
 
         [Route("async")]
@@ -330,7 +332,7 @@ namespace WebApplicationSample.Controllers
         {
             try
             {
-                var notify = await _client.ExecuteAsync<JDPayAsyncNotify>(Request);
+                var notify = await _client.ExecuteAsync<JDPayAsyncNotify>(Request, _optionsAccessor.Value);
                 Console.WriteLine("TradeNum: " + notify.TradeNum + " tradeType :" + notify.TradeType);// notify.TradeType 0-消费 1-退款
                 return JDPayNotifyResult.Success;
             }
@@ -346,7 +348,7 @@ namespace WebApplicationSample.Controllers
         {
             try
             {
-                var notify = await _client.ExecuteAsync<JDPayDefrayPayNotify>(Request);
+                var notify = await _client.ExecuteAsync<JDPayDefrayPayNotify>(Request, _optionsAccessor.Value);
                 Console.WriteLine("trade_no: " + notify.TradeNo + " trade_amount :" + notify.TradeAmount);
                 return JDPayNotifyResult.Success;
             }

+ 6 - 28
src/Essensoft.AspNetCore.Payment.JDPay/IJDPayClient.cs

@@ -11,47 +11,25 @@ namespace Essensoft.AspNetCore.Payment.JDPay
         /// 执行JDPay API请求。
         /// </summary>
         /// <param name="request">具体的JDPay API请求</param>
+        /// <param name="options">配置选项</param>
         /// <returns>领域对象</returns>
-        Task<T> ExecuteAsync<T>(IJDPayRequest<T> request) where T : JDPayResponse;
-
-        /// <summary>
-        /// 执行JDPay API请求。
-        /// </summary>
-        /// <param name="request">具体的JDPay API请求</param>
-        /// <param name="optionsName">配置选项名称</param>
-        /// <returns>领域对象</returns>
-        Task<T> ExecuteAsync<T>(IJDPayRequest<T> request, string optionsName) where T : JDPayResponse;
+        Task<T> ExecuteAsync<T>(IJDPayRequest<T> request, JDPayOptions options) where T : JDPayResponse;
 
         /// <summary>
         /// 执行JDPay API请求。
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <param name="request">具体的JDPay API请求</param>
+        /// <param name="options">配置选项</param>
         /// <returns></returns>
-        Task<T> PageExecuteAsync<T>(IJDPayRequest<T> request) where T : JDPayResponse;
-
-        /// <summary>
-        /// 执行JDPay API请求。
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="request">具体的JDPay API请求</param>
-        /// <param name="optionsName">配置选项名称</param>
-        /// <returns></returns>
-        Task<T> PageExecuteAsync<T>(IJDPayRequest<T> request, string optionsName) where T : JDPayResponse;
-
-        /// <summary>
-        /// 执行JDPay API请求。
-        /// </summary>
-        /// <param name="request">具体的JDPay API请求</param>
-        /// <returns>领域对象</returns>
-        Task<T> ExecuteAsync<T>(IJDPayNPP10Request<T> request) where T : JDPayResponse;
+        Task<T> PageExecuteAsync<T>(IJDPayRequest<T> request, JDPayOptions options) where T : JDPayResponse;
 
         /// <summary>
         /// 执行JDPay API请求。
         /// </summary>
         /// <param name="request">具体的JDPay API请求</param>
-        /// <param name="optionsName">配置选项名称</param>
+        /// <param name="options">配置选项</param>
         /// <returns>领域对象</returns>
-        Task<T> ExecuteAsync<T>(IJDPayNPP10Request<T> request, string optionsName) where T : JDPayResponse;
+        Task<T> ExecuteAsync<T>(IJDPayNPP10Request<T> request, JDPayOptions options) where T : JDPayResponse;
     }
 }

+ 2 - 10
src/Essensoft.AspNetCore.Payment.JDPay/IJDPayNotifyClient.cs

@@ -13,16 +13,8 @@ namespace Essensoft.AspNetCore.Payment.JDPay
         /// </summary>
         /// <typeparam name="T">领域对象</typeparam>
         /// <param name="request">控制器的请求</param>
+        /// <param name="options">配置选项</param>
         /// <returns>领域对象</returns>
-        Task<T> ExecuteAsync<T>(HttpRequest request) where T : JDPayNotify;
-
-        /// <summary>
-        /// 执行JDPay通知请求解析。
-        /// </summary>
-        /// <typeparam name="T">领域对象</typeparam>
-        /// <param name="request">控制器的请求</param>
-        /// <param name="optionsName">配置选项名称</param>
-        /// <returns>领域对象</returns>
-        Task<T> ExecuteAsync<T>(HttpRequest request, string optionsName) where T : JDPayNotify;
+        Task<T> ExecuteAsync<T>(HttpRequest request, JDPayOptions options) where T : JDPayNotify;
     }
 }

+ 8 - 39
src/Essensoft.AspNetCore.Payment.JDPay/JDPayClient.cs

@@ -8,8 +8,6 @@ using Essensoft.AspNetCore.Payment.JDPay.Parser;
 using Essensoft.AspNetCore.Payment.JDPay.Request;
 using Essensoft.AspNetCore.Payment.JDPay.Utility;
 using Essensoft.AspNetCore.Payment.Security;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
 using Newtonsoft.Json;
 
 namespace Essensoft.AspNetCore.Payment.JDPay
@@ -19,44 +17,30 @@ namespace Essensoft.AspNetCore.Payment.JDPay
     /// </summary>
     public class JDPayClient : IJDPayClient
     {
-        private readonly ILogger _logger;
-        private readonly IHttpClientFactory _clientFactory;
-        private readonly IOptionsSnapshot<JDPayOptions> _optionsSnapshotAccessor;
+        private readonly IHttpClientFactory _httpClientFactory;
 
         #region JDPayClient Constructors
 
         public JDPayClient(
-            ILogger<JDPayClient> logger,
-            IHttpClientFactory clientFactory,
-            IOptionsSnapshot<JDPayOptions> optionsAccessor)
+            IHttpClientFactory httpClientFactory)
         {
-            _logger = logger;
-            _clientFactory = clientFactory;
-            _optionsSnapshotAccessor = optionsAccessor;
+            _httpClientFactory = httpClientFactory;
         }
 
         #endregion
 
         #region IJDPayClient Members
 
-        public async Task<T> ExecuteAsync<T>(IJDPayRequest<T> request) where T : JDPayResponse
+        public async Task<T> ExecuteAsync<T>(IJDPayRequest<T> request, JDPayOptions options) where T : JDPayResponse
         {
-            return await ExecuteAsync(request, null);
-        }
-
-        public async Task<T> ExecuteAsync<T>(IJDPayRequest<T> request, string optionsName) where T : JDPayResponse
-        {
-            var options = _optionsSnapshotAccessor.Get(optionsName);
             // 字典排序
             var sortedTxtParams = new JDPayDictionary(request.GetParameters());
 
             var content = BuildEncryptXml(request, sortedTxtParams, options);
-            _logger.Log(options.LogLevel, "Request:{content}", content);
 
-            using (var client = _clientFactory.CreateClient())
+            using (var client = _httpClientFactory.CreateClient(nameof(JDPayClient)))
             {
                 var body = await client.DoPostAsync(request.GetRequestUrl(), content);
-                _logger.Log(options.LogLevel, "Response:{content}", body);
 
                 var parser = new JDPayXmlParser<T>();
                 var rsp = parser.Parse(JDPayUtility.FotmatXmlString(body));
@@ -65,7 +49,6 @@ namespace Essensoft.AspNetCore.Payment.JDPay
                     var encrypt = rsp.Encrypt;
                     var base64EncryptStr = Encoding.UTF8.GetString(Convert.FromBase64String(encrypt));
                     var reqBody = JDPaySecurity.DecryptECB(base64EncryptStr, options.DesKeyBase64);
-                    _logger.Log(options.LogLevel, "Encrypt Content:{body}", reqBody);
 
                     var reqBodyDoc = new XmlDocument();
                     reqBodyDoc.LoadXml(reqBody);
@@ -102,14 +85,8 @@ namespace Essensoft.AspNetCore.Payment.JDPay
 
         #region IJDPayClient Members
 
-        public Task<T> PageExecuteAsync<T>(IJDPayRequest<T> request) where T : JDPayResponse
+        public Task<T> PageExecuteAsync<T>(IJDPayRequest<T> request, JDPayOptions options) where T : JDPayResponse
         {
-            return PageExecuteAsync(request, null);
-        }
-
-        public Task<T> PageExecuteAsync<T>(IJDPayRequest<T> request, string optionsName) where T : JDPayResponse
-        {
-            var options = _optionsSnapshotAccessor.Get(optionsName);
             // 字典排序
             var sortedTxtParams = new JDPayDictionary(request.GetParameters());
             var encyptParams = BuildEncryptDic(request, sortedTxtParams, options);
@@ -124,14 +101,8 @@ namespace Essensoft.AspNetCore.Payment.JDPay
 
         #region IJDPayClient Members
 
-        public async Task<T> ExecuteAsync<T>(IJDPayNPP10Request<T> request) where T : JDPayResponse
-        {
-            return await ExecuteAsync(request, null);
-        }
-
-        public async Task<T> ExecuteAsync<T>(IJDPayNPP10Request<T> request, string optionsName) where T : JDPayResponse
+        public async Task<T> ExecuteAsync<T>(IJDPayNPP10Request<T> request, JDPayOptions options) where T : JDPayResponse
         {
-            var options = _optionsSnapshotAccessor.Get(optionsName);
             var sortedTxtParams = new JDPayDictionary(request.GetParameters())
             {
                 { JDPayContants.CUSTOMER_NO, options.CustomerNo },
@@ -148,12 +119,10 @@ namespace Essensoft.AspNetCore.Payment.JDPay
             var encryptDic = JDPaySecurity.EncryptData(options.PrivateCret, options.Password, options.PublicCert, sortedTxtParams, options.SingKey, options.EncryptType, isEncrypt);
 
             var content = JDPayUtility.BuildQuery(encryptDic);
-            _logger.Log(options.LogLevel, "Request:{content}", content);
 
-            using (var client = _clientFactory.CreateClient())
+            using (var client = _httpClientFactory.CreateClient(nameof(JDPayClient)))
             {
                 var body = await client.DoPostAsync(request.GetRequestUrl(), content, "application/x-www-form-urlencoded");
-                _logger.Log(options.LogLevel, "Response:{content}", body);
 
                 // 验签
                 var dictionary = JsonConvert.DeserializeObject<JDPayDictionary>(body);

+ 2 - 23
src/Essensoft.AspNetCore.Payment.JDPay/JDPayNotifyClient.cs

@@ -8,8 +8,6 @@ using Essensoft.AspNetCore.Payment.JDPay.Parser;
 using Essensoft.AspNetCore.Payment.JDPay.Utility;
 using Essensoft.AspNetCore.Payment.Security;
 using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
 
 namespace Essensoft.AspNetCore.Payment.JDPay
 {
@@ -18,40 +16,24 @@ namespace Essensoft.AspNetCore.Payment.JDPay
     /// </summary>
     public class JDPayNotifyClient : IJDPayNotifyClient
     {
-        private readonly ILogger _logger;
-        private readonly IOptionsSnapshot<JDPayOptions> _optionsSnapshotAccessor;
-
         #region JDPayNotifyClient Constructors
 
-        public JDPayNotifyClient(
-            ILogger<JDPayNotifyClient> logger,
-            IOptionsSnapshot<JDPayOptions> optionsAccessor)
+        public JDPayNotifyClient()
         {
-            _logger = logger;
-            _optionsSnapshotAccessor = optionsAccessor;
         }
 
         #endregion
 
         #region IJDPayNotifyClient Members
 
-        public async Task<T> ExecuteAsync<T>(HttpRequest request) where T : JDPayNotify
-        {
-            return await ExecuteAsync<T>(request, null);
-        }
-
-        public async Task<T> ExecuteAsync<T>(HttpRequest request, string optionsName) where T : JDPayNotify
+        public async Task<T> ExecuteAsync<T>(HttpRequest request, JDPayOptions options) where T : JDPayNotify
         {
-            var options = _optionsSnapshotAccessor.Get(optionsName);
             if (request.HasFormContentType || request.Method == "GET")
             {
                 var rspInstance = Activator.CreateInstance<T>();
 
                 var parameters = GetParameters(request, options, !(rspInstance is JDPayDefrayPayNotify));
 
-                var query = JDPayUtility.BuildQuery(parameters);
-                _logger.Log(options.LogLevel, "Request:{query}", query);
-
                 var parser = new JDPayDictionaryParser<T>();
                 var rsp = parser.Parse(parameters);
 
@@ -70,8 +52,6 @@ namespace Essensoft.AspNetCore.Payment.JDPay
             if (request.HasTextXmlContentType())
             {
                 var body = await new StreamReader(request.Body).ReadToEndAsync();
-                _logger.Log(options.LogLevel, "Request:{body}", body);
-
                 var parser = new JDPayXmlParser<T>();
                 var rsp = parser.Parse(JDPayUtility.FotmatXmlString(body));
                 if (!string.IsNullOrEmpty(rsp.Encrypt))
@@ -79,7 +59,6 @@ namespace Essensoft.AspNetCore.Payment.JDPay
                     var encrypt = rsp.Encrypt;
                     var base64EncryptStr = Encoding.UTF8.GetString(Convert.FromBase64String(encrypt));
                     var reqBody = JDPaySecurity.DecryptECB(base64EncryptStr, options.DesKeyBase64);
-                    _logger.Log(options.LogLevel, "Encrypt Content:{reqBody}", reqBody);
 
                     var reqBodyDoc = new XmlDocument();
                     reqBodyDoc.LoadXml(reqBody);

+ 0 - 6
src/Essensoft.AspNetCore.Payment.JDPay/JDPayOptions.cs

@@ -1,6 +1,5 @@
 using System;
 using Essensoft.AspNetCore.Payment.Security;
-using Microsoft.Extensions.Logging;
 using Org.BouncyCastle.Crypto;
 
 namespace Essensoft.AspNetCore.Payment.JDPay
@@ -105,10 +104,5 @@ namespace Essensoft.AspNetCore.Payment.JDPay
         /// 京东代付 签名类型 SHA-256
         /// </summary>
         public string SignType { get; set; } = "SHA-256";
-
-        /// <summary>
-        /// 日志等级
-        /// </summary>
-        public LogLevel LogLevel { get; set; } = LogLevel.Information;
     }
 }

+ 5 - 2
src/Essensoft.AspNetCore.Payment.JDPay/ServiceCollectionExtensions.cs

@@ -15,8 +15,11 @@ namespace Essensoft.AspNetCore.Payment.JDPay
             this IServiceCollection services,
             Action<JDPayOptions> setupAction)
         {
-            services.AddScoped<IJDPayClient, JDPayClient>();
-            services.AddScoped<IJDPayNotifyClient, JDPayNotifyClient>();
+            services.AddHttpClient(nameof(JDPayClient));
+
+            services.AddSingleton<IJDPayClient, JDPayClient>();
+            services.AddSingleton<IJDPayNotifyClient, JDPayNotifyClient>();
+
             if (setupAction != null)
             {
                 services.Configure(setupAction);