Roc 6 years ago
parent
commit
a1dddff2ff

+ 4 - 3
samples/WebApplicationSample/Controllers/AlipayController.cs

@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.Text;
+using System.Threading.Tasks;
 using Essensoft.AspNetCore.Payment.Alipay;
 using Essensoft.AspNetCore.Payment.Alipay.Domain;
 using Essensoft.AspNetCore.Payment.Alipay.Notify;
@@ -127,7 +128,7 @@ namespace WebApplicationSample.Controllers
             req.SetReturnUrl(viewModel.ReturnUrl);
 
             var response = await _client.PageExecuteAsync(req);
-            return Content(response.Body, "text/html;charset=utf-8");
+            return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
         [HttpGet]
@@ -153,7 +154,7 @@ namespace WebApplicationSample.Controllers
             req.SetReturnUrl(viewMode.ReturnUrl);
 
             var response = await _client.PageExecuteAsync(req);
-            return Content(response.Body, "text/html;charset=utf-8");
+            return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
         [HttpGet]

+ 4 - 3
samples/WebApplicationSample/Controllers/JDPayController.cs

@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.Text;
+using System.Threading.Tasks;
 using Essensoft.AspNetCore.Payment.JDPay;
 using Essensoft.AspNetCore.Payment.JDPay.Notify;
 using Essensoft.AspNetCore.Payment.JDPay.Request;
@@ -46,7 +47,7 @@ namespace WebApplicationSample.Controllers
             };
 
             var response = await _client.PageExecuteAsync(request);
-            return Content(response.Body, "text/html;charset=utf-8");
+            return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
         [HttpGet]
@@ -72,7 +73,7 @@ namespace WebApplicationSample.Controllers
             };
 
             var response = await _client.PageExecuteAsync(request);
-            return Content(response.Body, "text/html;charset=utf-8");
+            return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
         [HttpGet]

+ 3 - 2
samples/WebApplicationSample/Controllers/UnionPayController.cs

@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.Text;
+using System.Threading.Tasks;
 using Essensoft.AspNetCore.Payment.UnionPay;
 using Essensoft.AspNetCore.Payment.UnionPay.Notify;
 using Essensoft.AspNetCore.Payment.UnionPay.Request;
@@ -47,7 +48,7 @@ namespace WebApplicationSample.Controllers
                 BackUrl = viewModel.BackUrl
             };
             var response = await _client.PageExecuteAsync(request);
-            return Content(response.Body, "text/html;charset=utf-8");
+            return Content(response.Body, "text/html", Encoding.UTF8);
         }
 
         [HttpPost]

+ 1 - 1
samples/WebApplicationSample/Views/UnionPay/GatewayPayFrontConsume.cshtml

@@ -11,7 +11,7 @@
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="UnionPay" asp-action="FrontConsume62" target="_blank">
+        <form asp-controller="UnionPay" asp-action="GatewayPayFrontConsume" target="_blank">
             <div asp-validation-summary="All" class="text-danger"></div>
             <div class="form-group">
                 <label asp-for="OrderId"></label>

+ 2 - 2
src/Essensoft.AspNetCore.Payment.Security/SHA256WithRSA.cs

