1
0
Эх сурвалжийг харах

Merge branch 'master' into master

Roc 6 жил өмнө
parent
commit
7a352765df
100 өөрчлөгдсөн 4313 нэмэгдсэн , 487 устгасан
  1. 1 1
      README.MD
  2. 3 2
      samples/WebApplicationSample/Controllers/AlipayController.cs
  3. 4 3
      samples/WebApplicationSample/Controllers/JDPayController.cs
  4. 3 3
      samples/WebApplicationSample/Controllers/NotifyController.cs
  5. 9 8
      samples/WebApplicationSample/Controllers/UnionPayController.cs
  6. 2 2
      samples/WebApplicationSample/Models/UnionPayViewModel.cs
  7. 6 6
      samples/WebApplicationSample/Views/UnionPay/GatewayPayFrontConsume.cshtml
  8. 0 0
      samples/WebApplicationSample/Views/UnionPay/GatewayPayFrontConsumeReturn.cshtml
  9. 2 2
      samples/WebApplicationSample/Views/UnionPay/Index.cshtml
  10. 7 17
      src/Essensoft.AspNetCore.Payment.Alipay/AlipayClient.cs
  11. 4 4
      src/Essensoft.AspNetCore.Payment.Alipay/IAlipayClient.cs
  12. 6 6
      src/Essensoft.AspNetCore.Payment.Alipay/Utility/HttpClientExtensions.cs
  13. 2 2
      src/Essensoft.AspNetCore.Payment.JDPay/JDPayClient.cs
  14. 2 2
      src/Essensoft.AspNetCore.Payment.JDPay/JDPayOptions.cs
  15. 5 2
      src/Essensoft.AspNetCore.Payment.JDPay/Utility/HttpClientExtensions.cs
  16. 2 2
      src/Essensoft.AspNetCore.Payment.JDPay/Utility/JDPaySecurity.cs
  17. 1 1
      src/Essensoft.AspNetCore.Payment.LianLianPay/LianLianPayClient.cs
  18. 2 2
      src/Essensoft.AspNetCore.Payment.LianLianPay/LianLianPayOptions.cs
  19. 3 3
      src/Essensoft.AspNetCore.Payment.LianLianPay/Utility/HttpClientExtensions.cs
  20. 4 4
      src/Essensoft.AspNetCore.Payment.LianLianPay/Utility/LianLianPaySecurity.cs
  21. 26 26
      src/Essensoft.AspNetCore.Payment.QPay/QPayClient.cs
  22. 5 2
      src/Essensoft.AspNetCore.Payment.QPay/Utility/HttpClientExtensions.cs
  23. 2 2
      src/Essensoft.AspNetCore.Payment.Security/MD5WithRSA.cs
  24. 3 3
      src/Essensoft.AspNetCore.Payment.Security/RSAUtilities.cs
  25. 4 4
      src/Essensoft.AspNetCore.Payment.Security/RSA_ECB_OAEPWithSHA1AndMGF1Padding.cs
  26. 5 5
      src/Essensoft.AspNetCore.Payment.Security/RSA_ECB_PKCS1Padding.cs
  27. 4 4
      src/Essensoft.AspNetCore.Payment.Security/RSA_NONE_PKCS1Padding.cs
  28. 2 2
      src/Essensoft.AspNetCore.Payment.Security/SHA1WithRSA.cs
  29. 2 2
      src/Essensoft.AspNetCore.Payment.Security/SHA256WithRSA.cs
  30. 2 11
      src/Essensoft.AspNetCore.Payment.UnionPay/IUnionPayClient.cs
  31. 172 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayConsumeUndoNotifyResponse.cs
  32. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayFrontConsumeNotifyResponse.cs
  33. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayFrontConsumeReturnResponse.cs
  34. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayFrontPreauthNotifyResponse.cs
  35. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayPreauthFinishNotifyResponse.cs
  36. 172 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayPreauthFinishUndoNotifyResponse.cs
  37. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayPreauthUndoNotifyResponse.cs
  38. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayRefundNotifyResponse.cs
  39. 202 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayConsumeResponse.cs
  40. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayConsumeUndoNotifyResponse.cs
  41. 6 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayFrontOpenNotifyResponse.cs
  42. 6 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayFrontOpenReturnResponse.cs
  43. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayOpenAndConsumeNotifyResponse.cs
  44. 4 7
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthFinishNotifyResponse.cs
  45. 178 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthFinishUndoNotifyResponse.cs
  46. 5 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthNotifyResponse.cs
  47. 178 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthUndoNotifyResponse.cs
  48. 178 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayRefundNotifyResponse.cs
  49. 7 4
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayAppConsumeNotifyResponse.cs
  50. 6 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayApplyQrCodeNotifyResponse.cs
  51. 6 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayConsumeUndoNotifyResponse.cs
  52. 6 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayRefundNotifyResponse.cs
  53. 178 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayConsumeUndoNotifyResponse.cs
  54. 208 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayFrontConsumeNotifyResponse.cs
  55. 214 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayFrontPreauthNotifyResponse.cs
  56. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayPreauthFinishNotifyResponse.cs
  57. 178 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayPreauthFinishUndoNotifyResponse.cs
  58. 4 1
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayPreauthUndoNotifyResponse.cs
  59. 196 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayRefundNotifyResponse.cs
  60. 135 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayConsumeUndoRequest.cs
  61. 3 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayEncryptCertUpdateQueryRequest.cs
  62. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFileTransferRequest.cs
  63. 8 9
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFrontConsumeRequest.cs
  64. 23 23
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFrontPreauthRequest.cs
  65. 135 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayPreauthFinishRequest.cs
  66. 135 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayPreauthFinishUndoRequest.cs
  67. 14 14
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayPreauthUndoRequest.cs
  68. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayQueryRequest.cs
  69. 14 14
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayRefundRequest.cs
  70. 3 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayBackOpenRequest.cs
  71. 249 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayConsumeRequest.cs
  72. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayConsumeUndoRequest.cs
  73. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayDeleteTokenRequest.cs
  74. 141 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayEncryptCertUpdateQueryRequest.cs
  75. 3 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayFileTransferRequest.cs
  76. 14 25
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayFrontOpenRequest.cs
  77. 7 8
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayOpenAndConsumeRequest.cs
  78. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayOpenQueryRequest.cs
  79. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthFinishRequest.cs
  80. 4 4
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthFinishUndoRequest.cs
  81. 5 5
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthRequest.cs
  82. 5 5
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthUndoRequest.cs
  83. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayQueryRequest.cs
  84. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayRefundRequest.cs
  85. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPaySmsOpenRequest.cs
  86. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayUpdateTokenRequest.cs
  87. 17 17
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayAppConsumeRequest.cs
  88. 16 16
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayApplyQrCodeRequest.cs
  89. 14 14
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayConsumeUndoRequest.cs
  90. 3 3
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayFileTransferRequest.cs
  91. 12 12
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayQueryRequest.cs
  92. 12 12
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayRefundRequest.cs
  93. 2 2
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayReversalRequest.cs
  94. 0 105
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQueryMarketingBalanceRequest.cs
  95. 159 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayConsumeUndoRequest.cs
  96. 141 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayEncryptCertUpdateQueryRequest.cs
  97. 87 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayFileTransferRequest.cs
  98. 267 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayFrontConsumeRequest.cs
  99. 243 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayFrontPreauthRequest.cs
  100. 159 0
      src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayPreauthFinishRequest.cs

+ 1 - 1
README.MD

@@ -41,7 +41,7 @@ Essensoft.AspNetCore.Payment.Security       | [![NuGet](https://img.shields.io/n
 * 网银支付、银行卡支付、掌上银行支付、实时付款
 
 ### 银联支付
-* 在线网关支付、无跳转支付、二维码支付(商户)
+* 在线网关支付、无跳转支付、手机网页支付(WAP支付)、二维码支付(商户)
 
 ## 官方文档
 

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

@@ -1,3 +1,4 @@
+using System.Text;
 using System.Threading.Tasks;
 using Essensoft.AspNetCore.Payment.Alipay;
 using Essensoft.AspNetCore.Payment.Alipay.Domain;
@@ -165,7 +166,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);
         }
 
         /// <summary>
@@ -199,7 +200,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);
         }
 
         /// <summary>

+ 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 - 3
samples/WebApplicationSample/Controllers/NotifyController.cs

@@ -375,13 +375,13 @@ namespace WebApplicationSample.Controllers
         /// 网关支付 - 跳转网关页面支付通知
         /// </summary>
         /// <returns></returns>
-        [Route("frontconsume62")]
+        [Route("gatewaypayfrontconsume")]
         [HttpPost]
-        public async Task<IActionResult> FrontConsume62()
+        public async Task<IActionResult> GatewayPayFrontConsume()
         {
             try
             {
-                var notify = await _client.ExecuteAsync<UnionPayForm_6_2_FrontConsumeNotifyResponse>(Request);
+                var notify = await _client.ExecuteAsync<UnionPayGatewayPayFrontConsumeNotifyResponse>(Request);
                 Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
                 return UnionPayNotifyResult.Ok;
             }

+ 9 - 8
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;
@@ -24,15 +25,15 @@ namespace WebApplicationSample.Controllers
         }
 
         [HttpGet]
-        public IActionResult FrontConsume62()
+        public IActionResult GatewayPayFrontConsume()
         {
             return View();
         }
 
         [HttpPost]
-        public async Task<IActionResult> FrontConsume62(UnionPayForm_6_2_FrontConsumeViewModel viewModel)
+        public async Task<IActionResult> GatewayPayFrontConsume(GatewayPayFrontConsumeFrontConsumeViewModel viewModel)
         {
-            var request = new UnionPayForm_6_2_FrontConsumeRequest
+            var request = new UnionPayGatewayPayFrontConsumeRequest
             {
                 TxnType = "01",
                 TxnSubType = "01",
@@ -42,20 +43,20 @@ namespace WebApplicationSample.Controllers
                 TxnTime = viewModel.TxnTime,
                 TxnAmt = viewModel.TxnAmt,
                 CurrencyCode = viewModel.CurrencyCode,
-                PayTimeout = viewModel.PayTimeout,
+                PayTimeOut = viewModel.PayTimeOut,
                 FrontUrl = viewModel.FrontUrl,
                 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]
-        public async Task<IActionResult> FrontConsume62Return()
+        public async Task<IActionResult> GatewayPayFrontConsumeReturn()
         {
             try
             {
-                var notify = await _notifyClient.ExecuteAsync<UnionPayForm_6_2_FrontConsumeReturnResponse>(Request);
+                var notify = await _notifyClient.ExecuteAsync<UnionPayGatewayPayFrontConsumeReturnResponse>(Request);
                 ViewData["response"] = "支付成功";
                 return View();
             }

+ 2 - 2
samples/WebApplicationSample/Models/UnionPayViewModel.cs

@@ -2,7 +2,7 @@
 
 namespace WebApplicationSample.Models
 {
-    public class UnionPayForm_6_2_FrontConsumeViewModel
+    public class GatewayPayFrontConsumeFrontConsumeViewModel
     {
         [Required]
         [Display(Name = "orderId")]
@@ -21,7 +21,7 @@ namespace WebApplicationSample.Models
         public string CurrencyCode { get; set; }
 
         [Display(Name = "payTimeout")]
-        public string PayTimeout { get; set; }
+        public string PayTimeOut { get; set; }
 
         [Display(Name = "frontUrl")]
         public string FrontUrl { get; set; }

+ 6 - 6
samples/WebApplicationSample/Views/UnionPay/FrontConsume62.cshtml → samples/WebApplicationSample/Views/UnionPay/GatewayPayFrontConsume.cshtml

@@ -1,4 +1,4 @@
-@model UnionPayForm_6_2_FrontConsumeViewModel
+@model GatewayPayFrontConsumeFrontConsumeViewModel
 @{
     ViewData["Title"] = "跳转网关页面支付通知";
 }
@@ -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>
@@ -30,16 +30,16 @@
                 <input type="text" class="form-control" asp-for="CurrencyCode" value="156" />
             </div>
             <div class="form-group">
-                <label asp-for="PayTimeout"></label>
-                <input type="text" class="form-control" asp-for="PayTimeout" value="@DateTime.Now.AddDays(7).ToString("yyyyMMddHHmmss")" />
+                <label asp-for="PayTimeOut"></label>
+                <input type="text" class="form-control" asp-for="PayTimeOut" value="@DateTime.Now.AddDays(7).ToString("yyyyMMddHHmmss")" />
             </div>
             <div class="form-group">
                 <label asp-for="FrontUrl"></label>
-                <input type="text" class="form-control" asp-for="FrontUrl" value="http://*/unionpay/frontconsume62return" />
+                <input type="text" class="form-control" asp-for="FrontUrl" value="http://*/unionpay/gatewaypayfrontconsumereturn" />
             </div>
             <div class="form-group">
                 <label asp-for="BackUrl"></label>
-                <input type="text" class="form-control" asp-for="BackUrl" value="http://*/notify/unionpay/frontconsume62" />
+                <input type="text" class="form-control" asp-for="BackUrl" value="http://*/notify/unionpay/gatewaypayfrontconsume" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 0 - 0
samples/WebApplicationSample/Views/UnionPay/FrontConsume62Return.cshtml → samples/WebApplicationSample/Views/UnionPay/GatewayPayFrontConsumeReturn.cshtml


+ 2 - 2
samples/WebApplicationSample/Views/UnionPay/Index.cshtml

@@ -21,8 +21,8 @@
         <tr>
             <th scope="row">1</th>
             <td>网关支付-跳转网关页面支付</td>
-            <td><a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=63" target="_blank">Form_6_2_FrontConsume</a></td>
-            <td><a asp-controller="UnionPay" asp-action="FrontConsume62">立即测试</a></td>
+            <td><a href="https://open.unionpay.com/tjweb/acproduct/APIList?acpAPIId=275&&apiservId=448&&version=V2.2" target="_blank">消费接口</a></td>
+            <td><a asp-controller="UnionPay" asp-action="GatewayPayFrontConsume">立即测试</a></td>
         </tr>
     </tbody>
 </table>

+ 7 - 17
src/Essensoft.AspNetCore.Payment.Alipay/AlipayClient.cs

@@ -82,9 +82,9 @@ namespace Essensoft.AspNetCore.Payment.Alipay
             return await PageExecuteAsync(request, null, "POST");
         }
 
-        public async Task<T> PageExecuteAsync<T>(string optionsName, IAlipayRequest<T> request) where T : AlipayResponse
+        public async Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string optionsName) where T : AlipayResponse
         {
-            return await PageExecuteAsync(optionsName, request, null, "POST");
+            return await PageExecuteAsync(request, null, "POST");
         }
 
         #endregion
@@ -93,10 +93,10 @@ namespace Essensoft.AspNetCore.Payment.Alipay
 
         public async Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string accessToken, string reqMethod) where T : AlipayResponse
         {
-            return await PageExecuteAsync(null, request, accessToken, reqMethod);
+            return await PageExecuteAsync(request, null, accessToken, reqMethod);
         }
 
-        public async Task<T> PageExecuteAsync<T>(string optionsName, IAlipayRequest<T> request, string accessToken, string reqMethod) where T : AlipayResponse
+        public async Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string optionsName, string accessToken, string reqMethod) where T : AlipayResponse
         {
             var options = string.IsNullOrEmpty(optionsName) ? OptionsSnapshotAccessor.Value : OptionsSnapshotAccessor.Get(optionsName);
             var apiVersion = string.IsNullOrEmpty(request.GetApiVersion()) ? options.Version : request.GetApiVersion();
@@ -131,7 +131,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay
 
                 using (var client = ClientFactory.CreateClient())
                 {
-                    body = await HttpClientUtility.DoPostAsync(client, options.ServerUrl, txtParams, fileParams);
+                    body = await client.DoPostAsync(options.ServerUrl, txtParams, fileParams);
                 }
             }
             else