@@ -7,7 +7,7 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class SHA256WithRSA
     {
-        public static string SignData(string data, AsymmetricKeyParameter key)
+        public static string SignData(string data, ICipherParameters key)
         {
             var signer = SignerUtilities.GetSigner("SHA256WithRSA");
             signer.Init(true, key);
@@ -16,7 +16,7 @@ namespace Essensoft.AspNetCore.Payment.Security
             return Convert.ToBase64String(signer.GenerateSignature());
         }
 
-        public static bool VerifyData(string data, string sign, AsymmetricKeyParameter key)
+        public static bool VerifyData(string data, string sign, ICipherParameters key)
         {
             var verifier = SignerUtilities.GetSigner("SHA256WithRSA");
             verifier.Init(false, key);

+ 2 - 11
src/Essensoft.AspNetCore.Payment.UnionPay/IUnionPayClient.cs

@@ -37,18 +37,9 @@ namespace Essensoft.AspNetCore.Payment.UnionPay
         /// </summary>
         /// <typeparam name="T">领域对象</typeparam>
         /// <param name="request">具体的UnionPay API请求</param>
-        /// <param name="reqMethod">请求类型(POST/GET)</param>
-        /// <returns>领域对象</returns>
-        Task<T> PageExecuteAsync<T>(IUnionPayRequest<T> request, string reqMethod) where T : UnionPayResponse;
-
-        /// <summary>
-        /// 执行UnionPay API请求。
-        /// </summary>
-        /// <typeparam name="T">领域对象</typeparam>
-        /// <param name="request">具体的UnionPay API请求</param>
-        /// <param name="reqMethod">请求类型(POST/GET)</param>
         /// <param name="optionsName">配置选项名称</param>
+        /// <param name="reqMethod">请求类型(POST/GET)</param>
         /// <returns>领域对象</returns>
-        Task<T> PageExecuteAsync<T>(IUnionPayRequest<T> request, string reqMethod, string optionsName) where T : UnionPayResponse;
+        Task<T> PageExecuteAsync<T>(IUnionPayRequest<T> request, string optionsName) where T : UnionPayResponse;
     }
 }

+ 1 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFrontConsumeRequest.cs

@@ -5,7 +5,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
     /// <summary>
     /// 网关支付(V2.2) 消费接口
     /// </summary>
-    public class UnionPayGatewayPayFrontConsumeRequest : IUnionPayRequest<UnionPayResponse>
+    public class UnionPayGatewayPayFrontConsumeRequest : IUnionPayRequest<UnionPayNullResponse>
     {
         /// <summary>
         /// 产品类型

+ 1 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayFrontOpenRequest.cs

@@ -5,7 +5,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
     /// <summary>
     /// 无跳转支付(V2.2) 银联全渠道支付开通交易
     /// </summary>
-    public class UnionPayNoRedirectPayFrontOpenRequest : IUnionPayRequest<UnionPayResponse>
+    public class UnionPayNoRedirectPayFrontOpenRequest : IUnionPayRequest<UnionPayNullResponse>
     {
         /// <summary>
         /// 标记化支付信息域

+ 1 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayOpenAndConsumeRequest.cs

@@ -5,7 +5,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
     /// <summary>
     /// 无跳转支付(V2.2) 银联全渠道开通并支付交易
     /// </summary>
-    public class UnionPayNoRedirectPayOpenAndConsumeRequest : IUnionPayRequest<UnionPayResponse>
+    public class UnionPayNoRedirectPayOpenAndConsumeRequest : IUnionPayRequest<UnionPayNullResponse>
     {
         /// <summary>
         /// 产品类型

+ 18 - 39
src/Essensoft.AspNetCore.Payment.UnionPay/UnionPayClient.cs

@@ -70,13 +70,15 @@ namespace Essensoft.AspNetCore.Payment.UnionPay
 
             if (request.HasEncryptCertId())
             {
-                var accNo = txtParams[ACCNO];
-                if (!string.IsNullOrEmpty(accNo))
+                if (txtParams.TryGetValue(ACCNO, out var accNo))
                 {
-                    // 对敏感信息加密
-                    txtParams[ACCNO] = UnionPaySignature.EncryptData(accNo, options.EncryptCertificate.key);
+                    if (!string.IsNullOrEmpty(accNo))
+                    {
+                        // 对敏感信息加密
+                        txtParams[ACCNO] = UnionPaySignature.EncryptData(accNo, options.EncryptCertificate.key);
 
-                    txtParams.Add(ENCRYPTCERTID, options.EncryptCertificate.certId);
+                        txtParams.Add(ENCRYPTCERTID, options.EncryptCertificate.certId);
+                    }
                 }
             }
 
@@ -116,15 +118,10 @@ namespace Essensoft.AspNetCore.Payment.UnionPay
 
         public Task<T> PageExecuteAsync<T>(IUnionPayRequest<T> request) where T : UnionPayResponse
         {
-            return PageExecuteAsync(request, null, "POST");
+            return PageExecuteAsync(request, null);
         }
 
         public Task<T> PageExecuteAsync<T>(IUnionPayRequest<T> request, string optionsName) where T : UnionPayResponse
-        {
-            return PageExecuteAsync(request, optionsName, "POST");
-        }
-
-        public Task<T> PageExecuteAsync<T>(IUnionPayRequest<T> request, string optionsName, string reqMethod) where T : UnionPayResponse
         {
             var options = string.IsNullOrEmpty(optionsName) ? OptionsSnapshotAccessor.Value : OptionsSnapshotAccessor.Get(optionsName);
             var version = string.IsNullOrEmpty(request.GetApiVersion()) ? options.Version : request.GetApiVersion();
@@ -146,13 +143,15 @@ namespace Essensoft.AspNetCore.Payment.UnionPay
 
             if (request.HasEncryptCertId())
             {
-                var accNo = txtParams[ACCNO];
-                if (!string.IsNullOrEmpty(accNo))
+                if (txtParams.TryGetValue(ACCNO, out var accNo))
                 {
-                    // 对敏感信息加密
-                    txtParams[ACCNO] = UnionPaySignature.EncryptData(accNo, options.EncryptCertificate.key);
+                    if (!string.IsNullOrEmpty(accNo))
+                    {
+                        // 对敏感信息加密
+                        txtParams[ACCNO] = UnionPaySignature.EncryptData(accNo, options.EncryptCertificate.key);
 
-                    txtParams.Add(ENCRYPTCERTID, options.EncryptCertificate.certId);
+                        txtParams.Add(ENCRYPTCERTID, options.EncryptCertificate.certId);
+                    }
                 }
             }
 
@@ -161,29 +160,9 @@ namespace Essensoft.AspNetCore.Payment.UnionPay
             var rsp = Activator.CreateInstance<T>();
 
             var url = request.GetRequestUrl(options.TestMode);
-            if (reqMethod.ToUpper() == "GET")
-            {
-                //拼接get请求的url
-                var tmpUrl = url;
-                if (txtParams != null && txtParams.Count > 0)
-                {
-                    if (tmpUrl.Contains("?"))
-                    {
-                        tmpUrl = tmpUrl + "&" + UnionPayUtility.BuildQuery(txtParams);
-                    }
-                    else
-                    {
-                        tmpUrl = tmpUrl + "?" + UnionPayUtility.BuildQuery(txtParams);
-                    }
-                }
-                rsp.Body = tmpUrl;
-            }
-            else
-            {
-                //输出post表单
-                rsp.Body = BuildHtmlRequest(url, txtParams, reqMethod);
-            }
 
+            //输出post表单
+            rsp.Body = BuildHtmlRequest(url, txtParams);
             return Task.FromResult(rsp);
         }
 
@@ -191,7 +170,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay
 
         #region Common Method
 
-        private string BuildHtmlRequest(string url, UnionPayDictionary dicPara, string strMethod)
+        private string BuildHtmlRequest(string url, UnionPayDictionary dicPara)
         {
             var sbHtml = new StringBuilder();
             sbHtml.Append("<form id='submit' name='submit' action='" + url + "' method='post' style='display:none;'>");

+ 6 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/UnionPayNullResponse.cs

@@ -0,0 +1,6 @@
+namespace Essensoft.AspNetCore.Payment.UnionPay
+{
+    public class UnionPayNullResponse : UnionPayResponse
+    {
+    }
+}

+ 1 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Utility/UnionPaySignature.cs

@@ -81,7 +81,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Utility
             return result;
         }
 
-        public static void SignByCertInfo(Dictionary<string, string> data, string certId, AsymmetricKeyParameter parameters)
+        public static void SignByCertInfo(Dictionary<string, string> data, string certId, ICipherParameters parameters)
         {
             if (!data.ContainsKey("signMethod"))
             {