@@ -251,11 +251,11 @@ namespace Essensoft.AspNetCore.Payment.Alipay
                 {
                     var fileParams = AlipayUtility.CleanupDictionary(uRequest.GetFileParameters());
 
-                    body = await HttpClientUtility.DoPostAsync(client, options.ServerUrl, txtParams, fileParams);
+                    body = await client.DoPostAsync(options.ServerUrl, txtParams, fileParams);
                 }
                 else
                 {
-                    body = await HttpClientUtility.DoPostAsync(client, options.ServerUrl, query);
+                    body = await client.DoPostAsync(options.ServerUrl, query);
                 }
             }
 
@@ -456,16 +456,6 @@ namespace Essensoft.AspNetCore.Payment.Alipay
             return bizModel == null ? string.Empty : JsonConvert.SerializeObject(bizModel, jsonSerializerSettings);
         }
 
-        public Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string optionsName) where T : AlipayResponse
-        {
-            throw new NotImplementedException();
-        }
-
-        public Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string optionsName, string session, string reqMethod) where T : AlipayResponse
-        {
-            throw new NotImplementedException();
-        }
-
         #endregion
     }
 }

+ 4 - 4
src/Essensoft.AspNetCore.Payment.Alipay/IAlipayClient.cs

@@ -25,7 +25,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay
         Task<T> ExecuteAsync<T>(IAlipayRequest<T> request, string optionsName) where T : AlipayResponse;
 
         /// <summary>
-        /// 执行Alipay隐私API请求。
+        /// 执行Alipay公开API请求。
         /// </summary>
         /// <typeparam name="T">领域对象</typeparam>
         /// <param name="request">具体的Alipay API请求</param>
@@ -35,7 +35,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay
         Task<T> ExecuteAsync<T>(IAlipayRequest<T> request, string session, string appAuthToken) where T : AlipayResponse;
 
         /// <summary>
-        /// 执行Alipay隐私API请求。
+        /// 执行Alipay公开API请求。
         /// </summary>
         /// <typeparam name="T">领域对象</typeparam>
         /// <param name="request">具体的Alipay API请求</param>
@@ -63,7 +63,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay
         Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string optionsName) where T : AlipayResponse;
 
         /// <summary>
-        /// 执行Alipay隐私API请求。
+        /// 执行Alipay公开API请求。
         /// </summary>
         /// <typeparam name="T">领域对象</typeparam>
         /// <param name="request">具体的Alipay API请求</param>
@@ -72,7 +72,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay
         Task<T> PageExecuteAsync<T>(IAlipayRequest<T> request, string session, string reqMethod) where T : AlipayResponse;
 
         /// <summary>
-        /// 执行Alipay隐私API请求。
+        /// 执行Alipay公开API请求。
         /// </summary>
         /// <typeparam name="T">领域对象</typeparam>
         /// <param name="request">具体的Alipay API请求</param>

+ 6 - 6
src/Essensoft.AspNetCore.Payment.Alipay/Utility/HttpClientUtility.cs → src/Essensoft.AspNetCore.Payment.Alipay/Utility/HttpClientExtensions.cs

@@ -8,9 +8,9 @@ using System.Threading.Tasks;
 namespace Essensoft.AspNetCore.Payment.Alipay.Utility
 {
     /// <summary>
-    /// 网络工具类
+    /// HTTP客户端扩展
     /// </summary>
-    public static class HttpClientUtility
+    public static class HttpClientExtensions
     {
         /// <summary>
         /// 执行HTTP POST请求。
@@ -18,7 +18,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay.Utility
         /// <param name="url">请求地址</param>
         /// <param name="parameters">请求参数</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoPostAsync(HttpClient client, string url, IDictionary<string, string> parameters)
+        public static async Task<string> DoPostAsync(this HttpClient client, string url, IDictionary<string, string> parameters)
         {
             using (var requestContent = new StringContent(AlipayUtility.BuildQuery(parameters), Encoding.UTF8, "application/x-www-form-urlencoded"))
             using (var response = await client.PostAsync(url, requestContent))
@@ -34,7 +34,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay.Utility
         /// <param name="url">请求地址</param>
         /// <param name="content">请求内容</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoPostAsync(HttpClient client, string url, string content)
+        public static async Task<string> DoPostAsync(this HttpClient client, string url, string content)
         {
             using (var requestContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded"))
             using (var response = await client.PostAsync(url, requestContent))
@@ -50,7 +50,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay.Utility
         /// <param name="url">请求地址</param>
         /// <param name="parameters">请求参数</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoGetAsync(HttpClient client, string url, IDictionary<string, string> parameters)
+        public static async Task<string> DoGetAsync(this HttpClient client, string url, IDictionary<string, string> parameters)
         {
             if (parameters?.Count > 0)
             {
@@ -78,7 +78,7 @@ namespace Essensoft.AspNetCore.Payment.Alipay.Utility
         /// <param name="textParams">请求文本参数</param>
         /// <param name="fileParams">请求文件参数</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoPostAsync(HttpClient client, string url, IDictionary<string, string> textParams, IDictionary<string, FileItem> fileParams)
+        public static async Task<string> DoPostAsync(this HttpClient client, string url, IDictionary<string, string> textParams, IDictionary<string, FileItem> fileParams)
         {
             // 如果没有文件参数,则走普通POST请求
             if (fileParams == null || fileParams.Count == 0)

+ 2 - 2
src/Essensoft.AspNetCore.Payment.JDPay/JDPayClient.cs

@@ -54,7 +54,7 @@ namespace Essensoft.AspNetCore.Payment.JDPay
 
             using (var client = ClientFactory.CreateClient())
             {
-                var body = await HttpClientUtility.DoPostAsync(client, request.GetRequestUrl(), content);
+                var body = await client.DoPostAsync(request.GetRequestUrl(), content);
                 Logger.Log(options.LogLevel, "Response:{content}", body);
 
                 var parser = new JDPayXmlParser<T>();
@@ -151,7 +151,7 @@ namespace Essensoft.AspNetCore.Payment.JDPay
 
             using (var client = ClientFactory.CreateClient())
             {
-                var body = await HttpClientUtility.DoPostAsync(client, request.GetRequestUrl(), content, "application/x-www-form-urlencoded");
+                var body = await client.DoPostAsync(request.GetRequestUrl(), content, "application/x-www-form-urlencoded");
                 Logger.Log(options.LogLevel, "Response:{content}", body);
 
                 var rsp = JsonConvert.DeserializeObject<T>(body);

+ 2 - 2
src/Essensoft.AspNetCore.Payment.JDPay/JDPayOptions.cs

@@ -8,8 +8,8 @@ namespace Essensoft.AspNetCore.Payment.JDPay
     public class JDPayOptions
     {
         internal byte[] DesKeyBase64;
-        internal AsymmetricKeyParameter PrivateKey;
-        internal AsymmetricKeyParameter PublicKey;
+        internal ICipherParameters PrivateKey;
+        internal ICipherParameters PublicKey;
 
         private string desKey;
         private string rsaPrivateKey;

+ 5 - 2
src/Essensoft.AspNetCore.Payment.JDPay/Utility/HttpClientUtility.cs → src/Essensoft.AspNetCore.Payment.JDPay/Utility/HttpClientExtensions.cs

@@ -4,7 +4,10 @@ using System.Threading.Tasks;
 
 namespace Essensoft.AspNetCore.Payment.JDPay.Utility
 {
-    public static class HttpClientUtility
+    /// <summary>
+    /// HTTP客户端扩展。
+    /// </summary>
+    public static class HttpClientExtensions
     {
         /// <summary>
         /// 执行HTTP POST请求。
@@ -12,7 +15,7 @@ namespace Essensoft.AspNetCore.Payment.JDPay.Utility
         /// <param name="url">请求地址</param>
         /// <param name="content">请求内容</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoPostAsync(HttpClient client, string url, string content, string mediaType = "application/xml")
+        public static async Task<string> DoPostAsync(this HttpClient client, string url, string content, string mediaType = "application/xml")
         {
             using (var requestContent = new StringContent(content, Encoding.UTF8, mediaType))
             using (var response = await client.PostAsync(url, requestContent))

+ 2 - 2
src/Essensoft.AspNetCore.Payment.JDPay/Utility/JDPaySecurity.cs

@@ -106,14 +106,14 @@ namespace Essensoft.AspNetCore.Payment.JDPay.Utility
             return sb.Remove(sb.Length - 1, 1).ToString();
         }
 
-        public static string RSASign(string sourceSignString, AsymmetricKeyParameter privateKey)
+        public static string RSASign(string sourceSignString, ICipherParameters privateKey)
         {
             var sha256SourceSignString = SHA256.Compute(sourceSignString);
             var newsks = RSA_ECB_PKCS1Padding.Encrypt(Encoding.UTF8.GetBytes(sha256SourceSignString), privateKey);
             return Convert.ToBase64String(newsks, Base64FormattingOptions.InsertLineBreaks);
         }
 
-        public static bool RSACheckContent(string content, string sign, AsymmetricKeyParameter publicKey)
+        public static bool RSACheckContent(string content, string sign, ICipherParameters publicKey)
         {
             var sha256SourceSignString = SHA256.Compute(content);
             var decryptArr = RSA_ECB_PKCS1Padding.Decrypt(Convert.FromBase64String(sign), publicKey);

+ 1 - 1
src/Essensoft.AspNetCore.Payment.LianLianPay/LianLianPayClient.cs

@@ -83,7 +83,7 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay
 
             using (var client = ClientFactory.CreateClient())
             {
-                var body = await HttpClientUtility.DoPostAsync(client, request.GetRequestUrl(), content);
+                var body = await client.DoPostAsync(request.GetRequestUrl(), content);
                 Logger.Log(options.LogLevel, "Response:{body}", body);
 
                 var parser = new LianLianPayJsonParser<T>();

+ 2 - 2
src/Essensoft.AspNetCore.Payment.LianLianPay/LianLianPayOptions.cs

@@ -6,8 +6,8 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay
 {
     public class LianLianPayOptions
     {
-        internal AsymmetricKeyParameter PrivateKey;
-        internal AsymmetricKeyParameter PublicKey;
+        internal ICipherParameters PrivateKey;
+        internal ICipherParameters PublicKey;
 
         private string rsaPrivateKey;
         private string rsaPublicKey;

+ 3 - 3
src/Essensoft.AspNetCore.Payment.LianLianPay/Utility/HttpClientUtility.cs → src/Essensoft.AspNetCore.Payment.LianLianPay/Utility/HttpClientExtensions.cs

@@ -5,9 +5,9 @@ using System.Threading.Tasks;
 namespace Essensoft.AspNetCore.Payment.LianLianPay.Utility
 {
     /// <summary>
-    /// 网络工具类
+    /// HTTP客户端扩展
     /// </summary>
-    public static class HttpClientUtility
+    public static class HttpClientExtensions
     {
         /// <summary>
         /// 执行HTTP POST请求。
@@ -15,7 +15,7 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay.Utility
         /// <param name="url">请求地址</param>
         /// <param name="content">请求内容</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoPostAsync(HttpClient client, string url, string content)
+        public static async Task<string> DoPostAsync(this HttpClient client, string url, string content)
         {
             using (var requestContent = new StringContent(content, Encoding.UTF8, "application/json"))
             using (var response = await client.PostAsync(url, requestContent))

+ 4 - 4
src/Essensoft.AspNetCore.Payment.LianLianPay/Utility/LianLianPaySecurity.cs

@@ -32,7 +32,7 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay.Utility
             return sb.Remove(sb.Length - 1, 1).ToString();
         }
 
-        public static string Encrypt(string plaintext, AsymmetricKeyParameter public_key)
+        public static string Encrypt(string plaintext, ICipherParameters public_key)
         {
             var hmack_key = Guid.NewGuid().ToString("N");
             var version = "lianpay1_0_1";
@@ -41,7 +41,7 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay.Utility
             return LianlianpayEncrypt(plaintext, public_key, hmack_key, version, aes_key, nonce);
         }
 
-        public static string Decrypt(string ciphertext, AsymmetricKeyParameter private_key)
+        public static string Decrypt(string ciphertext, ICipherParameters private_key)
         {
             if (!string.IsNullOrEmpty(ciphertext))
             {
@@ -55,7 +55,7 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay.Utility
             return string.Empty;
         }
 
-        private static string LianlianpayEncrypt(string req, AsymmetricKeyParameter public_key, string hmack_key, string version, string aes_key, string nonce)
+        private static string LianlianpayEncrypt(string req, ICipherParameters public_key, string hmack_key, string version, string aes_key, string nonce)
         {
             var b64Hmack_key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(hmack_key, public_key);
             var b64Aes_key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(aes_key, public_key);
@@ -68,7 +68,7 @@ namespace Essensoft.AspNetCore.Payment.LianLianPay.Utility
             return version + "$" + b64Hmack_key + "$" + b64Aes_key + "$" + b64Nonce + "$" + encry + "$" + b64Sign;
         }
 
-        private static string LianlianpayDecrypt(string base64_ciphertext, string base64_encrypted_aes_key, string base64_nonce, AsymmetricKeyParameter trader_pri_key)
+        private static string LianlianpayDecrypt(string base64_ciphertext, string base64_encrypted_aes_key, string base64_nonce, ICipherParameters trader_pri_key)
         {
             var key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Decrypt(base64_encrypted_aes_key, trader_pri_key);
             var nonce = Convert.FromBase64String(base64_nonce);

+ 26 - 26
src/Essensoft.AspNetCore.Payment.QPay/QPayClient.cs

@@ -35,30 +35,6 @@ namespace Essensoft.AspNetCore.Payment.QPay
 
         public IOptionsSnapshot<QPayOptions> OptionsSnapshotAccessor { get; set; }
 
-        #region Common Method
-
-        private void CheckResponseSign(QPayResponse response, QPayOptions options)
-        {
-            if (string.IsNullOrEmpty(response.Body) || response?.Parameters == null)
-            {
-                throw new Exception("sign check fail: Body is Empty!");
-            }
-
-            if (response.Parameters.TryGetValue("sign", out var sign))
-            {
-                if (response.Parameters["return_code"] == "SUCCESS" && !string.IsNullOrEmpty(sign))
-                {
-                    var cal_sign = QPaySignature.SignWithKey(response.Parameters, options.Key);
-                    if (cal_sign != sign)
-                    {
-                        throw new Exception("sign check fail: check Sign and Data Fail!");
-                    }
-                }
-            }
-        }
-
-        #endregion
-
         #region IQPayClient Members
 
         public async Task<T> ExecuteAsync<T>(IQPayRequest<T> request) where T : QPayResponse
@@ -88,7 +64,7 @@ namespace Essensoft.AspNetCore.Payment.QPay
 
             using (var client = ClientFactory.CreateClient())
             {
-                var body = await HttpClientUtility.DoPostAsync(client, request.GetRequestUrl(), content);
+                var body = await client.DoPostAsync(request.GetRequestUrl(), content);
                 Logger.Log(options.LogLevel, "Response:{body}", body);
 
                 var parser = new QPayXmlParser<T>();
@@ -127,7 +103,7 @@ namespace Essensoft.AspNetCore.Payment.QPay
             Logger.Log(options.LogLevel, "Request:{content}", content);
             using (var client = string.IsNullOrEmpty(certificateName) ? ClientFactory.CreateClient() : ClientFactory.CreateClient(certificateName))
             {
-                var body = await HttpClientUtility.DoPostAsync(client, request.GetRequestUrl(), content);
+                var body = await client.DoPostAsync(request.GetRequestUrl(), content);
                 Logger.Log(options.LogLevel, "Response:{body}", body);
 
                 var parser = new QPayXmlParser<T>();
@@ -138,5 +114,29 @@ namespace Essensoft.AspNetCore.Payment.QPay
         }
 
         #endregion
+
+        #region Common Method
+
+        private void CheckResponseSign(QPayResponse response, QPayOptions options)
+        {
+            if (string.IsNullOrEmpty(response.Body) || response?.Parameters == null)
+            {
+                throw new Exception("sign check fail: Body is Empty!");
+            }
+
+            if (response.Parameters.TryGetValue("sign", out var sign))
+            {
+                if (response.Parameters["return_code"] == "SUCCESS" && !string.IsNullOrEmpty(sign))
+                {
+                    var cal_sign = QPaySignature.SignWithKey(response.Parameters, options.Key);
+                    if (cal_sign != sign)
+                    {
+                        throw new Exception("sign check fail: check Sign and Data Fail!");
+                    }
+                }
+            }
+        }
+
+        #endregion
     }
 }

+ 5 - 2
src/Essensoft.AspNetCore.Payment.QPay/Utility/HttpClientUtility.cs → src/Essensoft.AspNetCore.Payment.QPay/Utility/HttpClientExtensions.cs

@@ -4,7 +4,10 @@ using System.Threading.Tasks;
 
 namespace Essensoft.AspNetCore.Payment.QPay.Utility
 {
-    public static class HttpClientUtility
+    /// <summary>
+    /// HTTP客户端扩展。
+    /// </summary>
+    public static class HttpClientExtensions
     {
         /// <summary>
         /// 执行HTTP POST请求。
@@ -12,7 +15,7 @@ namespace Essensoft.AspNetCore.Payment.QPay.Utility
         /// <param name="url">请求地址</param>
         /// <param name="content">请求参数</param>
         /// <returns>HTTP响应</returns>
-        public static async Task<string> DoPostAsync(HttpClient client, string url, string content)
+        public static async Task<string> DoPostAsync(this HttpClient client, string url, string content)
         {
             using (var requestContent = new StringContent(content, Encoding.UTF8, "application/xml"))
             using (var response = await client.PostAsync(url, requestContent))

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

@@ -7,7 +7,7 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class MD5WithRSA
     {
-        public static string SignData(string data, AsymmetricKeyParameter key)
+        public static string SignData(string data, ICipherParameters key)
         {
             var signer = SignerUtilities.GetSigner("MD5WithRSA");
             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("MD5WithRSA");
             verifier.Init(false, key);

+ 3 - 3
src/Essensoft.AspNetCore.Payment.Security/RSAUtilities.cs

@@ -11,13 +11,13 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class RSAUtilities
     {
-        public static AsymmetricKeyParameter GetKeyParameterFormPrivateKey(string privateKey)
+        public static ICipherParameters GetKeyParameterFormPrivateKey(string privateKey)
         {
             var keyStructure = RsaPrivateKeyStructure.GetInstance(Convert.FromBase64String(privateKey));
             return new RsaPrivateCrtKeyParameters(keyStructure.Modulus, keyStructure.PublicExponent, keyStructure.PrivateExponent, keyStructure.Prime1, keyStructure.Prime2, keyStructure.Exponent1, keyStructure.Exponent2, keyStructure.Coefficient);
         }
 
-        public static AsymmetricKeyParameter GetKeyParameterFormPublicKey(string publicKey)
+        public static ICipherParameters GetKeyParameterFormPublicKey(string publicKey)
         {
             return PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
         }
@@ -48,7 +48,7 @@ namespace Essensoft.AspNetCore.Payment.Security
             };
         }
 
-        public static AsymmetricKeyParameter GetPublicKeyParameterFormAsn1PublicKey(string publicKey)
+        public static ICipherParameters GetPublicKeyParameterFormAsn1PublicKey(string publicKey)
         {
             var keyStructure = RsaPublicKeyStructure.GetInstance(Asn1Object.FromByteArray(Convert.FromBase64String(publicKey)));
             return new RsaKeyParameters(false, keyStructure.Modulus, keyStructure.PublicExponent);

+ 4 - 4
src/Essensoft.AspNetCore.Payment.Security/RSA_ECB_OAEPWithSHA1AndMGF1Padding.cs

@@ -7,28 +7,28 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class RSA_ECB_OAEPWithSHA1AndMGF1Padding
     {
-        public static byte[] Encrypt(byte[] data, AsymmetricKeyParameter key)
+        public static byte[] Encrypt(byte[] data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
             cipher.Init(true, key);
             return cipher.DoFinal(data);
         }
 
-        public static byte[] Decrypt(byte[] data, AsymmetricKeyParameter key)
+        public static byte[] Decrypt(byte[] data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
             cipher.Init(false, key);
             return cipher.DoFinal(data);
         }
 
-        public static string Encrypt(string data, AsymmetricKeyParameter key)
+        public static string Encrypt(string data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
             cipher.Init(true, key);
             return Convert.ToBase64String(cipher.DoFinal(Encoding.UTF8.GetBytes(data)));
         }
 
-        public static string Decrypt(string data, AsymmetricKeyParameter key)
+        public static string Decrypt(string data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
             cipher.Init(false, key);

+ 5 - 5
src/Essensoft.AspNetCore.Payment.Security/RSA_ECB_PKCS1Padding.cs

@@ -7,28 +7,28 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class RSA_ECB_PKCS1Padding
     {
-        public static byte[] Encrypt(byte[] data, AsymmetricKeyParameter parameters)
+        public static byte[] Encrypt(byte[] data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
-            cipher.Init(true, parameters);
+            cipher.Init(true, key);
             return cipher.DoFinal(data);
         }
 
-        public static byte[] Decrypt(byte[] data, AsymmetricKeyParameter key)
+        public static byte[] Decrypt(byte[] data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
             cipher.Init(false, key);
             return cipher.DoFinal(data);
         }
 
-        public static string Encrypt(string data, AsymmetricKeyParameter key)
+        public static string Encrypt(string data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
             cipher.Init(true, key);
             return Convert.ToBase64String(cipher.DoFinal(Encoding.UTF8.GetBytes(data)));
         }
 
-        public static string Decrypt(string data, AsymmetricKeyParameter key)
+        public static string Decrypt(string data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
             cipher.Init(false, key);

+ 4 - 4
src/Essensoft.AspNetCore.Payment.Security/RSA_NONE_PKCS1Padding.cs

@@ -7,28 +7,28 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class RSA_NONE_PKCS1Padding
     {
-        public static byte[] Encrypt(byte[] data, AsymmetricKeyParameter key)
+        public static byte[] Encrypt(byte[] data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/NONE/PKCS1Padding");
             cipher.Init(true, key);
             return cipher.DoFinal(data);
         }
 
-        public static byte[] Decrypt(byte[] data, AsymmetricKeyParameter key)
+        public static byte[] Decrypt(byte[] data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/NONE/PKCS1Padding");
             cipher.Init(false, key);
             return cipher.DoFinal(data);
         }
 
-        public static string Encrypt(string data, AsymmetricKeyParameter key)
+        public static string Encrypt(string data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/NONE/PKCS1Padding");
             cipher.Init(true, key);
             return Convert.ToBase64String(cipher.DoFinal(Encoding.UTF8.GetBytes(data)));
         }
 
-        public static string Decrypt(string data, AsymmetricKeyParameter key)
+        public static string Decrypt(string data, ICipherParameters key)
         {
             var cipher = CipherUtilities.GetCipher("RSA/NONE/PKCS1Padding");
             cipher.Init(false, key);

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

@@ -7,7 +7,7 @@ namespace Essensoft.AspNetCore.Payment.Security
 {
     public class SHA1WithRSA
     {
-        public static string SignData(string data, AsymmetricKeyParameter key)
+        public static string SignData(string data, ICipherParameters key)
         {
             var signer = SignerUtilities.GetSigner("SHA1WithRSA");
             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("SHA1WithRSA");
             verifier.Init(false, key);

+ 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;
     }
 }

+ 172 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayConsumeUndoNotifyResponse.cs

@@ -0,0 +1,172 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 网关支付(V2.2) 消费撤销接口 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayConsumeUndoNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_7_1_AuthDeal_FrontNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayFrontConsumeNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_7_1_AuthDeal_FrontNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 网关支付(V2.2) 消费接口 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayFrontConsumeNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_2_FrontConsumeReturnResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayFrontConsumeReturnResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_2_FrontConsumeReturnResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 网关支付(V2.2) 消费接口 - 前台通知
+    /// </summary>
+    public class UnionPayGatewayPayFrontConsumeReturnResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_2_FrontConsumeNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayFrontPreauthNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_2_FrontConsumeNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 网关支付(V2.2) 预授权接口 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayFrontPreauthNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_3_ConsumeUndoNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayPreauthFinishNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_3_ConsumeUndoNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 网关支付(V2.2) 预授权完成 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayPreauthFinishNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 172 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayPreauthFinishUndoNotifyResponse.cs

@@ -0,0 +1,172 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 网关支付(V2.2) 预授权完成撤销 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayPreauthFinishUndoNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_7_3_AuthFinishNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayPreauthUndoNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_7_3_AuthFinishNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 网关支付(V2.2) 预授权撤销 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayPreauthUndoNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_4_RefundNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayGatewayPayRefundNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_4_RefundNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 网关支付(V2.2) 退货接口 - 后台通知
+    /// </summary>
+    public class UnionPayGatewayPayRefundNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 202 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayConsumeResponse.cs

@@ -0,0 +1,202 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Response
+{
+    /// <summary>
+    /// 无跳转支付(V2.2) 消费接口 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayConsumeNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        [JsonProperty("accNo")]
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        [JsonProperty("payType")]
+        public string PayType { get; set; }
+
+        /// <summary>
+        /// 支付卡标识
+        /// </summary>
+        [JsonProperty("payCardNo")]
+        public string PayCardNo { get; set; }
+
+        /// <summary>
+        /// 支付卡类型
+        /// </summary>
+        [JsonProperty("payCardType")]
+        public string PayCardType { get; set; }
+
+        /// <summary>
+        /// 支付卡名称
+        /// </summary>
+        [JsonProperty("payCardIssueName")]
+        public string PayCardIssueName { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm03_6_4_RefundNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayConsumeUndoNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm03_6_4_RefundNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 无跳转支付(V2.2) 消费撤销接口 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayConsumeUndoNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 6 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm03_6_2_Token_OpenCard_FrontNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayFrontOpenNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm03_6_2_Token_OpenCard_FrontNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 无跳转支付(V2.2) 银联全渠道支付开通交易 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayFrontOpenNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 开通状态	
@@ -55,8 +58,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         /// <summary>
         /// 发卡机构代码	
         /// </summary>
-        [JsonProperty("issInsNo")]
-        public string IssInsNo { get; set; }
+        [JsonProperty("issInsCode")]
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 签名公钥证书	

+ 6 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm03_6_2_Token_OpenCard_FrontReturnResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayFrontOpenReturnResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm03_6_2_Token_OpenCard_FrontReturnResponse : UnionPayResponse
+    /// <summary>
+    /// 无跳转支付(V2.2) 银联全渠道支付开通交易 - 前台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayFrontOpenReturnResponse : UnionPayResponse
     {
         /// <summary>
         /// 开通状态	
@@ -49,8 +52,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         /// <summary>
         /// 发卡机构代码	
         /// </summary>
-        [JsonProperty("issInsNo")]
-        public string IssInsNo { get; set; }
+        [JsonProperty("issInsCode")]
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 签名公钥证书	

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm03_6_7_Token_OpenAndConsumeNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayOpenAndConsumeNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm03_6_7_Token_OpenAndConsumeNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 无跳转支付(V2.2) 银联全渠道开通并支付交易 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayOpenAndConsumeNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 4 - 7
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm03_6_3_ConsumeUndoNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthFinishNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm03_6_3_ConsumeUndoNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 无跳转支付(V2.2) 预授权完成 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayPreauthFinishNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号
@@ -94,12 +97,6 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         [JsonProperty("acqInsCode")]
         public string AcqInsCode { get; set; }
 
-        /// <summary>
-        /// 账号
-        /// </summary>
-        [JsonProperty("accNo")]
-        public string AccNo { get; set; }
-
         /// <summary>
         /// 版本号
         /// </summary>

+ 178 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthFinishUndoNotifyResponse.cs

@@ -0,0 +1,178 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 无跳转支付(V2.2) 预授权完成撤销 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayPreauthFinishUndoNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 5 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_7_1_AuthDeal_BackNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_7_1_AuthDeal_BackNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 无跳转支付(V2.2) 预授权接口 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayPreauthNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号
@@ -95,7 +98,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         public string AcqInsCode { get; set; }
 
         /// <summary>
-        /// 有卡交易信息域	
+        /// 有卡交易信息域
         /// </summary>
         [JsonProperty("cardTransData")]
         public string CardTransData { get; set; }

+ 178 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayPreauthUndoNotifyResponse.cs

@@ -0,0 +1,178 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 无跳转支付(V2.2) 预授权撤销 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayPreauthUndoNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 178 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayNoRedirectPayRefundNotifyResponse.cs

@@ -0,0 +1,178 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 无跳转支付(V2.2) 退货接口 - 后台通知
+    /// </summary>
+    public class UnionPayNoRedirectPayRefundNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        [JsonProperty("accNo")]
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 7 - 4
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm05_6_2_AppConsumeNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayAppConsumeNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm05_6_2_AppConsumeNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 二维码支付(V2.2) 二维码消费(被扫)- 后台通知
+    /// </summary>
+    public class UnionPayQrCodePayAppConsumeNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// C2B码
@@ -61,8 +64,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        [JsonProperty("issInsNo")]
-        public string IssInsNo { get; set; }
+        [JsonProperty("issInsCode")]
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 接入机构代码
@@ -77,7 +80,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         public string SignPubKeyCert { get; set; }
 
         /// <summary>
-        /// 成功时出现
+        /// 清算币种
         /// </summary>
         [JsonProperty("settleCurrencyCode")]
         public string SettleCurrencyCode { get; set; }

+ 6 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm05_6_1_ApplyQrCodeNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayApplyQrCodeNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm05_6_1_ApplyQrCodeNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 二维码支付(V2.2) 申请二维码(主扫)- 后台通知
+    /// </summary>
+    public class UnionPayQrCodePayApplyQrCodeNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号
@@ -55,8 +58,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        [JsonProperty("issInsNo")]
-        public string IssInsNo { get; set; }
+        [JsonProperty("issInsCode")]
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 接入机构代码

+ 6 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayUpacpRefundNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayConsumeUndoNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayUpacpRefundNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 二维码支付(V2.2) 退货类(消费撤销类)- 后台通知
+    /// </summary>
+    public class UnionPayQrCodePayConsumeUndoNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号
@@ -79,8 +82,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        [JsonProperty("issInsNo")]
-        public string IssInsNo { get; set; }
+        [JsonProperty("issInsCode")]
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 接入机构代码

+ 6 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayUpacpPurchaseUndoNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayQrCodePayRefundNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayUpacpPurchaseUndoNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 二维码支付(V2.2) 退货类(退货)- 后台通知
+    /// </summary>
+    public class UnionPayQrCodePayRefundNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号
@@ -79,8 +82,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        [JsonProperty("issInsNo")]
-        public string IssInsNo { get; set; }
+        [JsonProperty("issInsCode")]
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 接入机构代码

+ 178 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayConsumeUndoNotifyResponse.cs

@@ -0,0 +1,178 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 消费撤销接口 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayConsumeUndoNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 208 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayFrontConsumeNotifyResponse.cs

@@ -0,0 +1,208 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 消费接口 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayFrontConsumeNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        [JsonProperty("accNo")]
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        [JsonProperty("payType")]
+        public string PayType { get; set; }
+
+        /// <summary>
+        /// 支付卡标识
+        /// </summary>
+        [JsonProperty("payCardNo")]
+        public string PayCardNo { get; set; }
+
+        /// <summary>
+        /// 支付卡类型
+        /// </summary>
+        [JsonProperty("payCardType")]
+        public string PayCardType { get; set; }
+
+        /// <summary>
+        /// 支付卡名称
+        /// </summary>
+        [JsonProperty("payCardIssueName")]
+        public string PayCardIssueName { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 绑定标识号
+        /// </summary>
+        [JsonProperty("bindId")]
+        public string BindId { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 214 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayFrontPreauthNotifyResponse.cs

@@ -0,0 +1,214 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 预授权接口 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayFrontPreauthNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 有卡交易信息域
+        /// </summary>
+        [JsonProperty("cardTransData")]
+        public string CardTransData { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        [JsonProperty("accNo")]
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        [JsonProperty("payType")]
+        public string PayType { get; set; }
+
+        /// <summary>
+        /// 支付卡标识
+        /// </summary>
+        [JsonProperty("payCardNo")]
+        public string PayCardNo { get; set; }
+
+        /// <summary>
+        /// 支付卡类型
+        /// </summary>
+        [JsonProperty("payCardType")]
+        public string PayCardType { get; set; }
+
+        /// <summary>
+        /// 支付卡名称
+        /// </summary>
+        [JsonProperty("payCardIssueName")]
+        public string PayCardIssueName { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 绑定标识号
+        /// </summary>
+        [JsonProperty("bindId")]
+        public string BindId { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_7_2_AuthUndoNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayPreauthFinishNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_7_2_AuthUndoNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 手机网页支付(V2.2) 预授权完成 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayPreauthFinishNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 178 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayPreauthFinishUndoNotifyResponse.cs

@@ -0,0 +1,178 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 预授权完成撤销 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayPreauthFinishUndoNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        [JsonProperty("acqInsCode")]
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 4 - 1
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayForm_6_7_4_AuthFinishUndoNotifyResponse.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayPreauthUndoNotifyResponse.cs

@@ -2,7 +2,10 @@
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
 {
-    public class UnionPayForm_6_7_4_AuthFinishUndoNotifyResponse : UnionPayNotifyResponse
+    /// <summary>
+    /// 手机网页支付(V2.2) 预授权撤销 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayPreauthUndoNotifyResponse : UnionPayNotifyResponse
     {
         /// <summary>
         /// 查询流水号

+ 196 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Notify/UnionPayWapPayRefundNotifyResponse.cs

@@ -0,0 +1,196 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Notify
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 退货接口 - 后台通知
+    /// </summary>
+    public class UnionPayWapPayRefundNotifyResponse : UnionPayNotifyResponse
+    {
+        /// <summary>
+        /// 查询流水号
+        /// </summary>
+        [JsonProperty("queryId")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 交易传输时间
+        /// </summary>
+        [JsonProperty("traceTime")]
+        public string TraceTime { get; set; }
+
+        /// <summary>
+        /// 签名
+        /// </summary>
+        [JsonProperty("signature")]
+        public string Signature { get; set; }
+
+        /// <summary>
+        /// 签名方法
+        /// </summary>
+        [JsonProperty("signMethod")]
+        public string SignMethod { get; set; }
+
+        /// <summary>
+        /// 清算币种
+        /// </summary>
+        [JsonProperty("settleCurrencyCode")]
+        public string SettleCurrencyCode { get; set; }
+
+        /// <summary>
+        /// 清算金额
+        /// </summary>
+        [JsonProperty("settleAmt")]
+        public string SettleAmt { get; set; }
+
+        /// <summary>
+        /// 清算日期
+        /// </summary>
+        [JsonProperty("settleDate")]
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 系统跟踪号
+        /// </summary>
+        [JsonProperty("traceNo")]
+        public string TraceNo { get; set; }
+
+        /// <summary>
+        /// 应答码
+        /// </summary>
+        [JsonProperty("respCode")]
+        public string RespCode { get; set; }
+
+        /// <summary>
+        /// 应答信息
+        /// </summary>
+        [JsonProperty("respMsg")]
+        public string RespMsg { get; set; }
+
+        /// <summary>
+        /// 兑换日期
+        /// </summary>
+        [JsonProperty("exchangeDate")]
+        public string ExchangeDate { get; set; }
+
+        /// <summary>
+        /// 签名公钥证书
+        /// </summary>
+        [JsonProperty("signPubKeyCert")]
+        public string SignPubKeyCert { get; set; }
+
+        /// <summary>
+        /// 清算汇率
+        /// </summary>
+        [JsonProperty("exchangeRate")]
+        public string ExchangeRate { get; set; }
+
+        /// <summary>
+        /// 银行卡验证信息及身份信息
+        /// </summary>
+        [JsonProperty("customerInfo")]
+        public string CustomerInfo { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        [JsonProperty("accNo")]
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        [JsonProperty("payType")]
+        public string PayType { get; set; }
+
+        /// <summary>
+        /// 支付卡类型
+        /// </summary>
+        [JsonProperty("payCardType")]
+        public string PayCardType { get; set; }
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+
+        /// <summary>
+        /// 编码方式
+        /// </summary>
+        [JsonProperty("encoding")]
+        public string Encoding { get; set; }
+
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        [JsonProperty("bizType")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        [JsonProperty("txnTime")]
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        [JsonProperty("currencyCode")]
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        [JsonProperty("txnAmt")]
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        [JsonProperty("txnType")]
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        [JsonProperty("txnSubType")]
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 接入类型
+        /// </summary>
+        [JsonProperty("accessType")]
+        public string AccessType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        [JsonProperty("reqReserved")]
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 商户代码
+        /// </summary>
+        [JsonProperty("merId")]
+        public string MerId { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        [JsonProperty("orderId")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        [JsonProperty("origQryId")]
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        [JsonProperty("reserved")]
+        public string Reserved { get; set; }
+    }
+}

+ 135 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayConsumeUndoRequest.cs

@@ -0,0 +1,135 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 网关支付(V2.2) 消费撤销接口
+    /// </summary>
+    public class UnionPayGatewayPayConsumeUndoRequest : IUnionPayRequest<UnionPayGatewayPayConsumeUndoResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "origQryId", OrigQryId },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "reserved", Reserved },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 3 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayEncryptCerUpdateQueryRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayEncryptCertUpdateQueryRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 银联加密公钥更新查询接口
+    /// 网关支付(V2.2) 银联加密公钥更新查询接口
     /// </summary>
-    public class UnionPayEncryptCerUpdateQueryRequest : IUnionPayRequest<UnionPayEncryptCerUpdateQueryResponse>
+    public class UnionPayGatewayPayEncryptCertUpdateQueryRequest : IUnionPayRequest<UnionPayGatewayPayEncryptCertUpdateQueryResponse>
     {
         /// <summary>
         /// 产品类型
@@ -112,6 +112,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
                 { "orderId", OrderId  },
+                { "certType", CertType },
                 { "subMerId", SubMerId },
                 { "subMerAbbr", SubMerAbbr },
                 { "subMerName", SubMerName },

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_6_FileTransferRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFileTransferRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 文件传输类交易接口
+    /// 网关支付(V2.2) 文件传输类交易接口
     /// </summary>
-    public class UnionPayForm_6_6_FileTransferRequest : IUnionPayRequest<UnionPayForm_6_6_FileTransferResponse>
+    public class UnionPayGatewayPayFileTransferRequest : IUnionPayRequest<UnionPayGatewayPayFileTransferResponse>
     {
         /// <summary>
         /// 产品类型

+ 8 - 9
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_2_FrontConsumeRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFrontConsumeRequest.cs

@@ -1,12 +1,11 @@
 using System.Collections.Generic;
-using Essensoft.AspNetCore.Payment.UnionPay.Response;
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 消费接口
+    /// 网关支付(V2.2) 消费接口
     /// </summary>
-    public class UnionPayForm_6_2_FrontConsumeRequest : IUnionPayRequest<UnionPayForm_6_2_FrontConsumeResponse>
+    public class UnionPayGatewayPayFrontConsumeRequest : IUnionPayRequest<UnionPayNullResponse>
     {
         /// <summary>
         /// 产品类型
@@ -76,7 +75,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        public string IssInsNo { get; set; }
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 分期付款信息域
@@ -126,7 +125,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 订单接收超时时间
         /// </summary>
-        public string OrderTimeout { get; set; }
+        public string OrderTimeOut { get; set; }
 
         /// <summary>
         /// 分账域
@@ -166,7 +165,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 支付超时时间
         /// </summary>
-        public string PayTimeout { get; set; }
+        public string PayTimeOut { get; set; }
 
         /// <summary>
         /// 终端号
@@ -209,7 +208,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "subMerId", SubMerId },
                 { "subMerAbbr", SubMerAbbr },
                 { "subMerName", SubMerName },
-                { "issInsNo", IssInsNo },
+                { "issInsCode", IssInsCode },
                 { "instalTransInfo", InstalTransInfo },
                 { "frontUrl", FrontUrl },
                 { "customerInfo", CustomerInfo },
@@ -219,7 +218,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "accType", AccType },
                 { "reserved", Reserved },
                 { "customerIp", CustomerIp },
-                { "orderTimeout", OrderTimeout },
+                { "orderTimeout", OrderTimeOut },
                 { "accSplitData", AccSplitData },
                 { "riskRateInfo", RiskRateInfo },
                 { "ctrlRule", CtrlRule },
@@ -227,7 +226,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "reqReserved", ReqReserved },
                 { "frontFailUrl", FrontFailUrl },
                 { "supPayType", SupPayType },
-                { "payTimeout", PayTimeout },
+                { "payTimeout", PayTimeOut },
                 { "termId", TermId },
                 { "userMac", UserMac }
             };

+ 23 - 23
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_7_1_AuthDeal_FrontRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayFrontPreauthRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 预授权接口
+    /// 网关支付(V2.2) 预授权接口
     /// </summary>
-    public class UnionPayForm_6_7_1_AuthDeal_FrontRequest : IUnionPayRequest<UnionPayForm_6_7_1_AuthDeal_FrontResponse>
+    public class UnionPayGatewayPayFrontPreauthRequest : IUnionPayRequest<UnionPayGatewayPayFrontPreauthResponse>
     {
         /// <summary>
         /// 产品类型
@@ -19,34 +19,34 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易币种
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string CurrencyCode { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易金额
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnAmt { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易类型
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 交易币种
+        /// 交易子类
         /// </summary>
-        public string CurrencyCode { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易金额
+        /// 渠道类型
         /// </summary>
-        public string TxnAmt { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号
@@ -116,12 +116,12 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 订单接收超时时间
         /// </summary>
-        public string OrderTimeout { get; set; }
+        public string OrderTimeOut { get; set; }
 
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        public string IssInsNo { get; set; }
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 分账域
@@ -156,7 +156,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 支付超时时间
         /// </summary>
-        public string PayTimeout { get; set; }
+        public string PayTimeOut { get; set; }
 
         /// <summary>
         /// 终端号
@@ -188,18 +188,18 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
-                { "txnType", TxnType },
-                { "txnSubType", TxnSubType },
-                { "channelType", ChannelType },
                 { "backUrl", BackUrl },
                 { "currencyCode", CurrencyCode },
                 { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
                 { "orderId", OrderId },
                 { "orderDesc", OrderDesc },
                 { "subMerId", SubMerId },
                 { "subMerAbbr", SubMerAbbr },
                 { "subMerName", SubMerName },
-                { "issInsNo", IssInsNo },
+                { "issInsCode", IssInsCode },
                 { "frontUrl", FrontUrl },
                 { "customerInfo", CustomerInfo },
                 { "cardTransData", CardTransData },
@@ -208,14 +208,14 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "accType", AccType },
                 { "reserved", Reserved },
                 { "customerIp", CustomerIp },
-                { "orderTimeout", OrderTimeout },
+                { "orderTimeout", OrderTimeOut },
                 { "accSplitData", AccSplitData },
                 { "riskRateInfo", RiskRateInfo },
                 { "defaultPayType", DefaultPayType },
                 { "reqReserved", ReqReserved },
                 { "frontFailUrl", FrontFailUrl },
                 { "supPayType", SupPayType },
-                { "payTimeout", PayTimeout },
+                { "payTimeout", PayTimeOut },
                 { "termId", TermId },
                 { "userMac", UserMac }
             };

+ 135 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayPreauthFinishRequest.cs

@@ -0,0 +1,135 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 网关支付(V2.2) 预授权完成
+    /// </summary>
+    public class UnionPayGatewayPayPreauthFinishRequest : IUnionPayRequest<UnionPayGatewayPayPreauthFinishResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "origQryId", OrigQryId },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "reserved", Reserved },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 135 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayPreauthFinishUndoRequest.cs

@@ -0,0 +1,135 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 网关支付(V2.2) 预授权完成撤销
+    /// </summary>
+    public class UnionPayGatewayPayPreauthFinishUndoRequest : IUnionPayRequest<UnionPayGatewayPayPreauthFinishUndoResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
+                { "orderId", OrderId },
+                { "origQryId", OrigQryId },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "reserved", Reserved },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 14 - 14
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_3_ConsumeUndoRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayPreauthUndoRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 消费撤销接口
+    /// 网关支付(V2.2) 预授权撤销
     /// </summary>
-    public class UnionPayForm_6_3_ConsumeUndoRequest : IUnionPayRequest<UnionPayForm_6_3_ConsumeUndoResponse>
+    public class UnionPayGatewayPayPreauthUndoRequest : IUnionPayRequest<UnionPayGatewayPayPreauthUndoResponse>
     {
         /// <summary>
         /// 产品类型
@@ -19,29 +19,29 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易金额
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string TxnAmt { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易类型
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易子类
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易金额
+        /// 渠道类型
         /// </summary>
-        public string TxnAmt { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号
@@ -103,11 +103,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "txnAmt", TxnAmt },
                 { "orderId", OrderId },
                 { "origQryId", OrigQryId },
                 { "subMerId", SubMerId },

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_5_QueryRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayQueryRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 交易状态查询
+    /// 网关支付(V2.2) 交易状态查询接口
     /// </summary>
-    public class UnionPayForm_6_5_QueryRequest : IUnionPayRequest<UnionPayForm_6_5_QueryResponse>
+    public class UnionPayGatewayPayQueryRequest : IUnionPayRequest<UnionPayGatewayPayQueryResponse>
     {
         /// <summary>
         /// 产品类型

+ 14 - 14
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_4_RefundRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayGatewayPayRefundRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 退货接口
+    /// 网关支付(V2.2) 退货接口
     /// </summary>
-    public class UnionPayForm_6_4_RefundRequest : IUnionPayRequest<UnionPayForm_6_4_RefundResponse>
+    public class UnionPayGatewayPayRefundRequest : IUnionPayRequest<UnionPayGatewayPayRefundResponse>
     {
         /// <summary>
         /// 产品类型
@@ -19,29 +19,29 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易金额
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string TxnAmt { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易类型
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易子类
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易金额
+        /// 渠道类型
         /// </summary>
-        public string TxnAmt { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号
@@ -118,11 +118,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "txnAmt", TxnAmt },
                 { "orderId", OrderId  },
                 { "origQryId", OrigQryId },
                 { "acqInsCode", AcqInsCode },

+ 3 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_Token_ApplyTokenRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayBackOpenRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 银联全渠道支付开通交易(订单号申请Token)
+    /// 无跳转支付(V2.2) 银联全渠道支付开通交易(订单号申请Token)
     /// </summary>
-    public class UnionPayForm03_6_Token_ApplyTokenRequest : IUnionPayRequest<UnionPayForm03_6_Token_ApplyTokenResponse>
+    public class UnionPayNoRedirectPayBackOpenRequest : IUnionPayRequest<UnionPayNoRedirectPayBackOpenResponse>
     {
         /// <summary>
         /// 产品类型
@@ -103,7 +103,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "subMerName", SubMerName },
                 { "reserved", Reserved },
                 { "backUrl", BackUrl },
-                { "reqReserved", ReqReserved }
+                { "reqReserved", ReqReserved },
             };
             return parameters;
         }

+ 249 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayConsumeRequest.cs

@@ -0,0 +1,249 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 无跳转支付(V2.2) 消费接口
+    /// </summary>
+    public class UnionPayNoRedirectPayConsumeRequest : IUnionPayRequest<UnionPayNoRedirectPayConsumeResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 标记化支付信息域
+        /// </summary>
+        public string TokenPayData { get; set; }
+
+        /// <summary>
+        /// 订单描述
+        /// </summary>
+        public string OrderDesc { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 分期付款信息域
+        /// </summary>
+        public string InstalTransInfo { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 银行卡验证信息及身份信息
+        /// </summary>
+        public string CustomerInfo { get; set; }
+
+        /// <summary>
+        /// 有卡交易信息域
+        /// </summary>
+        public string CardTransData { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 账号类型(卡介质)
+        /// </summary>
+        public string AccType { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 持卡人IP
+        /// </summary>
+        public string CustomerIp { get; set; }
+
+        /// <summary>
+        /// 订单接收超时时间
+        /// </summary>
+        public string OrderTimeOut { get; set; }
+
+        /// <summary>
+        /// 发卡机构代码
+        /// </summary>
+        public string IssInsCode { get; set; }
+
+        /// <summary>
+        /// 分账域
+        /// </summary>
+        public string AccSplitData { get; set; }
+
+        /// <summary>
+        /// 风控信息域
+        /// </summary>
+        public string RiskRateInfo { get; set; }
+
+        /// <summary>
+        /// 控制规则
+        /// </summary>
+        public string CtrlRule { get; set; }
+
+        /// <summary>
+        /// 前台通知地址
+        /// </summary>
+        public string FrontUrl { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        /// <summary>
+        /// 终端信息域
+        /// </summary>
+        public string UserMac { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "currencyCode", CurrencyCode },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "tokenPayData", TokenPayData },
+                { "orderDesc", OrderDesc },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "instalTransInfo", InstalTransInfo },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "acqInsCode", AcqInsCode },
+                { "customerInfo", CustomerInfo },
+                { "cardTransData", CardTransData },
+                { "accNo", AccNo },
+                { "accType", AccType },
+                { "reserved", Reserved },
+                { "customerIp", CustomerIp },
+                { "orderTimeout", OrderTimeOut },
+                { "issInsCode", IssInsCode },
+                { "accSplitData", AccSplitData },
+                { "riskRateInfo", RiskRateInfo },
+                { "ctrlRule", CtrlRule },
+                { "frontUrl", FrontUrl },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId },
+                { "userMac", UserMac }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return true;
+        }
+
+        #endregion
+    }
+}

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_7_3_AuthFinishRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayConsumeUndoRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 预授权完成
+    /// 无跳转支付(V2.2) 消费撤销接口
     /// </summary>
-    public class UnionPayForm_6_7_3_AuthFinishRequest : IUnionPayRequest<UnionPayForm_6_7_3_AuthFinishResponse>
+    public class UnionPayNoRedirectPayConsumeUndoRequest : IUnionPayRequest<UnionPayNoRedirectPayConsumeUndoResponse>
     {
         /// <summary>
         /// 产品类型

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_4_Token_DeleteTokenRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayDeleteTokenRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 解除标记
+    /// 无跳转支付(V2.2) 解除标记
     /// </summary>
-    public class UnionPayForm03_6_4_Token_DeleteTokenRequest : IUnionPayRequest<UnionPayForm03_6_4_Token_DeleteTokenResponse>
+    public class UnionPayNoRedirectPayDeleteTokenRequest : IUnionPayRequest<UnionPayNoRedirectPayDeleteTokenResponse>
     {
         /// <summary>
         /// 标记化支付信息域

+ 141 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayEncryptCertUpdateQueryRequest.cs

@@ -0,0 +1,141 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 无跳转支付(V2.2) 银联加密公钥更新查询接口
+    /// </summary>
+    public class UnionPayNoRedirectPayEncryptCertUpdateQueryRequest : IUnionPayRequest<UnionPayNoRedirectPayEncryptCertUpdateQueryResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 证书类型
+        /// </summary>
+        public string CertType { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId  },
+                { "certType", CertType },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "reserved", Reserved },
+                { "acqInsCode", AcqInsCode },
+                { "reqReserved", ReqReserved }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 3 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_7_FileTransferRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayFileTransferRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 文件传输类交易接口
+    /// 无跳转支付(V2.2) 文件传输类交易接口
     /// </summary>
-    public class UnionPayForm03_7_FileTransferRequest : IUnionPayRequest<UnionPayForm03_7_FileTransferResponse>
+    public class UnionPayNoRedirectPayFileTransferRequest : IUnionPayRequest<UnionPayNoRedirectPayFileTransferResponse>
     {
         /// <summary>
         /// 产品类型
@@ -39,7 +39,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string FileType { get; set; }
 
         /// <summary>
-        /// 请求方保留域	
+        /// 请求方保留域
         /// </summary>
         public string ReqReserved { get; set; }
 

+ 14 - 25
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_2_Token_OpenCard_FrontRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayFrontOpenRequest.cs

@@ -1,13 +1,17 @@
 using System.Collections.Generic;
-using Essensoft.AspNetCore.Payment.UnionPay.Response;
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 银联全渠道支付开通交易
+    /// 无跳转支付(V2.2) 银联全渠道支付开通交易
     /// </summary>
-    public class UnionPayForm03_6_2_Token_OpenCard_FrontRequest : IUnionPayRequest<UnionPayForm03_6_2_Token_OpenCard_FrontResponse>
+    public class UnionPayNoRedirectPayFrontOpenRequest : IUnionPayRequest<UnionPayNullResponse>
     {
+        /// <summary>
+        /// 标记化支付信息域
+        /// </summary>
+        public string TokenPayData { get; set; }
+
         /// <summary>
         /// 产品类型
         /// </summary>
@@ -18,6 +22,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// </summary>
         public string TxnTime { get; set; }
 
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
         /// <summary>
         /// 交易类型
         /// </summary>
@@ -33,51 +42,33 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// </summary>
         public string ChannelType { get; set; }
 
-        /// <summary>
-        /// 后台通知地址
-        /// 后台返回商户结果时使用,如上送,则发送商户后台交易结果通知,如需通过专线通知,需要在通知地址前面加上前缀:专线的首字母加竖线ZX|
-        /// </summary>
-        public string BackUrl { get; set; }
-
-        /// <summary>
-        /// 交易金额
-        /// 单位为分
-        /// </summary>
-        public string TxnAmt { get; set; }
-
         /// <summary>
         /// 商户订单号
-        /// 商户端生成
         /// </summary>
         public string OrderId { get; set; }
 
         /// <summary>
         /// 二级商户代码
-        /// 商户类型为平台类商户接入时必须上送
         /// </summary>
         public string SubMerId { get; set; }
 
         /// <summary>
         /// 二级商户简称
-        /// 商户类型为平台类商户接入时必须上送
         /// </summary>
         public string SubMerAbbr { get; set; }
 
         /// <summary>
         /// 二级商户名称
-        /// 商户类型为平台类商户接入时必须上送
         /// </summary>
         public string SubMerName { get; set; }
 
         /// <summary>
         /// 控制规则
-        /// 32位01字符串控制位,从左至右第一位表示财税库银信息控制位,当第一位为1时,财税库银行业信息域taxIndustryInfo必上送
         /// </summary>
         public string CtrlRule { get; set; }
 
         /// <summary>
         /// 前台通知地址
-        /// 前台交易必送
         /// </summary>
         public string FrontUrl { get; set; }
 
@@ -88,7 +79,6 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 
         /// <summary>
         /// 账号
-        /// 产品类型为Token时不上送
         /// </summary>
         public string AccNo { get; set; }
 
@@ -104,7 +94,6 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 
         /// <summary>
         /// 请求方保留域
-        /// 商户自定义保留域,交易应答时会原样返回
         /// </summary>
         public string ReqReserved { get; set; }
 
@@ -136,13 +125,13 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         {
             var parameters = new UnionPayDictionary
             {
+                { "tokenPayData", TokenPayData },
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "txnAmt", TxnAmt },
                 { "orderId", OrderId },
                 { "subMerId", SubMerId },
                 { "subMerAbbr", SubMerAbbr },

+ 7 - 8
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_7_Token_OpenAndConsumeRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayOpenAndConsumeRequest.cs

@@ -1,12 +1,11 @@
 using System.Collections.Generic;
-using Essensoft.AspNetCore.Payment.UnionPay.Response;
 
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 银联全渠道开通并支付交易
+    /// 无跳转支付(V2.2) 银联全渠道开通并支付交易
     /// </summary>
-    public class UnionPayForm03_6_7_Token_OpenAndConsumeRequest : IUnionPayRequest<UnionPayForm03_6_7_Token_OpenAndConsumeResponse>
+    public class UnionPayNoRedirectPayOpenAndConsumeRequest : IUnionPayRequest<UnionPayNullResponse>
     {
         /// <summary>
         /// 产品类型
@@ -136,12 +135,12 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 订单接收超时时间
         /// </summary>
-        public string OrderTimeout { get; set; }
+        public string OrderTimeOut { get; set; }
 
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        public string IssInsNo { get; set; }
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 风控信息域
@@ -211,8 +210,8 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "accType", AccType },
                 { "reserved", Reserved },
                 { "customerIp", CustomerIp },
-                { "orderTimeout", OrderTimeout },
-                { "issInsNo", IssInsNo },
+                { "orderTimeout", OrderTimeOut },
+                { "issInsCode", IssInsCode },
                 { "riskRateInfo", RiskRateInfo },
                 { "frontUrl", FrontUrl },
                 { "reqReserved", ReqReserved },
@@ -224,7 +223,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 
         public string GetRequestUrl(bool isTest)
         {
-            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+            return isTest ? "https://gateway.test.95516.com/gateway/api/frontTransReq.do" : "https://gateway.95516.com/gateway/api/frontTransReq.do";
         }
 
         public bool HasEncryptCertId()

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_3_Token_OpenQueryRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayOpenQueryRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 银联全渠道支付开通查询交易
+    /// 无跳转支付(V2.2) 银联全渠道支付开通查询交易
     /// </summary>
-    public class UnionPayForm03_6_3_Token_OpenQueryRequest : IUnionPayRequest<UnionPayForm03_6_3_Token_OpenQueryResponse>
+    public class UnionPayNoRedirectPayOpenQueryRequest : IUnionPayRequest<UnionPayNoRedirectPayOpenQueryResponse>
     {
         /// <summary>
         /// 产品类型

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_3_ConsumeUndoRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthFinishRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 消费撤销接口
+    /// 无跳转支付(V2.2) 预授权完成
     /// </summary>
-    public class UnionPayForm03_6_3_ConsumeUndoRequest : IUnionPayRequest<UnionPayForm03_6_3_ConsumeUndoResponse>
+    public class UnionPayNoRedirectPayPreauthFinishRequest : IUnionPayRequest<UnionPayNoRedirectPayPreauthFinishResponse>
     {
         /// <summary>
         /// 产品类型

+ 4 - 4
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_7_2_AuthUndoRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthFinishUndoRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 预授权撤销
+    /// 无跳转支付(V2.2) 预授权完成撤销
     /// </summary>
-    public class UnionPayForm_6_7_2_AuthUndoRequest : IUnionPayRequest<UnionPayForm_6_7_2_AuthUndoResponse>
+    public class UnionPayNoRedirectPayPreauthFinishUndoRequest : IUnionPayRequest<UnionPayNoRedirectPayPreauthFinishUndoResponse>
     {
         /// <summary>
         /// 产品类型
@@ -123,11 +123,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
-                { "backUrl", BackUrl },
-                { "txnAmt", TxnAmt },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
                 { "orderId", OrderId },
                 { "origQryId", OrigQryId },
                 { "subMerId", SubMerId },

+ 5 - 5
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_7_1_AuthDeal_BackRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 预授权接口
+    /// 无跳转支付(V2.2) 预授权接口
     /// </summary>
-    public class UnionPayForm_6_7_1_AuthDeal_BackRequest : IUnionPayRequest<UnionPayForm_6_7_1_AuthDeal_BackResponse>
+    public class UnionPayNoRedirectPayPreauthRequest : IUnionPayRequest<UnionPayNoRedirectPayPreauthResponse>
     {
         /// <summary>
         /// 产品类型
@@ -131,7 +131,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 发卡机构代码
         /// </summary>
-        public string IssInsNo { get; set; }
+        public string IssInsCode { get; set; }
 
         /// <summary>
         /// 风控信息域
@@ -139,7 +139,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string RiskRateInfo { get; set; }
 
         /// <summary>
-        /// 前台通知地址
+        /// 前台通知地址	
         /// </summary>
         public string FrontUrl { get; set; }
 
@@ -200,7 +200,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "accType", AccType },
                 { "reserved", Reserved },
                 { "customerIp", CustomerIp },
-                { "issInsNo", IssInsNo },
+                { "issInsCode", IssInsCode },
                 { "riskRateInfo", RiskRateInfo },
                 { "frontUrl", FrontUrl },
                 { "reqReserved", ReqReserved },

+ 5 - 5
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm_6_7_4_AuthFinishUndoRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayPreauthUndoRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 预授权完成撤销
+    /// 无跳转支付(V2.2) 预授权撤销
     /// </summary>
-    public class UnionPayForm_6_7_4_AuthFinishUndoRequest : IUnionPayRequest<UnionPayForm_6_7_4_AuthFinishUndoResponse>
+    public class UnionPayNoRedirectPayPreauthUndoRequest : IUnionPayRequest<UnionPayNoRedirectPayPreauthUndoResponse>
     {
         /// <summary>
         /// 产品类型
@@ -84,7 +84,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string MerName { get; set; }
 
         /// <summary>
-        /// 收单机构代码
+        /// 收单机构代码	
         /// </summary>
         public string AcqInsCode { get; set; }
 
@@ -123,11 +123,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "txnAmt", TxnAmt },
                 { "orderId", OrderId },
                 { "origQryId", OrigQryId },
                 { "subMerId", SubMerId },

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_5_QueryRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayQueryRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 交易状态查询接口
+    /// 无跳转支付(V2.2) 交易状态查询接口
     /// </summary>
-    public class UnionPayForm03_6_5_QueryRequest : IUnionPayRequest<UnionPayForm03_6_5_QueryResponse>
+    public class UnionPayNoRedirectPayQueryRequest : IUnionPayRequest<UnionPayNoRedirectPayQueryResponse>
     {
         /// <summary>
         /// 产品类型

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_4_RefundRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayRefundRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 退货接口
+    /// 无跳转支付(V2.2) 退货接口
     /// </summary>
-    public class UnionPayForm03_6_4_RefundRequest : IUnionPayRequest<UnionPayForm03_6_4_RefundResponse>
+    public class UnionPayNoRedirectPayRefundRequest : IUnionPayRequest<UnionPayNoRedirectPayRefundResponse>
     {
         /// <summary>
         /// 产品类型

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_6_Token_OpenSMSRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPaySmsOpenRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 发送短信验证码
+    /// 无跳转支付(V2.2) 发送短信验证码
     /// </summary>
-    public class UnionPayForm03_6_6_Token_OpenSMSRequest : IUnionPayRequest<UnionPayForm03_6_6_Token_OpenSMSResponse>
+    public class UnionPayNoRedirectPaySmsOpenRequest : IUnionPayRequest<UnionPayNoRedirectPaySmsOpenResponse>
     {
         /// <summary>
         /// 产品类型

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm03_6_5_Token_UpdateTokenRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayNoRedirectPayUpdateTokenRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 更新标记
+    /// 无跳转支付(V2.2) 更新标记
     /// </summary>
-    public class UnionPayForm03_6_5_Token_UpdateTokenRequest : IUnionPayRequest<UnionPayForm03_6_5_Token_UpdateTokenResponse>
+    public class UnionPayNoRedirectPayUpdateTokenRequest : IUnionPayRequest<UnionPayNoRedirectPayUpdateTokenResponse>
     {
         /// <summary>
         /// 标记化支付信息域

+ 17 - 17
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm05_6_2_AppConsumeRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayAppConsumeRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 二维码消费(被扫)
+    /// 二维码支付(V2.2) 二维码消费(被扫)
     /// </summary>
-    public class UnionPayForm05_6_2_AppConsumeRequest : IUnionPayRequest<UnionPayForm05_6_2_AppConsumeResponse>
+    public class UnionPayQrCodePayAppConsumeRequest : IUnionPayRequest<UnionPayQrCodePayAppConsumeResponse>
     {
         /// <summary>
         /// C2B码
@@ -24,34 +24,34 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易币种
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string CurrencyCode { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易金额
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnAmt { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易类型
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 交易币种
+        /// 交易子类
         /// </summary>
-        public string CurrencyCode { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易金额
+        /// 渠道类型
         /// </summary>
-        public string TxnAmt { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号
@@ -129,11 +129,12 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "qrNo", QrNo },
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "currencyCode", CurrencyCode },
+                { "txnAmt", TxnAmt },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "currencyCode", CurrencyCode },
                 { "orderId", OrderId },
                 { "termInfo", TermInfo },
                 { "subMerId", SubMerId },
@@ -142,7 +143,6 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "accSplitData", AccSplitData },
                 { "accInsCode", AccInsCode },
                 { "reserved", Reserved },
-                { "txnAmt", TxnAmt },
                 { "riskRateInfo", RiskRateInfo },
                 { "reqReserved", ReqReserved },
                 { "termId", TermId }

+ 16 - 16
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm05_6_1_ApplyQrCodeRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayApplyQrCodeRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 申请二维码(主扫)
+    /// 二维码支付(V2.2) 申请二维码(主扫)
     /// </summary>
-    public class UnionPayForm05_6_1_ApplyQrCodeRequest : IUnionPayRequest<UnionPayForm05_6_1_ApplyQrCodeResponse>
+    public class UnionPayQrCodePayApplyQrCodeRequest : IUnionPayRequest<UnionPayQrCodePayApplyQrCodeResponse>
     {
         /// <summary>
         /// 产品类型
@@ -19,29 +19,29 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易币种
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string CurrencyCode { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易类型
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易子类
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易币种
+        /// 渠道类型
         /// </summary>
-        public string CurrencyCode { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号
@@ -101,7 +101,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// <summary>
         /// 支付超时时间
         /// </summary>
-        public string PayTimeout { get; set; }
+        public string PayTimeOut { get; set; }
 
         /// <summary>
         /// 终端号
@@ -128,11 +128,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "currencyCode", CurrencyCode },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "currencyCode", CurrencyCode },
                 { "orderId", OrderId },
                 { "termInfo", TermInfo },
                 { "subMerId", SubMerId },
@@ -144,7 +144,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
                 { "txnAmt", TxnAmt },
                 { "ctrlRule", CtrlRule },
                 { "reqReserved", ReqReserved },
-                { "payTimeout", PayTimeout },
+                { "payTimeout", PayTimeOut },
                 { "termId", TermId }
             };
             return parameters;

+ 14 - 14
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayUpacpPurchaseUndoRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayConsumeUndoRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 退货类(消费撤销类)
+    /// 二维码支付(V2.2) 退货类(消费撤销类)
     /// </summary>
-    public class UnionPayUpacpPurchaseUndoRequest : IUnionPayRequest<UnionPayUpacpPurchaseUndoResponse>
+    public class UnionPayQrCodePayConsumeUndoRequest : IUnionPayRequest<UnionPayQrCodePayConsumeUndoResponse>
     {
         /// <summary>
         /// 产品类型
@@ -19,29 +19,29 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易金额
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string TxnAmt { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易类型
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易子类
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易金额
+        /// 渠道类型
         /// </summary>
-        public string TxnAmt { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号
@@ -118,11 +118,11 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
             {
                 { "bizType", BizType },
                 { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
                 { "txnType", TxnType },
                 { "txnSubType", TxnSubType },
                 { "channelType", ChannelType },
-                { "backUrl", BackUrl },
-                { "txnAmt", TxnAmt },
                 { "orderId", OrderId  },
                 { "subMerId", SubMerId },
                 { "subMerAbbr", SubMerAbbr },

+ 3 - 3
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm05_7_FileTransferRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayFileTransferRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 文件传输类交易接口
+    /// 二维码支付(V2.2) 文件传输类交易接口
     /// </summary>
-    public class UnionPayForm05_7_FileTransferRequest : IUnionPayRequest<UnionPayForm05_7_FileTransferResponse>
+    public class UnionPayQrCodePayFileTransferRequest : IUnionPayRequest<UnionPayQrCodePayFileTransferResponse>
     {
         /// <summary>
         /// 产品类型
@@ -44,7 +44,7 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string AccInsCode { get; set; }
 
         /// <summary>
-        /// 请求方保留域	
+        /// 请求方保留域
         /// </summary>
         public string ReqReserved { get; set; }
 

+ 12 - 12
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm05_6_3_QueryRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayQueryRequest.cs

@@ -4,25 +4,15 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 交易状态查询
+    /// 二维码支付(V2.2) 交易状态查询
     /// </summary>
-    public class UnionPayForm05_6_3_QueryRequest : IUnionPayRequest<UnionPayForm05_6_3_QueryResponse>
+    public class UnionPayQrCodePayQueryRequest : IUnionPayRequest<UnionPayQrCodePayQueryResponse>
     {
-        /// <summary>
-        /// 查询流水号	
-        /// </summary>
-        public string QueryId { get; set; }
-
         /// <summary>
         /// 产品类型
         /// </summary>
         public string BizType { get; set; }
 
-        /// <summary>
-        /// 订单发送时间
-        /// </summary>
-        public string TxnTime { get; set; }
-
         /// <summary>
         /// 交易类型
         /// </summary>
@@ -33,6 +23,16 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         /// </summary>
         public string TxnSubType { get; set; }
 
+        /// <summary>
+        /// 查询流水号	
+        /// </summary>
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
         /// <summary>
         /// 接入机构代码	
         /// </summary>

+ 12 - 12
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayUpacpRefundRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayRefundRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 退货类(退货)
+    /// 二维码支付(V2.2) 退货类(退货)
     /// </summary>
-    public class UnionPayUpacpRefundRequest : IUnionPayRequest<UnionPayUpacpRefundResponse>
+    public class UnionPayQrCodePayRefundRequest : IUnionPayRequest<UnionPayQrCodePayRefundResponse>
     {
         /// <summary>
         /// 产品类型
@@ -19,29 +19,29 @@ namespace Essensoft.AspNetCore.Payment.UnionPay.Request
         public string TxnTime { get; set; }
 
         /// <summary>
-        /// 交易类型
+        /// 后台通知地址
         /// </summary>
-        public string TxnType { get; set; }
+        public string BackUrl { get; set; }
 
         /// <summary>
-        /// 交易子类
+        /// 交易金额
         /// </summary>
-        public string TxnSubType { get; set; }
+        public string TxnAmt { get; set; }
 
         /// <summary>
-        /// 渠道类型
+        /// 交易类型
         /// </summary>
-        public string ChannelType { get; set; }
+        public string TxnType { get; set; }
 
         /// <summary>
-        /// 后台通知地址
+        /// 交易子类
         /// </summary>
-        public string BackUrl { get; set; }
+        public string TxnSubType { get; set; }
 
         /// <summary>
-        /// 交易金额
+        /// 渠道类型
         /// </summary>
-        public string TxnAmt { get; set; }
+        public string ChannelType { get; set; }
 
         /// <summary>
         /// 商户订单号

+ 2 - 2
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayForm05_6_5_ReversalRequest.cs → src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQrCodePayReversalRequest.cs

@@ -4,9 +4,9 @@ using Essensoft.AspNetCore.Payment.UnionPay.Response;
 namespace Essensoft.AspNetCore.Payment.UnionPay.Request
 {
     /// <summary>
-    /// 冲正
+    /// 二维码支付(V2.2) 冲正
     /// </summary>
-    public class UnionPayForm05_6_5_ReversalRequest : IUnionPayRequest<UnionPayForm05_6_5_ReversalResponse>
+    public class UnionPayQrCodePayReversalRequest : IUnionPayRequest<UnionPayQrCodePayReversalResponse>
     {
         /// <summary>
         /// 产品类型

+ 0 - 105
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayQueryMarketingBalanceRequest.cs

@@ -1,105 +0,0 @@
-using System.Collections.Generic;
-using Essensoft.AspNetCore.Payment.UnionPay.Response;
-
-namespace Essensoft.AspNetCore.Payment.UnionPay.Request
-{
-    /// <summary>
-    /// 营销活动余额查询
-    /// </summary>
-    public class UnionPayQueryMarketingBalanceRequest : IUnionPayRequest<UnionPayQueryMarketingBalanceResponse>
-    {
-        /// <summary>
-        /// 产品类型
-        /// </summary>
-        public string BizType { get; set; }
-
-        /// <summary>
-        /// 订单发送时间
-        /// </summary>
-        public string TxnTime { get; set; }
-
-        /// <summary>
-        /// 交易类型
-        /// </summary>
-        public string TxnType { get; set; }
-
-        /// <summary>
-        /// 交易子类
-        /// </summary>
-        public string TxnSubType { get; set; }
-
-        /// <summary>
-        /// 商户订单号
-        /// </summary>
-        public string OrderId { get; set; }
-
-        /// <summary>
-        /// 营销活动编号
-        /// </summary>
-        public string DiscountId { get; set; }
-
-        /// <summary>
-        /// 商户简称
-        /// </summary>
-        public string MerAbbr { get; set; }
-
-        /// <summary>
-        /// 商户类别
-        /// </summary>
-        public string MerCatCode { get; set; }
-
-        /// <summary>
-        /// 商户名称
-        /// </summary>
-        public string MerName { get; set; }
-
-        /// <summary>
-        /// 收单机构代码
-        /// </summary>
-        public string AcqInsCode { get; set; }
-
-        #region IUnionPayRequest
-
-        private string version = string.Empty;
-
-        public string GetApiVersion()
-        {
-            return version;
-        }
-
-        public void SetApiVersion(string version)
-        {
-            this.version = version;
-        }
-
-        public IDictionary<string, string> GetParameters()
-        {
-            var parameters = new UnionPayDictionary
-            {
-                { "bizType", BizType },
-                { "txnTime", TxnTime },
-                { "txnType", TxnType },
-                { "txnSubType", TxnSubType },
-                { "orderId", OrderId },
-                { "discountId", DiscountId },
-                { "merAbbr", MerAbbr },
-                { "merCatCode", MerCatCode },
-                { "merName", MerName },
-                { "acqInsCode", AcqInsCode }
-            };
-            return parameters;
-        }
-
-        public string GetRequestUrl(bool isTest)
-        {
-            return isTest ? "https://gateway.test.95516.com/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
-        }
-
-        public bool HasEncryptCertId()
-        {
-            return false;
-        }
-
-        #endregion
-    }
-}

+ 159 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayConsumeUndoRequest.cs

@@ -0,0 +1,159 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 消费撤销接口
+    /// </summary>
+    public class UnionPayWapPayConsumeUndoRequest : IUnionPayRequest<UnionPayWapPayConsumeUndoResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "origQryId", OrigQryId },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "acqInsCode", AcqInsCode },
+                { "reserved", Reserved },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://101.231.204.80:5000/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 141 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayEncryptCertUpdateQueryRequest.cs

@@ -0,0 +1,141 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 银联加密公钥更新查询接口
+    /// </summary>
+    public class UnionPayWapPayEncryptCertUpdateQueryRequest : IUnionPayRequest<UnionPayWapPayEncryptCertUpdateQueryResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 证书类型
+        /// </summary>
+        public string CertType { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId  },
+                { "certType", CertType },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "reserved", Reserved },
+                { "acqInsCode", AcqInsCode },
+                { "reqReserved", ReqReserved }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://101.231.204.80:5000/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 87 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayFileTransferRequest.cs

@@ -0,0 +1,87 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 文件传输类交易接口
+    /// </summary>
+    public class UnionPayWapPayFileTransferRequest : IUnionPayRequest<UnionPayWapPayFileTransferResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 清算日期	
+        /// </summary>
+        public string SettleDate { get; set; }
+
+        /// <summary>
+        /// 文件类型	
+        /// </summary>
+        public string FileType { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "settleDate", SettleDate },
+                { "fileType", FileType },
+                { "reqReserved", ReqReserved }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://101.231.204.80:9080/" : "https://filedownload.95516.com/";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

+ 267 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayFrontConsumeRequest.cs

@@ -0,0 +1,267 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 消费接口
+    /// </summary>
+    public class UnionPayWapPayFrontConsumeRequest : IUnionPayRequest<UnionPayWapPayFrontConsumeResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 订单描述
+        /// </summary>
+        public string OrderDesc { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 发卡机构代码
+        /// </summary>
+        public string IssInsCode { get; set; }
+
+        /// <summary>
+        /// 分期付款信息域
+        /// </summary>
+        public string InstalTransInfo { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 有卡交易信息域
+        /// </summary>
+        public string CardTransData { get; set; }
+
+        /// <summary>
+        /// 预付卡通道
+        /// </summary>
+        public string AccountPayChannel { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 账号类型(卡介质)
+        /// </summary>
+        public string AccType { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 持卡人IP
+        /// </summary>
+        public string CustomerIp { get; set; }
+
+        /// <summary>
+        /// 订单接收超时时间
+        /// </summary>
+        public string OrderTimeOut { get; set; }
+
+        /// <summary>
+        /// 分账域
+        /// </summary>
+        public string AccSplitData { get; set; }
+
+        /// <summary>
+        /// 风控信息域
+        /// </summary>
+        public string RiskRateInfo { get; set; }
+
+        /// <summary>
+        /// 控制规则
+        /// </summary>
+        public string CtrlRule { get; set; }
+
+        /// <summary>
+        /// 默认支付方式
+        /// </summary>
+        public string DefaultPayType { get; set; }
+
+        /// <summary>
+        /// 前台通知地址
+        /// </summary>
+        public string FrontUrl { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 失败交易前台跳转地址
+        /// </summary>
+        public string FrontFailUrl { get; set; }
+
+        /// <summary>
+        /// 支持支付方式
+        /// </summary>
+        public string SupPayType { get; set; }
+
+        /// <summary>
+        /// 支付超时时间
+        /// </summary>
+        public string PayTimeOut { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        /// <summary>
+        /// 终端信息域
+        /// </summary>
+        public string UserMac { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "currencyCode", CurrencyCode },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "orderDesc", OrderDesc },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "issInsCode", IssInsCode },
+                { "instalTransInfo", InstalTransInfo },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "acqInsCode", AcqInsCode },
+                { "cardTransData", CardTransData },
+                { "accountPayChannel", AccountPayChannel },
+                { "accNo", AccNo },
+                { "accType", AccType },
+                { "reserved", Reserved },
+                { "customerIp", CustomerIp },
+                { "orderTimeout", OrderTimeOut },
+                { "accSplitData", AccSplitData },
+                { "riskRateInfo", RiskRateInfo },
+                { "ctrlRule", CtrlRule },
+                { "defaultPayType", DefaultPayType },
+                { "frontUrl", FrontUrl },
+                { "reqReserved", ReqReserved },
+                { "frontFailUrl", FrontFailUrl },
+                { "supPayType", SupPayType },
+                { "payTimeout", PayTimeOut },
+                { "termId", TermId },
+                { "userMac", UserMac }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://gateway.test.95516.com/gateway/api/frontTransReq.do" : "https://gateway.95516.com/gateway/api/frontTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return true;
+        }
+
+        #endregion
+    }
+}

+ 243 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayFrontPreauthRequest.cs

@@ -0,0 +1,243 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 预授权接口
+    /// </summary>
+    public class UnionPayWapPayFrontPreauthRequest : IUnionPayRequest<UnionPayWapPayFrontPreauthResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易币种
+        /// </summary>
+        public string CurrencyCode { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 标记化支付信息域
+        /// </summary>
+        public string TokenPayData { get; set; }
+
+        /// <summary>
+        /// 订单描述
+        /// </summary>
+        public string OrderDesc { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 分期付款信息域
+        /// </summary>
+        public string InstalTransInfo { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 银行卡验证信息及身份信息
+        /// </summary>
+        public string CustomerInfo { get; set; }
+
+        /// <summary>
+        /// 有卡交易信息域
+        /// </summary>
+        public string CardTransData { get; set; }
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        public string AccNo { get; set; }
+
+        /// <summary>
+        /// 账号类型(卡介质)
+        /// </summary>
+        public string AccType { get; set; }
+
+        /// <summary>
+        /// 支付卡类型
+        /// </summary>
+        public string PayCardType { get; set; }
+
+        /// <summary>
+        /// 绑定标识号
+        /// </summary>
+        public string BindId { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 持卡人IP
+        /// </summary>
+        public string CustomerIp { get; set; }
+
+        /// <summary>
+        /// 发卡机构代码
+        /// </summary>
+        public string IssInsCode { get; set; }
+
+        /// <summary>
+        /// 风控信息域
+        /// </summary>
+        public string RiskRateInfo { get; set; }
+
+        /// <summary>
+        /// 前台通知地址	
+        /// </summary>
+        public string FrontUrl { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        /// <summary>
+        /// 终端信息域
+        /// </summary>
+        public string UserMac { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "currencyCode", CurrencyCode },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "tokenPayData", TokenPayData },
+                { "orderDesc", OrderDesc },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "instalTransInfo", InstalTransInfo },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "acqInsCode", AcqInsCode },
+                { "customerInfo", CustomerInfo },
+                { "cardTransData", CardTransData },
+                { "accNo", AccNo },
+                { "accType", AccType },
+                { "payCardType", PayCardType },
+                { "bindId", BindId },
+                { "reserved", Reserved },
+                { "customerIp", CustomerIp },
+                { "issInsCode", IssInsCode },
+                { "riskRateInfo", RiskRateInfo },
+                { "frontUrl", FrontUrl },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId },
+                { "userMac", UserMac }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://101.231.204.80:5000/gateway/api/frontTransReq.do" : "https://gateway.95516.com/gateway/api/frontTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return true;
+        }
+
+        #endregion
+    }
+}

+ 159 - 0
src/Essensoft.AspNetCore.Payment.UnionPay/Request/UnionPayWapPayPreauthFinishRequest.cs

@@ -0,0 +1,159 @@
+using System.Collections.Generic;
+using Essensoft.AspNetCore.Payment.UnionPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.UnionPay.Request
+{
+    /// <summary>
+    /// 手机网页支付(V2.2) 预授权完成
+    /// </summary>
+    public class UnionPayWapPayPreauthFinishRequest : IUnionPayRequest<UnionPayWapPayPreauthFinishResponse>
+    {
+        /// <summary>
+        /// 产品类型
+        /// </summary>
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 订单发送时间
+        /// </summary>
+        public string TxnTime { get; set; }
+
+        /// <summary>
+        /// 后台通知地址
+        /// </summary>
+        public string BackUrl { get; set; }
+
+        /// <summary>
+        /// 交易金额
+        /// </summary>
+        public string TxnAmt { get; set; }
+
+        /// <summary>
+        /// 交易类型
+        /// </summary>
+        public string TxnType { get; set; }
+
+        /// <summary>
+        /// 交易子类
+        /// </summary>
+        public string TxnSubType { get; set; }
+
+        /// <summary>
+        /// 渠道类型
+        /// </summary>
+        public string ChannelType { get; set; }
+
+        /// <summary>
+        /// 商户订单号
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 原交易查询流水号
+        /// </summary>
+        public string OrigQryId { get; set; }
+
+        /// <summary>
+        /// 二级商户代码
+        /// </summary>
+        public string SubMerId { get; set; }
+
+        /// <summary>
+        /// 二级商户简称
+        /// </summary>
+        public string SubMerAbbr { get; set; }
+
+        /// <summary>
+        /// 二级商户名称
+        /// </summary>
+        public string SubMerName { get; set; }
+
+        /// <summary>
+        /// 商户简称
+        /// </summary>
+        public string MerAbbr { get; set; }
+
+        /// <summary>
+        /// 商户类别
+        /// </summary>
+        public string MerCatCode { get; set; }
+
+        /// <summary>
+        /// 商户名称
+        /// </summary>
+        public string MerName { get; set; }
+
+        /// <summary>
+        /// 收单机构代码
+        /// </summary>
+        public string AcqInsCode { get; set; }
+
+        /// <summary>
+        /// 保留域
+        /// </summary>
+        public string Reserved { get; set; }
+
+        /// <summary>
+        /// 请求方保留域
+        /// </summary>
+        public string ReqReserved { get; set; }
+
+        /// <summary>
+        /// 终端号
+        /// </summary>
+        public string TermId { get; set; }
+
+        #region IUnionPayRequest
+
+        private string version = string.Empty;
+
+        public string GetApiVersion()
+        {
+            return version;
+        }
+
+        public void SetApiVersion(string version)
+        {
+            this.version = version;
+        }
+
+        public IDictionary<string, string> GetParameters()
+        {
+            var parameters = new UnionPayDictionary
+            {
+                { "bizType", BizType },
+                { "txnTime", TxnTime },
+                { "backUrl", BackUrl },
+                { "txnAmt", TxnAmt },
+                { "txnType", TxnType },
+                { "txnSubType", TxnSubType },
+                { "channelType", ChannelType },
+                { "orderId", OrderId },
+                { "origQryId", OrigQryId },
+                { "subMerId", SubMerId },
+                { "subMerAbbr", SubMerAbbr },
+                { "subMerName", SubMerName },
+                { "merAbbr", MerAbbr },
+                { "merCatCode", MerCatCode },
+                { "merName", MerName },
+                { "acqInsCode", AcqInsCode },
+                { "reserved", Reserved },
+                { "reqReserved", ReqReserved },
+                { "termId", TermId }
+            };
+            return parameters;
+        }
+
+        public string GetRequestUrl(bool isTest)
+        {
+            return isTest ? "https://101.231.204.80:5000/gateway/api/backTransReq.do" : "https://gateway.95516.com/gateway/api/backTransReq.do";
+        }
+
+        public bool HasEncryptCertId()
+        {
+            return false;
+        }
+
+        #endregion
+    }
+}

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно