Bladeren bron

调整 微信支付APIv3-微信支付分 (#110) (#73) (#111)

Roc 4 jaren geleden
bovenliggende
commit
97c536385c
100 gewijzigde bestanden met toevoegingen van 2579 en 2394 verwijderingen
  1. 0 433
      samples/WebApplicationSample/Controllers/WeChatPayScoreController.cs
  2. 0 125
      samples/WebApplicationSample/Controllers/WeChatPayScoreNotifyController.cs
  3. 458 1
      samples/WebApplicationSample/Controllers/WeChatPayV3Controller.cs
  4. 105 1
      samples/WebApplicationSample/Controllers/WeChatPayV3NotifyController.cs
  5. 0 224
      samples/WebApplicationSample/Models/WeChatPayScoreViewModel.cs
  6. 276 0
      samples/WebApplicationSample/Models/WeChatPayV3ViewModel.cs
  7. 1 4
      samples/WebApplicationSample/Views/Shared/_Layout.cshtml
  8. 0 175
      samples/WebApplicationSample/Views/WeChatPayScore/Index.cshtml
  9. 90 0
      samples/WebApplicationSample/Views/WeChatPayV3/Index.cshtml
  10. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/Permissions.cshtml
  11. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/PermissionsQueryForAuthCode.cshtml
  12. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/PermissionsQueryForOpenId.cshtml
  13. 7 3
      samples/WebApplicationSample/Views/WeChatPayV3/PermissionsTerminateForAuthCode.cshtml
  14. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/PermissionsTerminateForOpenId.cshtml
  15. 9 5
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrder.cshtml
  16. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderCancel.cshtml
  17. 7 3
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderComplete.cshtml
  18. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderDirectComplete.cshtml
  19. 7 3
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderModify.cshtml
  20. 7 3
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderPay.cshtml
  21. 8 6
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderQuery.cshtml
  22. 8 4
      samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderSync.cshtml
  23. 0 4
      samples/WebApplicationSample/appsettings.Development.json
  24. 0 4
      samples/WebApplicationSample/appsettings.json
  25. 6 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/Essensoft.AspNetCore.Payment.WeChatPay.csproj
  26. 0 42
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/GoodsDetail.cs
  27. 0 35
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/Location.cs
  28. 0 17
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/ModifyPostDiscount.cs
  29. 0 42
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/PostDiscount.cs
  30. 0 52
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/PostPayment.cs
  31. 0 101
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/PromotionDetail.cs
  32. 0 71
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/TimeRange.cs
  33. 0 27
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreModelBase.cs
  34. 0 21
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsQueryForAuthCodeModel.cs
  35. 0 27
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsQueryForOpenIdModel.cs
  36. 0 40
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsTerminateForOpenIdModel.cs
  37. 0 21
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderCancelModel.cs
  38. 0 10
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderPayModel.cs
  39. 0 32
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderQueryModel.cs
  40. 0 30
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderSyncModel.cs
  41. 0 11
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Notify/WeChatPayScoreServiceOrderConfirmNotify.cs
  42. 0 29
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Notify/WeChatPayScoreServiceOrderPaidNotify.cs
  43. 0 37
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsQueryForAuthCodeRequest.cs
  44. 0 35
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsQueryForOpenIdRequest.cs
  45. 0 29
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsRequest.cs
  46. 0 34
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsTerminateForAuthCodeRequest.cs
  47. 0 34
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsTerminateForOpenIdRequest.cs
  48. 0 31
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderCancelRequest.cs
  49. 0 31
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderCompleteRequest.cs
  50. 0 31
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderModifyRequest.cs
  51. 0 31
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderPayRequest.cs
  52. 0 29
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderQueryRequest.cs
  53. 0 29
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderRequest.cs
  54. 0 34
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderSyncRequest.cs
  55. 0 13
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScorePermissionsTerminateForAuthCodeResponse.cs
  56. 0 13
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScorePermissionsTerminateForOpenIdResponse.cs
  57. 0 32
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreResponseBase.cs
  58. 0 21
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreServiceOrderCancelResponse.cs
  59. 0 125
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreServiceOrderCompleteResponse.cs
  60. 0 21
      src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreServiceOrderPayResponse.cs
  61. 12 6
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/Collection.cs
  62. 10 4
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/CollectionDetail.cs
  63. 45 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/Location.cs
  64. 62 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PostDiscount.cs
  65. 61 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PostPayment.cs
  66. 8 4
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PromotionDetail.cs
  67. 8 4
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PromotionGoodsDetail.cs
  68. 11 1
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/RiskFund.cs
  69. 5 2
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/SyncDetail.cs
  70. 85 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/TimeRange.cs
  71. 22 19
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsBodyModel.cs
  72. 23 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsQueryForAuthCodeQueryModel.cs
  73. 33 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsQueryForOpenIdQueryModel.cs
  74. 8 6
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsTerminateForAuthCodeBodyModel.cs
  75. 43 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsTerminateForOpenIdBodyModel.cs
  76. 42 10
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderBodyModel.cs
  77. 46 15
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderDirectCompleteBodyModel.cs
  78. 44 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderOutOrderNoCancelBodyModel.cs
  79. 42 10
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderOutOrderNoCompleteBodyModel.cs
  80. 28 5
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderOutOrderNoModifyBodyModel.cs
  81. 33 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderPayBodyModel.cs
  82. 52 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderQueryModel.cs
  83. 54 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderSyncBodyModel.cs
  84. 0 1
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/IWeChatPayPostRequest.cs
  85. 79 48
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Notify/WeChatPayScoreUserConfirmNotify.cs
  86. 25 8
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Notify/WeChatPayScoreUserOpenOrCloseNotify.cs
  87. 208 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Notify/WeChatPayScoreUserPaidNotify.cs
  88. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsQueryForAuthCodeRequest.cs
  89. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsQueryForOpenIdRequest.cs
  90. 30 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsRequest.cs
  91. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsTerminateForAuthCodeRequest.cs
  92. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsTerminateForOpenIdRequest.cs
  93. 12 11
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderDirectCompleteRequest.cs
  94. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderOutOrderNoCancelRequest.cs
  95. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderOutOrderNoCompleteRequest.cs
  96. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderOutOrderNoModifyRequest.cs
  97. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderPayRequest.cs
  98. 30 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderQueryRequest.cs
  99. 30 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderRequest.cs
  100. 39 0
      src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderSyncRequest.cs

+ 0 - 433
samples/WebApplicationSample/Controllers/WeChatPayScoreController.cs

@@ -1,433 +0,0 @@
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Essensoft.AspNetCore.Payment.WeChatPay;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using WebApplicationSample.Models;
-
-namespace WebApplicationSample.Controllers
-{
-    public class WeChatPayScoreController : Controller
-    {
-        private readonly IWeChatPayClient _client;
-        private readonly IOptions<WeChatPayOptions> _optionsAccessor;
-
-        public WeChatPayScoreController(IWeChatPayClient client, IOptions<WeChatPayOptions> optionsAccessor)
-        {
-            _client = client;
-            _optionsAccessor = optionsAccessor;
-        }
-
-        public IActionResult Index()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 创建支付分订单
-        /// </summary>
-        public IActionResult ServiceOrder()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 创建支付分订单
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrder(WeChatPayScoreServiceOrderViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                OutOrderNo = viewModel.OutOrderNo,
-                ServiceIntroduction = viewModel.ServiceIntroduction,
-                TimeRange = new TimeRange {
-                    StartTime = viewModel.StartTime,
-                    EndTime = viewModel.EndTime
-                },
-                RiskFund = new RiskFund {
-                    Name = viewModel.RiskFundName,
-                    Amount = viewModel.RiskFundAmount
-                },
-                NotifyUrl = viewModel.NotifyUrl,
-                OpenId = viewModel.OpenId
-            };
-            var request = new WeChatPayScoreServiceOrderRequest();
-            request.SetBodyModel(model);
-            var response =await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 查询支付分订单
-        /// </summary>
-        public IActionResult ServiceOrderQuery()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 查询支付分订单
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderQuery(WeChatPayScoreServiceOrderQueryViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderQueryModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                OutOrderNo = viewModel.OutOrderNo,
-                QueryId = viewModel.QueryId
-            };
-            var request = new WeChatPayScoreServiceOrderQueryRequest();
-            request.SetQueryModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 取消支付分订单
-        /// </summary>
-        public IActionResult ServiceOrderCancel()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 取消支付分订单
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderCancel(WeChatPayScoreServiceOrderCancelViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderCancelModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                Reason = viewModel.Reason
-            };
-            var request = new WeChatPayScoreServiceOrderCancelRequest();
-            request.OutOrderNo = viewModel.OutOrderNo;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request,_optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 修改支付分订单金额
-        /// </summary>
-        public IActionResult ServiceOrderModify()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 修改支付分订单金额
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderModify(WeChatPayScoreServiceOrderModifyViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderModifyModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,                
-                PostPayments = new List<PostPayment> {
-                   new PostPayment{
-                       Name = viewModel.Name,
-                       Amount = viewModel.Amount,
-                       Count = viewModel.Count
-                   }
-                },
-                TotalAmount = viewModel.TotalAmount,
-                Reason = viewModel.Reason
-            };
-            var request = new WeChatPayScoreServiceOrderModifyRequest();
-            request.OutOrderNo = viewModel.OutOrderNo;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 完结支付分订单
-        /// </summary>
-        public IActionResult ServiceOrderComplete()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 完结支付分订单
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderComplete(WeChatPayScoreServiceOrderCompleteViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderCompleteModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                PostPayments = new List<PostPayment> {
-                   new PostPayment{
-                       Name = viewModel.Name,
-                       Amount = viewModel.Amount,
-                       Count = viewModel.Count
-                   }
-                },
-                TotalAmount = viewModel.TotalAmount
-            };
-            var request = new WeChatPayScoreServiceOrderCompleteRequest();
-            request.OutOrderNo = viewModel.OutOrderNo;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 商户发起催收扣款
-        /// </summary>
-        public IActionResult ServiceOrderPay()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 商户发起催收扣款
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderPay(WeChatPayScoreServiceOrderPayViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderPayModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId
-            };
-            var request = new WeChatPayScoreServiceOrderPayRequest();
-            request.OutOrderNo = viewModel.OutOrderNo;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 同步服务订单信息
-        /// </summary>
-        public IActionResult ServiceOrderSync()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 同步服务订单信息
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderSync(WeChatPayScoreServiceOrderSyncViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderSyncModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                Type = viewModel.Type,
-                Detail = new SyncDetail {
-                    PaidTime = viewModel.PaidTime
-                }
-            };
-            var request = new WeChatPayScoreServiceOrderSyncRequest();
-            request.OutOrderNo = viewModel.OutOrderNo;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 创单结单合并
-        /// </summary>
-        public IActionResult ServiceOrderDirectComplete()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 创单结单合并
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderDirectComplete(WeChatPayScoreServiceOrderDirectCompleteViewModel viewModel)
-        {
-            var model = new WeChatPayScoreServiceOrderDirectCompleteModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                OutOrderNo = viewModel.OutOrderNo,
-                ServiceIntroduction = viewModel.ServiceIntroduction,
-                PostPayments = new List<PostPayment> {
-                   new PostPayment{
-                       Name = viewModel.PostPaymentName,
-                       Amount = viewModel.PostPaymentAmount,
-                       Description = viewModel.PostPaymentDescription,
-                       Count = viewModel.PostPaymentCount
-                   }
-                },
-                TimeRange = new TimeRange
-                {
-                    StartTime = viewModel.StartTime,
-                    EndTime = viewModel.EndTime
-                },
-                TotalAmount = viewModel.TotalAmount,
-                NotifyUrl = viewModel.NotifyUrl,
-                OpenId = viewModel.OpenId
-            };
-            var request = new WeChatPayScoreServiceOrderDirectCompleteRequest();
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 商户预授权
-        /// </summary>
-        public IActionResult Permissions()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 商户预授权
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> Permissions(PermissionsViewModel viewModel)
-        {
-            var model = new WeChatPayScorePermissionsModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                AuthorizationCode = viewModel.AuthorizationCode,
-                NotifyUrl = viewModel.NotifyUrl
-            };
-            var request = new WeChatPayScorePermissionsRequest();
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 支付分-查询用户授权记录(授权协议号)
-        /// </summary>
-        public IActionResult PermissionsQueryForAuthCode()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 支付分-查询用户授权记录(授权协议号)
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> PermissionsQueryForAuthCode(PermissionsQueryForAuthCodeViewModel viewModel)
-        {
-            var model = new WeChatPayScorePermissionsQueryForAuthCodeModel
-            {
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId
-            };
-            
-            var request = new WeChatPayScorePermissionsQueryForAuthCodeRequest();
-            request.AuthorizationCode = viewModel.AuthorizationCode;
-            request.SetQueryModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 解除用户授权关系(授权协议号)
-        /// </summary>
-        public IActionResult PermissionsTerminateForAuthCode()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 解除用户授权关系(授权协议号)
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> PermissionsTerminateForAuthCode(PermissionsTerminateForAuthCodeViewModel viewModel)
-        {
-            var model = new WeChatPayScorePermissionsTerminateForAuthCodeModel
-            {                
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                Reason  = viewModel.Reason
-            };
-            var request = new WeChatPayScorePermissionsTerminateForAuthCodeRequest();
-            request.AuthorizationCode = viewModel.AuthorizationCode;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 支付分-查询用户授权记录(openid)
-        /// </summary>
-        public IActionResult PermissionsQueryForOpenId()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 支付分-查询用户授权记录(openid)
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> PermissionsQueryForOpenId(PermissionsQueryForOpenIdViewModel viewModel)
-        {
-            var model = new WeChatPayScorePermissionsQueryForOpenIdModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId
-            };
-            var request = new WeChatPayScorePermissionsQueryForOpenIdRequest();
-            request.OpenId = viewModel.OpenId;
-            request.SetQueryModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-
-        /// <summary>
-        /// 解除用户授权关系(OpenId)
-        /// </summary>
-        public IActionResult PermissionsTerminateForOpenId()
-        {
-            return View();
-        }
-
-        /// <summary>
-        /// 解除用户授权关系(OpenId)
-        /// </summary>
-        [HttpPost]
-        public async Task<IActionResult> PermissionsTerminateForOpenId(PermissionsTerminateForOpenIdViewModel viewModel)
-        {
-            var model = new WeChatPayScorePermissionsTerminateForOpenIdModel
-            {
-                AppId = _optionsAccessor.Value.AppId,
-                ServiceId = _optionsAccessor.Value.PayScoreServiceId,
-                Reason = viewModel.Reason
-            };
-            var request = new WeChatPayScorePermissionsTerminateForOpenIdRequest();
-            request.OpenId = viewModel.OpenID;
-            request.SetBodyModel(model);
-            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
-            ViewData["response"] = response.Body;
-            return View();
-        }
-    }
-}

+ 0 - 125
samples/WebApplicationSample/Controllers/WeChatPayScoreNotifyController.cs

@@ -1,125 +0,0 @@
-using System;
-using System.Threading.Tasks;
-using Essensoft.AspNetCore.Payment.WeChatPay;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-
-namespace WebApplicationSample.Controllers
-{
-    [Route("wechatpay/score/notify")]
-    public class WeChatPayScoreNotifyController : Controller
-    {
-        private readonly IWeChatPayNotifyClient _client;
-        private readonly IOptions<WeChatPayOptions> _optionsAccessor;
-
-        public WeChatPayScoreNotifyController(IWeChatPayNotifyClient client, IOptions<WeChatPayOptions> optionsAccessor)
-        {
-            _client = client;
-            _optionsAccessor = optionsAccessor;
-        }
-
-        /// <summary>
-        /// 开启/解除授权服务回调通知
-        /// </summary>
-        [Route("Permissions")]
-        [HttpPost]
-        public async Task<IActionResult> Permissions()
-        {
-            try
-            {
-                var notify = await _client.ExecuteAsync<WeChatPayScorePermissionsOpenOrCancelNotify>(Request, _optionsAccessor.Value);
-                if (notify.UserServiceStatus == WeChatPayScoreUserServiceStatus.Opened ||
-                    notify.UserServiceStatus == WeChatPayScoreUserServiceStatus.Closed)
-                {
-                    Console.WriteLine("Permissions body: " + notify.Body);
-                    return WeChatPayNotifyResult.Success;
-                }
-
-                return WeChatPayNotifyResult.Failure;
-            }
-            catch (WeChatPayException ex)
-            {
-                Console.WriteLine("出现异常: " + ex.Message);
-                return WeChatPayNotifyResult.Failure;
-            }
-        }
-
-        /// <summary>
-        /// 确认订单回调通知
-        /// </summary>
-        [Route("orderconfirm")]
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderConfirm()
-        {
-            try
-            {
-                var notify = await _client.ExecuteAsync<WeChatPayScoreServiceOrderConfirmNotify>(Request, _optionsAccessor.Value);
-                if (notify.State == ServiceOrderState.Doing)
-                {
-                    Console.WriteLine("ServiceOrderConfirm body: " + notify.Body);
-                    return WeChatPayNotifyResult.Success;
-                }
-
-                return WeChatPayNotifyResult.Failure;
-            }
-            catch (WeChatPayException ex)
-            {
-                Console.WriteLine("出现异常: " + ex.Message);
-                return WeChatPayNotifyResult.Failure;
-            }
-        }
-
-        /// <summary>
-        /// 订单支付成功回调通知
-        /// </summary>
-        [Route("orderpaid")]
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderPaid()
-        {
-            try
-            {
-                var notify = await _client.ExecuteAsync<WeChatPayScoreServiceOrderPaidNotify>(Request, _optionsAccessor.Value);
-                if (notify.State == ServiceOrderState.Done)
-                {
-                    Console.WriteLine("ServiceOrderPaid body: " + notify.Body);
-                    return WeChatPayNotifyResult.Success;
-                }
-
-                return WeChatPayNotifyResult.Failure;
-            }
-            catch (WeChatPayException ex)
-            {
-                Console.WriteLine("出现异常: " + ex.Message);
-                return WeChatPayNotifyResult.Failure;
-            }
-        }
-
-        /// <summary>
-        /// 订单 确认 或 支付成功 回调通知
-        /// </summary>
-        [Route("confirmorpaid")]
-        [HttpPost]
-        public async Task<IActionResult> ServiceOrderConfirmOrPaid()
-        {
-            try
-            {
-                var notify = await _client.ExecuteAsync<WeChatPayScoreServiceOrderPaidNotify>(Request, _optionsAccessor.Value);
-                if (notify.State == ServiceOrderState.Doing || notify.State == ServiceOrderState.Done)
-                {
-                    Console.WriteLine("ServiceOrderConfirmOrPaid body: " + notify.Body);
-                    return WeChatPayNotifyResult.Success;
-                }
-
-                return WeChatPayNotifyResult.Failure;
-            }
-            catch (WeChatPayException ex)
-            {
-                Console.WriteLine("出现异常: " + ex.Message);
-                return WeChatPayNotifyResult.Failure;
-            }
-        }
-    }
-}

+ 458 - 1
samples/WebApplicationSample/Controllers/WeChatPayV3Controller.cs

@@ -1,4 +1,5 @@
-using System.Text.Json;
+using System.Collections.Generic;
+using System.Text.Json;
 using System.Threading.Tasks;
 using Essensoft.AspNetCore.Payment.WeChatPay;
 using Essensoft.AspNetCore.Payment.WeChatPay.V3;
@@ -473,5 +474,461 @@ namespace WebApplicationSample.Controllers
             ViewData["response"] = response.Body;
             return View();
         }
+
+        #region 微信支付分
+
+        /// <summary>
+        /// 支付分-创建支付分订单
+        /// </summary>
+        public IActionResult ServiceOrder()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-创建支付分订单
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrder(WeChatPayScoreServiceOrderViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                OutOrderNo = viewModel.OutOrderNo,
+                ServiceIntroduction = viewModel.ServiceIntroduction,
+                TimeRange = new TimeRange
+                {
+                    StartTime = viewModel.StartTime,
+                    EndTime = viewModel.EndTime
+                },
+                RiskFund = new RiskFund
+                {
+                    Name = viewModel.RiskFundName,
+                    Amount = viewModel.RiskFundAmount
+                },
+                NotifyUrl = viewModel.NotifyUrl,
+                OpenId = viewModel.OpenId
+            };
+
+            var request = new WeChatPayScoreServiceOrderRequest();
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-查询支付分订单
+        /// </summary>
+        public IActionResult ServiceOrderQuery()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-查询支付分订单
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderQuery(WeChatPayScoreServiceOrderQueryViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderQueryModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                OutOrderNo = viewModel.OutOrderNo,
+                QueryId = viewModel.QueryId
+            };
+
+            var request = new WeChatPayScoreServiceOrderQueryRequest();
+            request.SetQueryModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-取消支付分订单
+        /// </summary>
+        public IActionResult ServiceOrderCancel()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-取消支付分订单
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderCancel(WeChatPayScoreServiceOrderCancelViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderOutOrderNoCancelBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                Reason = viewModel.Reason
+            };
+
+            var request = new WeChatPayScoreServiceOrderOutOrderNoCancelRequest
+            {
+                OutOrderNo = viewModel.OutOrderNo
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-修改支付分订单金额
+        /// </summary>
+        public IActionResult ServiceOrderModify()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-修改支付分订单金额
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderModify(WeChatPayScoreServiceOrderModifyViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderOutOrderNoModifyBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                PostPayments = new List<PostPayment> {
+                   new PostPayment{
+                       Name = viewModel.Name,
+                       Amount = viewModel.Amount,
+                       Count = viewModel.Count
+                   }
+                },
+                TotalAmount = viewModel.TotalAmount,
+                Reason = viewModel.Reason
+            };
+
+            var request = new WeChatPayScoreServiceOrderOutOrderNoModifyRequest
+            {
+                OutOrderNo = viewModel.OutOrderNo
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-完结支付分订单
+        /// </summary>
+        public IActionResult ServiceOrderComplete()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-完结支付分订单
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderComplete(WeChatPayScoreServiceOrderCompleteViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderOutOrderNoCompleteBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                PostPayments = new List<PostPayment>
+                {
+                   new PostPayment
+                   {
+                       Name = viewModel.Name,
+                       Amount = viewModel.Amount,
+                       Count = viewModel.Count
+                   }
+                },
+                TotalAmount = viewModel.TotalAmount
+            };
+
+            var request = new WeChatPayScoreServiceOrderOutOrderNoCompleteRequest
+            {
+                OutOrderNo = viewModel.OutOrderNo
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-商户发起催收扣款
+        /// </summary>
+        public IActionResult ServiceOrderPay()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-商户发起催收扣款
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderPay(WeChatPayScoreServiceOrderPayViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderPayBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+            };
+
+            var request = new WeChatPayScoreServiceOrderPayRequest
+            {
+                OutOrderNo = viewModel.OutOrderNo
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-同步服务订单信息
+        /// </summary>
+        public IActionResult ServiceOrderSync()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-同步服务订单信息
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderSync(WeChatPayScoreServiceOrderSyncViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderSyncBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                Type = viewModel.Type,
+                Detail = new SyncDetail
+                {
+                    PaidTime = viewModel.PaidTime
+                }
+            };
+
+            var request = new WeChatPayScoreServiceOrderSyncRequest
+            {
+                OutOrderNo = viewModel.OutOrderNo
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-创单结单合并
+        /// </summary>
+        public IActionResult ServiceOrderDirectComplete()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-创单结单合并
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> ServiceOrderDirectComplete(WeChatPayScoreServiceOrderDirectCompleteViewModel viewModel)
+        {
+            var model = new WeChatPayScoreServiceOrderDirectCompleteBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                OutOrderNo = viewModel.OutOrderNo,
+                ServiceIntroduction = viewModel.ServiceIntroduction,
+                PostPayments = new List<PostPayment> {
+                   new PostPayment{
+                       Name = viewModel.PostPaymentName,
+                       Amount = viewModel.PostPaymentAmount,
+                       Description = viewModel.PostPaymentDescription,
+                       Count = viewModel.PostPaymentCount
+                   }
+                },
+                TimeRange = new TimeRange
+                {
+                    StartTime = viewModel.StartTime,
+                    EndTime = viewModel.EndTime
+                },
+                TotalAmount = viewModel.TotalAmount,
+                NotifyUrl = viewModel.NotifyUrl,
+                OpenId = viewModel.OpenId
+            };
+
+            var request = new WeChatPayScoreServiceOrderDirectCompleteRequest();
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-商户预授权
+        /// </summary>
+        public IActionResult Permissions()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-商户预授权
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> Permissions(PermissionsViewModel viewModel)
+        {
+            var model = new WeChatPayScorePermissionsBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                AuthorizationCode = viewModel.AuthorizationCode,
+                NotifyUrl = viewModel.NotifyUrl
+            };
+
+            var request = new WeChatPayScorePermissionsRequest();
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-查询用户授权记录(授权协议号)
+        /// </summary>
+        public IActionResult PermissionsQueryForAuthCode()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-查询用户授权记录(授权协议号)
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> PermissionsQueryForAuthCode(PermissionsQueryForAuthCodeViewModel viewModel)
+        {
+            var model = new WeChatPayScorePermissionsQueryForAuthCodeQueryModel
+            {
+                ServiceId = viewModel.ServiceId,
+            };
+
+            var request = new WeChatPayScorePermissionsQueryForAuthCodeRequest
+            {
+                AuthorizationCode = viewModel.AuthorizationCode
+            };
+            request.SetQueryModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-解除用户授权关系(授权协议号)
+        /// </summary>
+        public IActionResult PermissionsTerminateForAuthCode()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-解除用户授权关系(授权协议号)
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> PermissionsTerminateForAuthCode(PermissionsTerminateForAuthCodeViewModel viewModel)
+        {
+            var model = new WeChatPayScorePermissionsTerminateForAuthCodeBodyModel
+            {
+                ServiceId = viewModel.ServiceId,
+                Reason = viewModel.Reason
+            };
+
+            var request = new WeChatPayScorePermissionsTerminateForAuthCodeRequest
+            {
+                AuthorizationCode = viewModel.AuthorizationCode
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-查询用户授权记录(openid)
+        /// </summary>
+        public IActionResult PermissionsQueryForOpenId()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-查询用户授权记录(openid)
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> PermissionsQueryForOpenId(PermissionsQueryForOpenIdViewModel viewModel)
+        {
+            var model = new WeChatPayScorePermissionsQueryForOpenIdQueryModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+            };
+
+            var request = new WeChatPayScorePermissionsQueryForOpenIdRequest
+            {
+                OpenId = viewModel.OpenId
+            };
+            request.SetQueryModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-解除用户授权关系(OpenId)
+        /// </summary>
+        public IActionResult PermissionsTerminateForOpenId()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 支付分-解除用户授权关系(OpenId)
+        /// </summary>
+        [HttpPost]
+        public async Task<IActionResult> PermissionsTerminateForOpenId(PermissionsTerminateForOpenIdViewModel viewModel)
+        {
+            var model = new WeChatPayScorePermissionsTerminateForOpenIdBodyModel
+            {
+                AppId = _optionsAccessor.Value.AppId,
+                ServiceId = viewModel.ServiceId,
+                Reason = viewModel.Reason
+            };
+
+            var request = new WeChatPayScorePermissionsTerminateForOpenIdRequest
+            {
+                OpenId = viewModel.OpenId
+            };
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+            ViewData["response"] = response.Body;
+            return View();
+        }
+
+        #endregion
     }
 }

+ 105 - 1
samples/WebApplicationSample/Controllers/WeChatPayV3NotifyController.cs

@@ -45,7 +45,6 @@ namespace WebApplicationSample.Controllers
             }
         }
 
-
         /// <summary>
         /// 退款结果通知
         /// </summary>
@@ -70,5 +69,110 @@ namespace WebApplicationSample.Controllers
                 return WeChatPayNotifyResult.Failure;
             }
         }
+
+        #region 微信支付分
+
+        /// <summary>
+        /// 开启/解除授权服务回调通知
+        /// </summary>
+        [Route("score/permissions")]
+        [HttpPost]
+        public async Task<IActionResult> Permissions()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<WeChatPayScoreUserOpenOrCloseNotify>(Request, _optionsAccessor.Value);
+                if (notify.UserServiceStatus == WeChatPayScoreUserServiceStatus.Opened ||
+                    notify.UserServiceStatus == WeChatPayScoreUserServiceStatus.Closed)
+                {
+                    Console.WriteLine("Permissions body: " + notify.Body);
+                    return WeChatPayNotifyResult.Success;
+                }
+
+                return WeChatPayNotifyResult.Failure;
+            }
+            catch (WeChatPayException ex)
+            {
+                Console.WriteLine("出现异常: " + ex.Message);
+                return WeChatPayNotifyResult.Failure;
+            }
+        }
+
+        /// <summary>
+        /// 确认订单回调通知
+        /// </summary>
+        [Route("score/orderconfirm")]
+        [HttpPost]
+        public async Task<IActionResult>OrderConfirm()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<WeChatPayScoreUserConfirmNotify>(Request, _optionsAccessor.Value);
+                if (notify.State == WeChatPayServiceOrderState.Doing)
+                {
+                    Console.WriteLine("ServiceOrderConfirm body: " + notify.Body);
+                    return WeChatPayNotifyResult.Success;
+                }
+
+                return WeChatPayNotifyResult.Failure;
+            }
+            catch (WeChatPayException ex)
+            {
+                Console.WriteLine("出现异常: " + ex.Message);
+                return WeChatPayNotifyResult.Failure;
+            }
+        }
+
+        /// <summary>
+        /// 订单支付成功回调通知
+        /// </summary>
+        [Route("score/orderpaid")]
+        [HttpPost]
+        public async Task<IActionResult> OrderPaid()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<WeChatPayScoreUserPaidNotify>(Request, _optionsAccessor.Value);
+                if (notify.State == WeChatPayServiceOrderState.Done)
+                {
+                    Console.WriteLine("ServiceOrderPaid body: " + notify.Body);
+                    return WeChatPayNotifyResult.Success;
+                }
+
+                return WeChatPayNotifyResult.Failure;
+            }
+            catch (WeChatPayException ex)
+            {
+                Console.WriteLine("出现异常: " + ex.Message);
+                return WeChatPayNotifyResult.Failure;
+            }
+        }
+
+        /// <summary>
+        /// 订单确认 或 支付成功 回调通知
+        /// </summary>
+        [Route("score/confirmorpaid")]
+        [HttpPost]
+        public async Task<IActionResult> OrderConfirmOrPaid()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<WeChatPayScoreUserPaidNotify>(Request, _optionsAccessor.Value);
+                if (notify.State == WeChatPayServiceOrderState.Doing || notify.State == WeChatPayServiceOrderState.Done)
+                {
+                    Console.WriteLine("ServiceOrderConfirmOrPaid body: " + notify.Body);
+                    return WeChatPayNotifyResult.Success;
+                }
+
+                return WeChatPayNotifyResult.Failure;
+            }
+            catch (WeChatPayException ex)
+            {
+                Console.WriteLine("出现异常: " + ex.Message);
+                return WeChatPayNotifyResult.Failure;
+            }
+        }
+
+        #endregion
     }
 }

+ 0 - 224
samples/WebApplicationSample/Models/WeChatPayScoreViewModel.cs

@@ -1,224 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace WebApplicationSample.Models
-{
-    public class WeChatPayScoreServiceOrderViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Required]
-        [Display(Name = "service_introduction")]
-        public string ServiceIntroduction { get; set; }
-
-        [Required]
-        [Display(Name = "start_time")]
-        public string StartTime { get; set; }
-
-        [Required]
-        [Display(Name = "end_time")]
-        public string EndTime { get; set; }
-
-        [Required]
-        [Display(Name = "risk_fund_name")]
-        public string RiskFundName { get; set; }
-
-        [Required]
-        [Display(Name = "risk_fund_amount")]
-        public long RiskFundAmount { get; set; }
-
-        [Required]
-        [Display(Name = "notify_url")]
-        public string NotifyUrl { get; set; }
-
-        [Display(Name = "openid")]
-        public string OpenId { get; set; }
-    }
-
-    public class WeChatPayScoreServiceOrderQueryViewModel
-    {
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Display(Name = "query_id")]
-        public string QueryId { get; set; }
-
-    }
-
-    public class WeChatPayScoreServiceOrderCancelViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Required]
-        [Display(Name = "reason")]
-        public string Reason { get; set; }
-    }
-
-    public class WeChatPayScoreServiceOrderModifyViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_name")]
-        public string Name { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_amount")]
-        public long Amount { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_count")]
-        public uint Count { get; set; }
-
-        [Required]
-        [Display(Name = "total_amount")]
-        public long TotalAmount { get; set; }
-
-        [Required]
-        [Display(Name = "reason")]
-        public string Reason { get; set; }
-    }
-
-    public class WeChatPayScoreServiceOrderCompleteViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_name")]
-        public string Name { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_amount")]
-        public long Amount { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_count")]
-        public uint Count { get; set; }
-
-        [Required]
-        [Display(Name = "total_amount")]
-        public long TotalAmount { get; set; }
-    }
-
-    public class WeChatPayScoreServiceOrderPayViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-    }
-
-    public class WeChatPayScoreServiceOrderSyncViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Required]
-        [Display(Name = "type")]
-        public string Type { get; set; }
-
-        [Required]
-        [Display(Name = "paid_time")]
-        public string PaidTime { get; set; }
-    }
-
-
-    public class WeChatPayScoreServiceOrderDirectCompleteViewModel
-    {
-        [Required]
-        [Display(Name = "out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        [Required]
-        [Display(Name = "service_introduction")]
-        public string ServiceIntroduction { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_name")]
-        public string PostPaymentName { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_amount")]
-        public long PostPaymentAmount { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_count")]
-        public uint PostPaymentCount { get; set; }
-
-        [Required]
-        [Display(Name = "post_payment_description")]
-        public string PostPaymentDescription { get; set; }
-
-
-        [Required]
-        [Display(Name = "start_time")]
-        public string StartTime { get; set; }
-
-        [Required]
-        [Display(Name = "end_time")]
-        public string EndTime { get; set; }
-
-        [Required]
-        [Display(Name = "total_amount")]
-        public long TotalAmount { get; set; }
-                
-        [Display(Name = "notify_url")]
-        public string NotifyUrl { get; set; }
-
-        [Display(Name = "openid")]
-        public string OpenId { get; set; }
-    }
-
-    public class PermissionsViewModel
-    {
-        [Required]
-        [Display(Name = "authorization_code")]
-        public string AuthorizationCode { get; set; }
-
-        [Display(Name = "notify_url")]
-        public string NotifyUrl { get; set; }
-    }
-
-    public class PermissionsQueryForAuthCodeViewModel
-    {
-        [Required]
-        [Display(Name = "authorization_code")]
-        public string AuthorizationCode { get; set; }
-    }
-
-    public class PermissionsTerminateForAuthCodeViewModel
-    {
-        [Required]
-        [Display(Name = "authorization_code")]
-        public string AuthorizationCode { get; set; }
-
-        [Required]
-        [Display(Name = "reason")]
-        public string Reason { get; set; }
-    }
-
-    public class PermissionsQueryForOpenIdViewModel
-    {
-        [Required]
-        [Display(Name = "openid")]
-        public string OpenId { get; set; }
-    }
-
-    public class PermissionsTerminateForOpenIdViewModel
-    {
-        [Required]
-        [Display(Name = "openid")]
-        public string OpenID { get; set; }
-
-        [Required]
-        [Display(Name = "reason")]
-        public string Reason { get; set; }
-    }
-}

+ 276 - 0
samples/WebApplicationSample/Models/WeChatPayV3ViewModel.cs

@@ -123,4 +123,280 @@ namespace WebApplicationSample.Models
         [Display(Name = "download_url")]
         public string DownloadUrl { get; set; }
     }
+
+    #region 微信支付分
+
+    public class WeChatPayScoreServiceOrderViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Required]
+        [Display(Name = "service_introduction")]
+        public string ServiceIntroduction { get; set; }
+
+        [Required]
+        [Display(Name = "start_time")]
+        public string StartTime { get; set; }
+
+        [Required]
+        [Display(Name = "end_time")]
+        public string EndTime { get; set; }
+
+        [Required]
+        [Display(Name = "risk_fund_name")]
+        public string RiskFundName { get; set; }
+
+        [Required]
+        [Display(Name = "risk_fund_amount")]
+        public long RiskFundAmount { get; set; }
+
+        [Required]
+        [Display(Name = "notify_url")]
+        public string NotifyUrl { get; set; }
+
+        [Display(Name = "openid")]
+        public string OpenId { get; set; }
+    }
+
+    public class WeChatPayScoreServiceOrderQueryViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Display(Name = "query_id")]
+        public string QueryId { get; set; }
+
+    }
+
+    public class WeChatPayScoreServiceOrderCancelViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Required]
+        [Display(Name = "reason")]
+        public string Reason { get; set; }
+    }
+
+    public class WeChatPayScoreServiceOrderModifyViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_name")]
+        public string Name { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_amount")]
+        public long Amount { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_count")]
+        public uint Count { get; set; }
+
+        [Required]
+        [Display(Name = "total_amount")]
+        public long TotalAmount { get; set; }
+
+        [Required]
+        [Display(Name = "reason")]
+        public string Reason { get; set; }
+    }
+
+    public class WeChatPayScoreServiceOrderCompleteViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_name")]
+        public string Name { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_amount")]
+        public long Amount { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_count")]
+        public uint Count { get; set; }
+
+        [Required]
+        [Display(Name = "total_amount")]
+        public long TotalAmount { get; set; }
+    }
+
+    public class WeChatPayScoreServiceOrderPayViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+    }
+
+    public class WeChatPayScoreServiceOrderSyncViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Required]
+        [Display(Name = "type")]
+        public string Type { get; set; }
+
+        [Required]
+        [Display(Name = "paid_time")]
+        public string PaidTime { get; set; }
+    }
+
+
+    public class WeChatPayScoreServiceOrderDirectCompleteViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        [Required]
+        [Display(Name = "service_introduction")]
+        public string ServiceIntroduction { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_name")]
+        public string PostPaymentName { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_amount")]
+        public long PostPaymentAmount { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_count")]
+        public uint PostPaymentCount { get; set; }
+
+        [Required]
+        [Display(Name = "post_payment_description")]
+        public string PostPaymentDescription { get; set; }
+
+
+        [Required]
+        [Display(Name = "start_time")]
+        public string StartTime { get; set; }
+
+        [Required]
+        [Display(Name = "end_time")]
+        public string EndTime { get; set; }
+
+        [Required]
+        [Display(Name = "total_amount")]
+        public long TotalAmount { get; set; }
+
+        [Display(Name = "notify_url")]
+        public string NotifyUrl { get; set; }
+
+        [Display(Name = "openid")]
+        public string OpenId { get; set; }
+    }
+
+    public class PermissionsViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "authorization_code")]
+        public string AuthorizationCode { get; set; }
+
+        [Display(Name = "notify_url")]
+        public string NotifyUrl { get; set; }
+    }
+
+    public class PermissionsQueryForAuthCodeViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "authorization_code")]
+        public string AuthorizationCode { get; set; }
+    }
+
+    public class PermissionsTerminateForAuthCodeViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "authorization_code")]
+        public string AuthorizationCode { get; set; }
+
+        [Required]
+        [Display(Name = "reason")]
+        public string Reason { get; set; }
+    }
+
+    public class PermissionsQueryForOpenIdViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "openid")]
+        public string OpenId { get; set; }
+    }
+
+    public class PermissionsTerminateForOpenIdViewModel
+    {
+        [Required]
+        [Display(Name = "service_id")]
+        public string ServiceId { get; set; }
+
+        [Required]
+        [Display(Name = "openid")]
+        public string OpenId { get; set; }
+
+        [Required]
+        [Display(Name = "reason")]
+        public string Reason { get; set; }
+    }
+
+    #endregion
 }

+ 1 - 4
samples/WebApplicationSample/Views/Shared/_Layout.cshtml

@@ -37,9 +37,6 @@
                     <li class="nav-item @Html.IsActive("WeChatPayV3")">
                         <a class="nav-link" asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a>
                     </li>
-                    <li class="nav-item @Html.IsActive("WeChatPayScore")">
-                        <a class="nav-link" asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a>
-                    </li>
                 </ul>
             </div>
         </div>
@@ -50,7 +47,7 @@
     <footer>
         <div class="container">
             <ul class="list-style-none d-flex">
-                <li class="mr-3"><p>&copy; @DateTime.Now.Year Payment</p></li>
+                <li class="mr-3"><p>Copyright (c) Essensoft and Project contributors.</p></li>
                 <li class="mr-3"><a target="_blank" href="https://github.com/essensoft/payment">GitHub</a></li>
                 <li class="mr-3"><a target="_blank" href="https://gitee.com/essensoft/payment">Gitee</a></li>
                 <li class="mr-3">Payment 交流①群:<a target="_blank" href="https://shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525</a></li>

+ 0 - 175
samples/WebApplicationSample/Views/WeChatPayScore/Index.cshtml

@@ -1,175 +0,0 @@
-@{
-    ViewData["Title"] = "微信支付分(V3)";
-}
-<nav aria-label="breadcrumb">
-    <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
-    </ol>
-</nav>
-<div class="text-center">
-    <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_4.shtml" target="_blank">微信支付分的API列表</a>
-</div>
-<br />
-<table class="table table-bordered table-hover">
-    <thead>
-        <tr>
-            <th scope="col">#</th>
-            <th scope="col">产品</th>
-            <th scope="col">接口</th>
-            <th scope="col">#</th>
-        </tr>
-    </thead>
-    <tbody>
-        <tr>
-            <th scope="row">1</th>
-            <td>创建支付分订单</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrder">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">2</th>
-            <td>查询支付分订单</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderQuery">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">3</th>
-            <td>取消支付分订单</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderCancel">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">4</th>
-            <td>修改订单金额</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderModify">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">5</th>
-            <td>完结支付分订单</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderComplete">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">6</th>
-            <td>商户发起催收扣款</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderPay">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">7</th>
-            <td>同步服务订单信息</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderSync">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">8</th>
-            <td>申请退款</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_26.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_26.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayV3" asp-action="Refund">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">9</th>
-            <td>查询单笔退款</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_27.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_27.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayV3" asp-action="RefundQuery">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">10</th>
-            <td>创单结单合并</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="ServiceOrderDirectComplete">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">11</th>
-            <td>商户预授权</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="Permissions">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">12</th>
-            <td>查询用户授权记录(授权协议号)</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="PermissionsQueryForAuthCode">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">13</th>
-            <td>解除用户授权关系(授权协议号)</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="PermissionsTerminateForAuthCode">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">14</th>
-            <td>查询用户授权记录(openid)</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="PermissionsQueryForOpenId">立即测试</a></td>
-        </tr>
-        <tr>
-            <th scope="row">15</th>
-            <td>解除用户授权关系(openid)</td>
-            <td>
-                <a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml" target="_blank">
-                    https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml
-                </a>
-            </td>
-            <td><a asp-controller="WeChatPayScore" asp-action="PermissionsTerminateForOpenId">立即测试</a></td>
-        </tr>
-    </tbody>
-</table>

+ 90 - 0
samples/WebApplicationSample/Views/WeChatPayV3/Index.cshtml

@@ -96,5 +96,95 @@
             <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_10.shtml" target="_blank">https://api.mch.weixin.qq.com/v3/refund/domestic/refunds/{out_refund_no}</a></td>
             <td><a asp-controller="WeChatPayV3" asp-action="RefundQuery">立即测试</a></td>
         </tr>
+        <tr>
+            <th scope="row">14</th>
+            <td>支付分-创建支付分订单</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrder">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">15</th>
+            <td>支付分-查询支付分订单</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderQuery">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">16</th>
+            <td>支付分-取消支付分订单</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderCancel">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">17</th>
+            <td>支付分-修改订单金额</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderModify">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">18</th>
+            <td>支付分-完结支付分订单</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderComplete">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">19</th>
+            <td>支付分-商户发起催收扣款</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderPay">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">20</th>
+            <td>支付分-同步服务订单信息</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderSync">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">21</th>
+            <td>支付分-申请退款</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_26.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_26.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="Refund">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">22</th>
+            <td>支付分-查询单笔退款</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_27.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_27.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="RefundQuery">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">23</th>
+            <td>支付分-创单结单合并</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="ServiceOrderDirectComplete">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">24</th>
+            <td>支付分-商户预授权</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="Permissions">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">25</th>
+            <td>支付分-查询用户授权记录(授权协议号)</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="PermissionsQueryForAuthCode">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">26</th>
+            <td>支付分-解除用户授权关系(授权协议号)</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="PermissionsTerminateForAuthCode">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">27</th>
+            <td>支付分-查询用户授权记录(openid)</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="PermissionsQueryForOpenId">立即测试</a></td>
+        </tr>
+        <tr>
+            <th scope="row">28</th>
+            <td>支付分-解除用户授权关系(openid)</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml" target="_blank">https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="PermissionsTerminateForOpenId">立即测试</a></td>
+        </tr>
     </tbody>
 </table>

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/Permissions.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/Permissions.cshtml

@@ -4,22 +4,26 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="Permissions">
+        <form asp-controller="WeChatPayV3" asp-action="Permissions">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="AuthorizationCode"></label>
-                <input type="text" class="form-control" asp-for="AuthorizationCode" value="@(Guid.NewGuid().ToString("N"))" />
+                <input type="text" class="form-control" asp-for="AuthorizationCode" value="@Guid.NewGuid().ToString("N")" />
             </div>
             <div class="form-group">
                 <label asp-for="NotifyUrl"></label>
-                <input type="text" class="form-control" asp-for="NotifyUrl" value="https://domain.com/wechatpay/score/notify/permissions" />
+                <input type="text" class="form-control" asp-for="NotifyUrl" value="http://domain.com/wechatpay/v3/notify/score/permissions" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/PermissionsQueryForAuthCode.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/PermissionsQueryForAuthCode.cshtml

@@ -4,19 +4,23 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="PermissionsQueryForAuthCode">
+        <form asp-controller="WeChatPayV3" asp-action="PermissionsQueryForAuthCode">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="AuthorizationCode"></label>
-                <input type="text" class="form-control" asp-for="AuthorizationCode" value="" />
-            </div>            
+                <input type="text" class="form-control" asp-for="AuthorizationCode" />
+            </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>
         <hr />

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/PermissionsQueryForOpenId.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/PermissionsQueryForOpenId.cshtml

@@ -4,19 +4,23 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="PermissionsQueryForOpenId">
+        <form asp-controller="WeChatPayV3" asp-action="PermissionsQueryForOpenId">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OpenId"></label>
-                <input type="text" class="form-control" asp-for="OpenId" value="" />
-            </div>            
+                <input type="text" class="form-control" asp-for="OpenId" />
+            </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>
         <hr />

+ 7 - 3
samples/WebApplicationSample/Views/WeChatPayScore/PermissionsTerminateForAuthCode.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/PermissionsTerminateForAuthCode.cshtml

@@ -4,18 +4,22 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="PermissionsTerminateForAuthCode">
+        <form asp-controller="WeChatPayV3" asp-action="PermissionsTerminateForAuthCode">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="AuthorizationCode"></label>
-                <input type="text" class="form-control" asp-for="AuthorizationCode" value="" />
+                <input type="text" class="form-control" asp-for="AuthorizationCode" />
             </div>
             <div class="form-group">
                 <label asp-for="Reason"></label>

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/PermissionsTerminateForOpenId.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/PermissionsTerminateForOpenId.cshtml

@@ -4,18 +4,22 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="PermissionsTerminateForOpenId">
+        <form asp-controller="WeChatPayV3" asp-action="PermissionsTerminateForOpenId">
             <div asp-validation-summary="All" class="text-danger"></div>
             <div class="form-group">
-                <label asp-for="OpenID"></label>
-                <input type="text" class="form-control" asp-for="OpenID" value="" />
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
+            <div class="form-group">
+                <label asp-for="OpenId"></label>
+                <input type="text" class="form-control" asp-for="OpenId" />
             </div>
             <div class="form-group">
                 <label asp-for="Reason"></label>

+ 9 - 5
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrder.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrder.cshtml

@@ -4,15 +4,19 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrder">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrder">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
                 <input type="text" class="form-control" asp-for="OutOrderNo" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")" />
@@ -27,7 +31,7 @@
             </div>
             <div class="form-group">
                 <label asp-for="EndTime"></label>
-                <input type="text" class="form-control" asp-for="EndTime" value="@(DateTime.Now.AddMinutes(5).ToString("yyyyMMddHHmmss"))" />
+                <input type="text" class="form-control" asp-for="EndTime" value="@DateTime.Now.AddMinutes(5).ToString("yyyyMMddHHmmss")" />
             </div>
             <div class="form-group">
                 <label asp-for="RiskFundName"></label>
@@ -40,11 +44,11 @@
             <div class="form-group">
                 <label asp-for="NotifyUrl"></label>
                 <input type="text" class="form-control" asp-for="NotifyUrl"
-                       value="https://domain.com/wechatpay/score/notify/confirmorpaid" />
+                       value="http://domain.com/wechatpay/v3/notify/score/confirmorpaid" />
             </div>
             <div class="form-group">
                 <label asp-for="OpenId"></label>
-                <input type="text" class="form-control" asp-for="OpenId" value="" />
+                <input type="text" class="form-control" asp-for="OpenId" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderCancel.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderCancel.cshtml

@@ -4,22 +4,26 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderCancel">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderCancel">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
-                <input type="text" class="form-control" asp-for="OutOrderNo" value="" />
+                <input type="text" class="form-control" asp-for="OutOrderNo" />
             </div>
             <div class="form-group">
                 <label asp-for="Reason"></label>
-                <input type="text" class="form-control" asp-for="Reason" value="取消原因"/>
+                <input type="text" class="form-control" asp-for="Reason" value="取消原因" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 7 - 3
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderComplete.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderComplete.cshtml

@@ -4,18 +4,22 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderComplete">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderComplete">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
-                <input type="text" class="form-control" asp-for="OutOrderNo" value="" />
+                <input type="text" class="form-control" asp-for="OutOrderNo" />
             </div>
             <div class="form-group">
                 <label asp-for="Name"></label>

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderDirectComplete.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderDirectComplete.cshtml

@@ -4,15 +4,19 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderDirectComplete">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderDirectComplete">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
                 <input type="text" class="form-control" asp-for="OutOrderNo" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")" />
@@ -51,11 +55,11 @@
             </div>
             <div class="form-group">
                 <label asp-for="NotifyUrl"></label>
-                <input type="text" class="form-control" asp-for="NotifyUrl" value="https://domain.com/wechatpay/score/notify/orderpaid" />
+                <input type="text" class="form-control" asp-for="NotifyUrl" value="http://domain.com/wechatpay/v3/notify/score/orderpaid" />
             </div>
             <div class="form-group">
                 <label asp-for="OpenId"></label>
-                <input type="text" class="form-control" asp-for="OpenId" value="" />
+                <input type="text" class="form-control" asp-for="OpenId" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 7 - 3
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderModify.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderModify.cshtml

@@ -4,18 +4,22 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderModify">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderModify">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
-                <input type="text" class="form-control" asp-for="OutOrderNo" value="" />
+                <input type="text" class="form-control" asp-for="OutOrderNo" />
             </div>
             <div class="form-group">
                 <label asp-for="Name"></label>

+ 7 - 3
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderPay.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderPay.cshtml

@@ -4,18 +4,22 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderPay">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderPay">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
-                <input type="text" class="form-control" asp-for="OutOrderNo" value="" />
+                <input type="text" class="form-control" asp-for="OutOrderNo" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 8 - 6
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderQuery.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderQuery.cshtml

@@ -4,24 +4,26 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderQuery">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderQuery">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
-                <input type="text" class="form-control" asp-for="OutOrderNo" value="" 
-                       placeholder="out_order_no与query_id必填其中一个.不允许都填写或都不填写" />
+                <input type="text" class="form-control" asp-for="OutOrderNo" placeholder="out_order_no 与 query_id 必填一个。" />
             </div>
             <div class="form-group">
                 <label asp-for="QueryId"></label>
-                <input type="text" class="form-control" asp-for="QueryId" value="" 
-                       placeholder="out_order_no与query_id必填其中一个.不允许都填写或都不填写"/>
+                <input type="text" class="form-control" asp-for="QueryId" placeholder="out_order_no 与 query_id 必填一个。" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 8 - 4
samples/WebApplicationSample/Views/WeChatPayScore/ServiceOrderSync.cshtml → samples/WebApplicationSample/Views/WeChatPayV3/ServiceOrderSync.cshtml

@@ -4,18 +4,22 @@
 }
 <nav aria-label="breadcrumb">
     <ol class="breadcrumb">
-        <li class="breadcrumb-item"><a asp-controller="WeChatPayScore" asp-action="Index">微信支付分(V3)</a></li>
+        <li class="breadcrumb-item"><a asp-controller="WeChatPayV3" asp-action="Index">微信支付V3</a></li>
         <li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li>
     </ol>
 </nav>
 <br />
 <div class="card">
     <div class="card-body">
-        <form asp-controller="WeChatPayScore" asp-action="ServiceOrderSync">
+        <form asp-controller="WeChatPayV3" asp-action="ServiceOrderSync">
             <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="ServiceId"></label>
+                <input type="text" class="form-control" asp-for="ServiceId" value="500001" />
+            </div>
             <div class="form-group">
                 <label asp-for="OutOrderNo"></label>
-                <input type="text" class="form-control" asp-for="OutOrderNo" value="" />
+                <input type="text" class="form-control" asp-for="OutOrderNo" />
             </div>
             <div class="form-group">
                 <label asp-for="Type"></label>
@@ -23,7 +27,7 @@
             </div>
             <div class="form-group">
                 <label asp-for="PaidTime"></label>
-                <input type="text" class="form-control" asp-for="PaidTime" value="@(DateTime.Now.ToString("yyyyMMddHHmmss"))" />
+                <input type="text" class="form-control" asp-for="PaidTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")" />
             </div>
             <button type="submit" class="btn btn-primary">提交请求</button>
         </form>

+ 0 - 4
samples/WebApplicationSample/appsettings.Development.json

@@ -29,10 +29,6 @@
     // 为微信支付商户平台的APIv3密钥,请注意不是API密钥,v3接口必填
     "V3Key": "",
 
-    // 支付分服务ID
-    // 要调用微信支付分接口必须配置
-    "PayScoreServiceId": "",
-
     // API证书(.p12)
     // 为微信支付商户平台的API证书(.p12),v3接口必填
     // 可为证书文件(.p12)路径 / 证书文件(.p12)的base64字符串

+ 0 - 4
samples/WebApplicationSample/appsettings.json

@@ -30,10 +30,6 @@
     // 为微信支付商户平台的APIv3密钥,请注意不是API密钥,v3接口必填
     "V3Key": "",
 
-    // 支付分服务ID
-    // 要调用微信支付分接口必须配置
-    "PayScoreServiceId": "",
-
     // API证书(.p12)
     // 为微信支付商户平台的API证书(.p12),v3接口必填
     // 可为证书文件(.p12)路径 / 证书文件(.p12)的base64字符串

+ 6 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/Essensoft.AspNetCore.Payment.WeChatPay.csproj

@@ -15,6 +15,12 @@
 		<FrameworkReference Include="Microsoft.AspNetCore.App" />
 	</ItemGroup>
 
+	<ItemGroup>
+	  <Compile Remove="Payscore\**" />
+	  <EmbeddedResource Remove="Payscore\**" />
+	  <None Remove="Payscore\**" />
+	</ItemGroup>
+
 	<ItemGroup>
 		<ProjectReference Include="..\Essensoft.AspNetCore.Payment.Security\Essensoft.AspNetCore.Payment.Security.csproj" />
 	</ItemGroup>

+ 0 - 42
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/GoodsDetail.cs

@@ -1,42 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    /// 单品信息
-    /// </summary>
-    public class GoodsDetail : WeChatPayObject
-    {
-        /// <summary>
-        /// 商品编码
-        /// 示例值:M1006
-        /// </summary>
-        [JsonPropertyName("goods_id")]
-        public string GoodsId { get; set; }
-
-        /// <summary>
-        /// 商品数量
-        /// 示例值:1
-        /// </summary>
-        [JsonPropertyName("quantity")]
-        public uint Quantity { get; set; }
-
-        /// <summary>
-        /// 商品价格
-        /// </summary>
-        [JsonPropertyName("unit_price")]
-        public long UnitPrice { get; set; }
-
-        /// <summary>
-        /// 商品优惠金额
-        /// </summary>
-        [JsonPropertyName("discount_amount")]
-        public long DiscountAmount { get; set; }
-
-        /// <summary>
-        /// 商品备注
-        /// </summary>
-        [JsonPropertyName("goods_remark")]
-        public string GoodsRemark { get; set; }
-    }
-}

+ 0 - 35
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/Location.cs

@@ -1,35 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    /// 服务位置
-    /// </summary>
-    public class Location : WeChatPayObject
-    {
-        /// <summary>
-        /// 服务开始地点
-        /// </summary>
-        /// <remarks>
-        /// 开始使用服务的地点,不超过50个字符,超出报错处理。
-        ///【建议】
-        ///   1、用户下单时【未确定】服务结束地点,不填写。
-        ///   2、服务在同一地点开始和结束,不填写。
-        ///   3、用户下单时【已确定】服务结束地点,填写。
-        ///示例值:嗨客时尚主题展餐厅
-        /// </remarks>
-        [JsonPropertyName("start_location")]
-        public string StartLocation { get; set; }
-
-        /// <summary>
-        /// 预计服务结束位置
-        /// </summary>
-        /// <remarks>
-        /// 1、结束使用服务的地点,不超过50个字符,超出报错处理 。
-        /// 2、填写了服务开始地点,才能填写服务结束地点。
-        /// 示例值:嗨客时尚主题展餐厅
-        /// </remarks>
-        [JsonPropertyName("end_location")]
-        public string EndLocation { get; set; }
-    }
-}

+ 0 - 17
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/ModifyPostDiscount.cs

@@ -1,17 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    public class ModifyPostDiscount : PostDiscount
-    {
-        /// <summary>
-        /// 优惠金额       
-        /// </summary>
-        /// <remarks>
-        /// 优惠金额;单位为分,只能为整数,详见支付金额。
-        /// 示例值:100
-        /// </remarks>
-        [JsonPropertyName("name")]
-        public long Amount { get; set; }
-    }
-}

+ 0 - 42
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/PostDiscount.cs

@@ -1,42 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    /// 后付费商户优惠
-    /// </summary>
-    public class PostDiscount : WeChatPayObject
-    {
-        /// <summary>
-        /// 优惠名称       
-        /// </summary>
-        /// <remarks>
-        /// 优惠名称说明;name和description若填写,则必须同时填写,优惠名称不可重复描述。
-        /// 示例值:满20减1元 
-        /// </remarks>
-        [JsonPropertyName("name")]
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 优惠使用条件说明
-        /// </summary>
-        /// <remarks>
-        /// name和description若填写,则必须同时填写。
-        /// 示例值:不与其他优惠叠加  
-        /// </remarks>
-        [JsonPropertyName("description")]
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 付费数量      
-        /// </summary>
-        /// <remarks>
-        /// 付费项目的数量。
-        /// 特殊规则:数量限制100,不填时默认1。
-        /// 示例值:4 
-        /// </remarks>
-        [JsonPropertyName("count")]
-        public uint Count { get; set; }
-
-    }
-}

+ 0 - 52
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/PostPayment.cs

@@ -1,52 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    /// 后付款项目
-    /// </summary>
-    public class PostPayment : WeChatPayObject
-    {
-        /// <summary>
-        /// 付费项目名称       
-        /// </summary>
-        /// <remarks>
-        /// 相同订单号下不能出现相同的付费项目名称,当参数长度超过20个字符时,报错处理。
-        /// 示例值:就餐费用, 服务费
-        /// </remarks>
-        [JsonPropertyName("name")]
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 金额 
-        /// </summary>
-        /// <remarks>
-        /// 此付费项目总金额,大于等于0,单位为分,等于0时代表不需要扣费,只能为整数,详见支付金额。
-        /// 如果填写了“付费项目名称”,则amount或description必须填写其一,或都填。
-        /// 示例值:40000       
-        /// </remarks>
-        [JsonPropertyName("amount")]
-        public long Amount { get; set; }
-
-        /// <summary>
-        /// 计费说明      
-        /// </summary>
-        /// <remarks>
-        /// 描述计费规则,不超过30个字符,超出报错处理。如果填写了“付费项目名称”,则amount或description必须填写其一,或都填。
-        /// 示例值:就餐人均100元,服务费:100/小时 
-        /// </remarks>
-        [JsonPropertyName("description")]
-        public string Description { get; set; }
-
-        /// <summary>
-        /// 付费数量   
-        /// </summary>
-        /// <remarks>
-        /// 付费项目的数量。
-        /// 特殊规则:数量限制100,不填时默认1。
-        /// 示例值:4    
-        /// </remarks>
-        [JsonPropertyName("count")]
-        public uint Count { get; set; }
-    }
-}

+ 0 - 101
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/PromotionDetail.cs

@@ -1,101 +0,0 @@
-using System.Collections.Generic;
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    /// 优惠功能
-    /// </summary>
-    public class PromotionDetail : WeChatPayObject
-    {
-        /// <summary>
-        /// 券ID
-        /// 示例值:123456
-        /// </summary>
-        [JsonPropertyName("coupon_id")]
-        public string CouponId { get; set; }
-
-        /// <summary>
-        /// 优惠名称
-        /// 示例值:单品优惠-6
-        /// </summary>
-        [JsonPropertyName("name")]
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 优惠范围
-        /// </summary>
-        /// <remarks>
-        /// GLOBAL:全场代金券;
-        /// SINGLE:单品优惠
-        /// 示例值:GLOBAL
-        /// </remarks>
-        [JsonPropertyName("scope")]
-        public string Scope { get; set; }
-
-        /// <summary>
-        /// 优惠类型
-        /// </summary>
-        /// <remarks>
-        /// 枚举值:CASH:充值;
-        /// NOCASH:免充值。
-        /// 示例值:CASH
-        /// </remarks>
-        [JsonPropertyName("type")]
-        public string Type { get; set; }
-
-        /// <summary>
-        /// 优惠券面额
-        /// 示例值:100
-        /// </summary>
-        [JsonPropertyName("amount")]
-        public int Amount { get; set; }
-
-        /// <summary>
-        /// 活动ID
-        /// </summary>
-        /// <remarks>
-        /// 活动ID,批次ID
-        /// 示例值:activity_id
-        /// </remarks>
-        [JsonPropertyName("stock_id")]
-        public string StockId { get; set; }
-
-        /// <summary>
-        /// 微信出资
-        /// 示例值:100
-        /// </summary>
-        [JsonPropertyName("wechatpay_contribute")]
-        public long WechatpayContribute { get; set; }
-
-        /// <summary>
-        /// 商户出资
-        /// 示例值:100
-        /// </summary>
-        [JsonPropertyName("merchant_contribute")]
-        public long MerchantContribute { get; set; }
-
-        /// <summary>
-        /// 其他出资
-        /// 示例值:100
-        /// </summary>
-        [JsonPropertyName("other_contribute")]
-        public long OtherContribute { get; set; }
-
-        /// <summary>
-        /// 优惠币种
-        /// </summary>
-        /// <remarks>
-        /// CNY:人民币,境内商户号仅支持人民币
-        /// 示例值:CNY
-        /// </remarks>
-        [JsonPropertyName("currency")]
-        public string Currency { get; set; }
-
-        /// <summary>
-        /// 单品列表
-        /// </summary>
-        [JsonPropertyName("goods_detail")]
-        public List<GoodsDetail> GoodsDetails { get; set; }
-    }
-}

+ 0 - 71
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/TimeRange.cs

@@ -1,71 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    /// 服务时间段
-    /// </summary>
-    public class TimeRange : WeChatPayObject
-    {
-        /// <summary>
-        /// 服务开始时间
-        /// </summary>
-        /// <remarks>
-        /// 用户端展示用途。
-        /// 用户下单时确认的服务开始时间(比如用户今天下单,明天开始接受服务,这里指的是明天的服务开始时间)。
-        /// 支持三种格式:yyyyMMddHHmmss、yyyyMMdd和 OnAccept
-        /// ● 传入20091225091010表示2009年12月25日9点10分10秒。
-        /// ● 传入20091225默认认为时间为2009年12月25日
-        /// ● 传入OnAccept表示用户确认订单成功时间为【服务开始时间】。
-        /// 根据传入时间精准度进行校验
-        /// 1)若传入时间精准到秒,则校验精准到秒:【服务开始时间】>【商户调用创建订单接口时间
-        /// 2)若传入时间精准到日,则校验精准到日:【服务开始时间】>=【商户调用创建订单接口时间】
-        /// 示例值:20091225091010
-        /// </remarks>
-        [JsonPropertyName("start_time")]
-        public string StartTime { get; set; }
-
-
-        /// <summary>
-        /// 服务开始时间备注
-        /// </summary>
-        /// <remarks>
-        /// 服务开始时间备注说明,服务开始时间有填时,可填写服务开始时间备注,不超过20个字符,超出报错处理。
-        /// 示例值:开始租借日期
-        /// </remarks>
-        [JsonPropertyName("start_time_remark")]
-        public string StartTimeRemark { get; set; }
-
-        /// <summary>
-        /// 预计服务结束时间
-        /// </summary>
-        /// <remarks>
-        /// 用户端展示用途,支持两种格式:yyyyMMddHHmmss和yyyyMMdd
-        /// ● 传入20091225091010表示2009年12月25日9点10分10秒。
-        /// ● 传入20091225默认认为时间为2009年12月25日
-        /// 根据传入时间精准度进行校验
-        /// 1、若传入时间精准到秒,则校验精准到秒:
-        /// 1)【预计服务结束时间】>【服务开始时间】
-        /// 2)【预计服务结束时间】>【商户调用接口时间+1分钟】
-        /// 2、若传入时间精准到日,则校验精准到日:
-        /// 1)【预计服务结束时间】>=【服务开始时间】
-        /// 2)【预计服务结束时间】>=【商户调用接口时间】
-        /// 【建议】
-        ///    1、用户下单时【未确定】服务结束时间,不填写。
-        ///    2、用户下单时【已确定】服务结束时间,填写。
-        /// 示例值:20091225121010
-        /// </remarks>
-        [JsonPropertyName("end_time")]
-        public string EndTime { get; set; }
-
-        /// <summary>
-        /// 预计服务结束时间备注
-        /// </summary>
-        /// <remarks>
-        /// 预计服务结束时间备注说明,预计服务结束时间有填时,可填写预计服务结束时间备注,不超过20个字符,超出报错处理。
-        /// 示例值:结束租借时间
-        /// </remarks>
-        [JsonPropertyName("end_time_remark")]
-        public string EndTimeRemark { get; set; }
-    }
-}

+ 0 - 27
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreModelBase.cs

@@ -1,27 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    public abstract class WeChatPayScoreModelBase : WeChatPayObject
-    {
-        /// <summary>
-        /// AppId
-        /// </summary>
-        /// <remarks>
-        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系,此参数需在本系统先进行配置。
-        /// 示例值:wxd678efh567hg6787
-        /// </remarks>
-        [JsonPropertyName("appid")]
-        public virtual string AppId { get; set; }
-
-        /// <summary>
-        /// 支付分服务ID
-        /// </summary>
-        /// <remarks>
-        /// 服务ID有本接口对应产品的权限。
-        /// 示例值:500001
-        /// </remarks>
-        [JsonPropertyName("service_id")]
-        public virtual string ServiceId { get; set; }
-    }
-}

+ 0 - 21
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsQueryForAuthCodeModel.cs

@@ -1,21 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 查询用户授权记录(授权协议号)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml">查询用户授权记录(授权协议号)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsQueryForAuthCodeModel : WeChatPayObject
-    {
-        /// <summary>
-        /// 支付分服务ID
-        /// </summary>
-        /// <remarks>
-        /// 服务ID有本接口对应产品的权限。
-        /// 示例值:500001
-        /// </remarks>
-        [JsonPropertyName("service_id")]
-        public string ServiceId { get; set; }
-    }
-}

+ 0 - 27
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsQueryForOpenIdModel.cs

@@ -1,27 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 查询用户授权记录(openid)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml">查询用户授权记录(openid)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsQueryForOpenIdModel : WeChatPayObject
-    {
-        /// <summary>
-        /// 支付分服务ID
-        /// </summary>
-        /// <remarks>
-        /// 服务ID有本接口对应产品的权限。
-        /// 示例值:500001
-        /// </remarks>
-        [JsonPropertyName("service_id")]
-        public string ServiceId { get; set; }
-
-        /// <summary>
-        /// appid
-        /// </summary>
-        [JsonPropertyName("appid")]
-        public string AppId { get; set; }
-    }
-}

+ 0 - 40
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsTerminateForOpenIdModel.cs

@@ -1,40 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 解除用户授权关系(openid)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml">解除用户授权关系(openid)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsTerminateForOpenIdModel : WeChatPayObject
-    {
-        /// <summary>
-        /// 支付分服务ID
-        /// </summary>
-        /// <remarks>
-        /// 服务ID有本接口对应产品的权限。
-        /// 示例值:500001
-        /// </remarks>
-        [JsonPropertyName("service_id")]
-        public string ServiceId { get; set; }
-
-        /// <summary>
-        /// appid
-        /// </summary>
-        [JsonPropertyName("appid")]
-        public string AppId { get; set; }
-
-        /// <summary>
-        /// 撤销原因
-        /// </summary>
-        /// <remarks>
-        /// 解除授权原因 
-        /// 示例值:撤销原因
-        /// </remarks>
-        [JsonPropertyName("reason")]
-        public string Reason { get; set; }
-    }
-}

+ 0 - 21
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderCancelModel.cs

@@ -1,21 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 取消支付分订单API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml">取消支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderCancelModel : WeChatPayScoreModelBase
-    {
-        /// <summary>
-        /// 取消原因
-        /// </summary>
-        /// <remarks>
-        /// 最多30个字符,每个汉字/数字/英语都按1个字符计算超过长度报错处理。
-        /// 示例值:用户投诉
-        /// </remarks>
-        [JsonPropertyName("reason")]
-        public string Reason { get; set; }
-    }
-}

+ 0 - 10
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderPayModel.cs

@@ -1,10 +0,0 @@
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 商户发起催收扣款
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml">商户发起催收扣款API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderPayModel : WeChatPayScoreModelBase
-    {
-    }
-}

+ 0 - 32
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderQueryModel.cs

@@ -1,32 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 查询支付分订单API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderQueryModel : WeChatPayScoreModelBase
-    {
-        /// <summary>
-        /// 商户订单号
-        /// </summary>
-        /// <remarks>
-        /// 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。
-        /// 详见[商户订单号]。示例值:1234323JKHDFE1243252
-        /// </remarks>
-        [JsonPropertyName("out_order_no")]
-        public string OutOrderNo { get; set; }
-
-        /// <summary>
-        /// 回跳查询ID
-        /// </summary>
-        /// <remarks>
-        /// 微信侧回跳到商户前端时用于查单的单据查询id。详见章节“小程序跳转接口,回跳商户接口”。
-        /// 商户单号与回跳查询id必填其中一个.不允许都填写或都不填写。
-        /// 示例值:15646546545165651651
-        /// </remarks>
-        [JsonPropertyName("query_id")]
-        public string QueryId { get; set; }
-    }
-}

+ 0 - 30
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderSyncModel.cs

@@ -1,30 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
-{
-    /// <summary>
-    ///  微信支付分 - 同步服务订单信息
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderSyncModel : WeChatPayScoreModelBase
-    {
-        /// <summary>
-        /// 场景类型
-        /// </summary>
-        /// <remarks>
-        /// 场景类型为“Order_Paid”,字符串表示“订单收款成功” 。
-        /// 示例值:Order_Paid
-        /// </remarks>
-        [JsonPropertyName("type")]
-        public string Type { get; set; }
-
-        /// <summary>
-        /// 内容信息详情
-        /// </summary>
-        /// <remarks>
-        /// 场景类型为Order_Paid时,为必填项。
-        /// </remarks>
-        [JsonPropertyName("detail")]
-        public SyncDetail Detail { get; set; }
-    }
-}

+ 0 - 11
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Notify/WeChatPayScoreServiceOrderConfirmNotify.cs

@@ -1,11 +0,0 @@
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
-{
-    /// <summary>
-    /// 确认订单回调通知
-    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderConfirmNotify : WeChatPayScoreNotifyBase
-    {
-
-    }
-}

+ 0 - 29
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Notify/WeChatPayScoreServiceOrderPaidNotify.cs

@@ -1,29 +0,0 @@
-using System.Text.Json.Serialization;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
-{
-    /// <summary>
-    /// 支付成功回调通知
-    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderPaidNotify : WeChatPayScoreNotifyBase
-    {
-        /// <summary>
-        /// 商户回调地址
-        /// </summary>
-        /// <remarks>
-        /// 商户接收用户确认订单和付款成功回调通知的地址。
-        /// 示例值:https://api.test.com
-        /// </remarks>
-        [JsonPropertyName("notify_url")]
-        public string NotifyUrl { get; set; }
-
-
-        /// <summary>
-        /// 收款信息,非0元完结后返回
-        /// </summary>
-        [JsonPropertyName("collection")]
-        public Collection Collection { get; set; }
-    }
-}

+ 0 - 37
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsQueryForAuthCodeRequest.cs

@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 查询用户授权记录(授权协议号)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml">查询用户授权记录(授权协议号)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsQueryForAuthCodeRequest : IWeChatPayGetRequest<WeChatPayScorePermissionsQueryForAuthCodeResponse>
-    {
-        private WeChatPayObject _queryModel;
-
-        /// <summary>
-        /// 预授权成功时的授权协议号。
-        /// </summary>
-        public string AuthorizationCode { get; set; }
-
-        public WeChatPayObject GetQueryModel()
-        {
-            return _queryModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/authorization-code/{AuthorizationCode}";
-        }
-
-        public void SetQueryModel(WeChatPayObject queryModel)
-        {
-            _queryModel = queryModel;
-        }
-    }
-}

+ 0 - 35
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsQueryForOpenIdRequest.cs

@@ -1,35 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 查询用户授权记录(openid)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml">查询用户授权记录(openid)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsQueryForOpenIdRequest : IWeChatPayGetRequest<WeChatPayScorePermissionsQueryForOpenIdResponse>
-    {
-        private WeChatPayObject _queryModel;
-
-        /// <summary>
-        /// 用户标识。
-        /// </summary>
-        public string OpenId { get; set; }
-
-        public WeChatPayObject GetQueryModel()
-        {
-            return _queryModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/openid/{OpenId}";
-        }
-
-        public void SetQueryModel(WeChatPayObject queryModel)
-        {
-            _queryModel = queryModel;
-        }
-
-    }
-}

+ 0 - 29
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsRequest.cs

@@ -1,29 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 商户预授权
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml">商户预授权API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsRequest : IWeChatPayPostRequest<WeChatPayScorePermissionsResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return "https://api.mch.weixin.qq.com/v3/payscore/permissions";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 34
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsTerminateForAuthCodeRequest.cs

@@ -1,34 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 解除用户授权关系(授权协议号)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml">解除用户授权关系(授权协议号)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsTerminateForAuthCodeRequest : IWeChatPayPostRequest<WeChatPayScorePermissionsTerminateForAuthCodeResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        /// <summary>
-        /// 预授权成功时的授权协议号。
-        /// </summary>
-        public string AuthorizationCode { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/authorization-code/{AuthorizationCode}/terminate";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 34
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScorePermissionsTerminateForOpenIdRequest.cs

@@ -1,34 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 解除用户授权关系(openid)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml">解除用户授权关系(openid)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsTerminateForOpenIdRequest : IWeChatPayPostRequest<WeChatPayScorePermissionsTerminateForOpenIdResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        /// <summary>
-        /// 用户标识。
-        /// </summary>
-        public string OpenId { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/openid/{OpenId}/terminate";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 31
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderCancelRequest.cs

@@ -1,31 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 取消支付分订单API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml">取消支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderCancelRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderCancelResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public string OutOrderNo { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/cancel";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 31
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderCompleteRequest.cs

@@ -1,31 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 完结支付分订单
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderCompleteRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderCompleteResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public string OutOrderNo { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/complete";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 31
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderModifyRequest.cs

@@ -1,31 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 修改订单金额API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderModifyRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderModifyResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public string OutOrderNo { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/modify";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 31
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderPayRequest.cs

@@ -1,31 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 商户发起催收扣款
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml">商户发起催收扣款API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderPayRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderPayResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public string OutOrderNo { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/pay";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 29
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderQueryRequest.cs

@@ -1,29 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 查询支付分订单API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderQueryRequest : IWeChatPayGetRequest<WeChatPayScoreServiceOrderQueryResponse>
-    {
-        private WeChatPayObject _queryModel;
-
-        public WeChatPayObject GetQueryModel()
-        {
-            return _queryModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return "https://api.mch.weixin.qq.com/v3/payscore/serviceorder";
-        }
-
-        public void SetQueryModel(WeChatPayObject queryModel)
-        {
-            _queryModel = queryModel;
-        }
-    }
-}

+ 0 - 29
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderRequest.cs

@@ -1,29 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 创建支付分订单
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return "https://api.mch.weixin.qq.com/v3/payscore/serviceorder";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 34
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderSyncRequest.cs

@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
-{
-    /// <summary>
-    ///  微信支付分 - 同步服务订单信息
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderSyncRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderSyncResponse>
-    {
-        private WeChatPayObject _bodyModel;
-
-        public string OutOrderNo { get; set; }
-
-        public WeChatPayObject GetBodyModel()
-        {
-            return _bodyModel;
-        }
-
-        public string GetRequestUrl()
-        {
-            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/sync";
-        }
-
-        public void SetBodyModel(WeChatPayObject bodyModel)
-        {
-            _bodyModel = bodyModel;
-        }
-    }
-}

+ 0 - 13
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScorePermissionsTerminateForAuthCodeResponse.cs

@@ -1,13 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response
-{
-    /// <summary>
-    ///  微信支付分 - 解除用户授权关系(授权协议号)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml">解除用户授权关系(授权协议号)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsTerminateForAuthCodeResponse : WeChatPayResponse
-    {
-
-    }
-}

+ 0 - 13
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScorePermissionsTerminateForOpenIdResponse.cs

@@ -1,13 +0,0 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response
-{
-    /// <summary>
-    ///  微信支付分 - 解除用户授权关系(openid)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml">解除用户授权关系(openid)API</a></para>
-    /// </summary>
-    public class WeChatPayScorePermissionsTerminateForOpenIdResponse : WeChatPayResponse
-    {
-
-    }
-}

+ 0 - 32
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreResponseBase.cs

@@ -1,32 +0,0 @@
-using System.Text.Json.Serialization;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response
-{
-    public abstract class WeChatPayScoreResponseBase : WeChatPayResponse
-    {
-        /// <summary>
-        /// 商户订单号
-        /// </summary>
-        [JsonPropertyName("out_order_no")]
-        public virtual string OutOrderNo { get; set; }
-
-        /// <summary>
-        /// AppId
-        /// </summary>
-        [JsonPropertyName("appid")]
-        public virtual string AppId { get; set; }
-
-        /// <summary>
-        /// 商户号
-        /// </summary>
-        [JsonPropertyName("mchid")]
-        public virtual string MchId { get; set; }
-
-        /// <summary>
-        /// 支付分服务ID
-        /// </summary>
-        [JsonPropertyName("service_id")]
-        public virtual string ServiceId { get; set; }
-    }
-}

+ 0 - 21
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreServiceOrderCancelResponse.cs

@@ -1,21 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response
-{
-    /// <summary>
-    ///  微信支付分 - 取消支付分订单API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml">取消支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderCancelResponse : WeChatPayScoreResponseBase
-    {
-        /// <summary>
-        /// 微信支付服务订单号
-        /// </summary>
-        /// <remarks>
-        /// 微信支付服务订单号,每个微信支付服务订单号与商户号下对应的商户服务订单号一一对应。
-        /// 示例值:15646546545165651651
-        /// </remarks>
-        [JsonPropertyName("order_id")]
-        public string OrderId { get; set; }
-    }
-}

+ 0 - 125
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreServiceOrderCompleteResponse.cs

@@ -1,125 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.Json.Serialization;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response
-{
-    /// <summary>
-    ///  微信支付分 - 完结支付分订单
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderCompleteResponse : WeChatPayScoreResponseBase
-    {
-        /// <summary>
-        /// 服务信息
-        /// </summary>
-        /// <remarks>
-        /// 服务信息,用于介绍本订单所提供的服务 ,当参数长度超过20个字符时,报错处理。
-        /// 示例值:某某酒店
-        /// </remarks>
-        [JsonPropertyName("service_introduction")]
-        public string ServiceIntroduction { get; set; }
-
-        /// <summary>
-        /// 服务订单状态
-        /// </summary>
-        /// <remarks>
-        /// 表示当前单据状态。
-        ///  枚举值:
-        ///  1、CREATED:商户已创建服务订单
-        ///  2、DOING:服务订单进行中
-        ///  3、DONE:服务订单完成
-        ///  4、REVOKED:商户取消服务订单
-        ///  5、EXPIRED:服务订单已失效
-        ///  示例值:CREATED
-        /// </remarks>
-        [JsonPropertyName("state")]
-        public string State { get; set; }
-
-        /// <summary>
-        /// 订单状态说明
-        /// </summary>
-        /// <remarks>
-        /// 对服务订单"进行中"状态的附加说明。
-        /// 1、USER_CONFIRM:用户确认
-        /// 2、MCH_COMPLETE:商户完结
-        /// 示例值:MCH_COMPLETE
-        /// </remarks>
-        [JsonPropertyName("state_description")]
-        public string StateDescription { get; set; }
-
-        /// <summary>
-        /// 商户收款总金额
-        /// </summary>
-        /// <remarks>
-        /// 总金额,大于等于0的数字,单位为分,只能为整数,详见支付金额。
-        /// 此参数需满足:总金额=后付费项目金额之和-后付费商户优惠项目金额之和,且小于等于订单风险金额。取消订单时,该字段必须为0。
-        /// 示例值:40000
-        /// </remarks>
-        [JsonPropertyName("total_amount")]
-        public long TotalAmount { get; set; }
-
-        /// <summary>
-        /// 后付费项目
-        /// </summary>
-        /// <remarks>
-        /// 后付费项目列表,最多包含100条付费项目。
-        /// 如果传入,用户侧则显示此参数。
-        /// </remarks>
-        [JsonPropertyName("post_payments")]
-        public List<PostPayment> PostPayments { get; set; }
-
-        /// <summary>
-        /// 后付费商户优惠
-        /// </summary>
-        /// <remarks>
-        /// 后付费商户优惠列表,最多包含30条商户优惠。
-        /// 如果传入,用户侧则显示此参数。
-        /// </remarks>
-        [JsonPropertyName("post_discounts")]
-        public List<ModifyPostDiscount> PostDiscounts { get; set; }
-
-        /// <summary>
-        /// 服务时间范围
-        /// </summary>
-        [JsonPropertyName("time_range")]
-        public TimeRange TimeRange { get; set; }
-
-        /// <summary>
-        /// 服务位置信息
-        /// 如果传入,用户侧则显示此参数。
-        /// </summary>
-        [JsonPropertyName("location")]
-        public Location Location { get; set; }
-
-        /// <summary>
-        /// 订单风险金信息
-        /// </summary>
-        [JsonPropertyName("risk_fund")]
-        public RiskFund RiskFund { get; set; }
-
-        /// <summary>
-        /// 微信支付服务订单号
-        /// </summary>
-        /// <remarks>
-        /// 微信支付服务订单号,每个微信支付服务订单号与商户号下对应的商户服务订单号一一对应。
-        /// 示例值:15646546545165651651
-        /// </remarks>
-        [JsonPropertyName("order_id")]
-        public string OrderId { get; set; }
-
-        /// <summary>
-        /// 是否需要收款
-        /// </summary>
-        /// <remarks>
-        /// 是否需要收款,非0元完结后返回
-        /// true:微信支付分代收款
-        /// false:无需微信支付分代收款
-        /// 示例值:true
-        /// </remarks>
-        [JsonPropertyName("need_collection")]
-        public bool NeedCollection { get; set; }
-    }
-}

+ 0 - 21
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Response/WeChatPayScoreServiceOrderPayResponse.cs

@@ -1,21 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response
-{
-    /// <summary>
-    ///  微信支付分 - 商户发起催收扣款
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml">商户发起催收扣款API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderPayResponse : WeChatPayScoreResponseBase
-    {
-        /// <summary>
-        /// 微信支付服务订单号
-        /// </summary>
-        /// <remarks>
-        /// 微信支付服务订单号,每个微信支付服务订单号与商户号下对应的商户服务订单号一一对应。
-        /// 示例值:15646546545165651651
-        /// </remarks>
-        [JsonPropertyName("order_id")]
-        public string OrderId { get; set; }
-    }
-}

+ 12 - 6
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/Collection.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/Collection.cs

@@ -1,11 +1,17 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    /// 收款信息,非0元完结后返回
+    /// 收款信息
     /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
     public class Collection : WeChatPayObject
     {
         /// <summary>
@@ -28,7 +34,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 示例值:50000
         /// </remarks>
         [JsonPropertyName("total_amount")]
-        public long TotalAmount { get; set; }
+        public long? TotalAmount { get; set; }
 
         /// <summary>
         /// 待收金额
@@ -38,7 +44,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 示例值:40000
         /// </remarks>
         [JsonPropertyName("paying_amount")]
-        public long PayingAmount { get; set; }
+        public long? PayingAmount { get; set; }
 
         /// <summary>
         /// 已收金额
@@ -48,10 +54,10 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 示例值:10000
         /// </remarks>
         [JsonPropertyName("paid_amount")]
-        public long PaidAmount { get; set; }
+        public long? PaidAmount { get; set; }
 
         /// <summary>
-        /// 收款明细
+        /// 收款明细列表
         /// </summary>
         [JsonPropertyName("details")]
         public List<CollectionDetail> Details { get; set; }

+ 10 - 4
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/CollectionDetail.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/CollectionDetail.cs

@@ -1,10 +1,16 @@
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    /// 收款明细
+    /// 收款明细列表
     /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
     public class CollectionDetail : WeChatPayObject
     {
         /// <summary>
@@ -15,7 +21,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 示例值:1
         /// </remarks>
         [JsonPropertyName("seq")]
-        public int Sequence { get; set; }
+        public ulong? Seq { get; set; }
 
         /// <summary>
         /// 单笔收款金额
@@ -25,7 +31,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 示例值:10000
         /// </remarks>
         [JsonPropertyName("amount")]
-        public long Amount { get; set; }
+        public long? Amount { get; set; }
 
         /// <summary>
         /// 收款成功渠道

+ 45 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/Location.cs

@@ -0,0 +1,45 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 服务位置
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a> - 最新更新时间:2020.04.23</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
+    public class Location : WeChatPayObject
+    {
+        /// <summary>
+        /// 服务开始地点
+        /// </summary>
+        /// <remarks>
+        /// 开始使用服务的地点,不超过50个字符,超出报错处理。
+        ///【建议】
+        ///  1、用户下单时【未确定】服务结束地点,不填写。
+        ///  2、服务在同一地点开始和结束,不填写。
+        ///  3、用户下单时【已确定】服务结束地点,填写。
+        ///示例值:嗨客时尚主题展餐厅
+        /// </remarks>
+        [JsonPropertyName("start_location")]
+        public string StartLocation { get; set; }
+
+        /// <summary>
+        /// 预计服务结束位置
+        /// </summary>
+        /// <remarks>
+        /// 1、结束使用服务的地点,不超过50个字符,超出报错处理 。
+        /// 2、填写了服务开始地点,才能填写服务结束地点。
+        /// 示例值:嗨客时尚主题展餐厅
+        /// </remarks>
+        [JsonPropertyName("end_location")]
+        public string EndLocation { get; set; }
+    }
+}

+ 62 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PostDiscount.cs

@@ -0,0 +1,62 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 商户优惠
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a> - 最新更新时间:2020.04.23</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
+    public class PostDiscount : WeChatPayObject
+    {
+        /// <summary>
+        /// 优惠名称
+        /// </summary>
+        /// <remarks>
+        /// 1、商户优惠项目名称,不超过20个字符。
+        /// 2、优惠项目名称不可重复。
+        /// 示例值:满20减1元 
+        /// </remarks>
+        [JsonPropertyName("name")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 优惠说明
+        /// </summary>
+        /// <remarks>
+        /// 1、优惠使用条件说明,不超过30个字符。
+        /// 示例值:不与其他优惠叠加
+        /// </remarks>
+        [JsonPropertyName("description")]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 优惠金额
+        /// </summary>
+        /// <remarks>
+        /// 1、商户优惠项目金额,大于等于0,单位为分。
+        /// 示例值:100
+        /// </remarks>
+        [JsonPropertyName("amount")]
+        public long? Amount { get; set; }
+
+        /// <summary>
+        /// 优惠数量
+        /// </summary>
+        /// <remarks>
+        /// 优惠的数量,不填时默认为1个。
+        /// 特殊规则:数量限制100,不填时默认1
+        /// 示例值:2
+        /// </remarks>
+        [JsonPropertyName("count")]
+        public uint? Count { get; set; }
+    }
+}

+ 61 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PostPayment.cs

@@ -0,0 +1,61 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 付款项目
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a> - 最新更新时间:2020.04.23</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
+    public class PostPayment : WeChatPayObject
+    {
+        /// <summary>
+        /// 付费项目名称       
+        /// </summary>
+        /// <remarks>
+        /// 相同订单号下不能出现相同的付费项目名称,当参数长度超过20个字符时,报错处理。
+        /// 示例值:就餐费用, 服务费
+        /// </remarks>
+        [JsonPropertyName("name")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 金额 
+        /// </summary>
+        /// <remarks>
+        /// 此付费项目总金额,大于等于0,单位为分,等于0时代表不需要扣费,只能为整数,详见支付金额。
+        /// 示例值:40000       
+        /// </remarks>
+        [JsonPropertyName("amount")]
+        public long? Amount { get; set; }
+
+        /// <summary>
+        /// 计费说明      
+        /// </summary>
+        /// <remarks>
+        /// 描述计费规则,不超过30个字符,超出报错处理
+        /// 示例值:就餐人均100元,服务费:100/小时 
+        /// </remarks>
+        [JsonPropertyName("description")]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 付费数量   
+        /// </summary>
+        /// <remarks>
+        /// 付费项目的数量。
+        /// 特殊规则:数量限制100,不填时默认1。
+        /// 示例值:4    
+        /// </remarks>
+        [JsonPropertyName("count")]
+        public uint? Count { get; set; }
+    }
+}

+ 8 - 4
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PromotionDetail.cs

@@ -6,6 +6,10 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
     /// <summary>
     /// 优惠功能
     /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
     public class PromotionDetail : WeChatPayObject
     {
         /// <summary>
@@ -64,7 +68,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 示例值:0
         /// </summary>
         [JsonPropertyName("wechatpay_contribute")]
-        public int WeChatPayContribute { get; set; }
+        public int? WeChatPayContribute { get; set; }
 
         /// <summary>
         /// 商户出资	
@@ -72,7 +76,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 示例值:0
         /// </summary>
         [JsonPropertyName("merchant_contribute")]
-        public int MerchantContribute { get; set; }
+        public long? MerchantContribute { get; set; }
 
         /// <summary>
         /// 其他出资
@@ -80,7 +84,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 示例值:0
         /// </summary>
         [JsonPropertyName("other_contribute")]
-        public int OtherContribute { get; set; }
+        public long? OtherContribute { get; set; }
 
         /// <summary>
         /// 优惠币种
@@ -95,6 +99,6 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 单品列表信息
         /// </summary>
         [JsonPropertyName("goods_detail")]
-        public List<PromotionGoodsDetail> goods_detail { get; set; }
+        public List<PromotionGoodsDetail> GoodsDetail { get; set; }
     }
 }

+ 8 - 4
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/PromotionGoodsDetail.cs

@@ -4,7 +4,11 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
     /// 单品列表信息
-    /// </summary>    
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
     public class PromotionGoodsDetail : WeChatPayObject
     {
         /// <summary>
@@ -21,7 +25,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 示例值:1
         /// </summary>
         [JsonPropertyName("quantity")]
-        public int Quantity { get; set; }
+        public int? Quantity { get; set; }
 
         /// <summary>
         /// 商品单价
@@ -29,7 +33,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 示例值:100
         /// </summary>
         [JsonPropertyName("unit_price")]
-        public int UnitPrice { get; set; }
+        public long? UnitPrice { get; set; }
 
         /// <summary>
         /// 商品优惠金额
@@ -37,7 +41,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
         /// 示例值:0  
         /// </summary>
         [JsonPropertyName("discount_amount")]
-        public int DiscountAmount { get; set; }
+        public long? DiscountAmount { get; set; }
 
         /// <summary>
         /// 商品备注

+ 11 - 1
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/RiskFund.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/RiskFund.cs

@@ -1,10 +1,20 @@
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
     /// 订单风险金
     /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
     public class RiskFund : WeChatPayObject
     {
         /// <summary>

+ 5 - 2
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/SyncDetail.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/SyncDetail.cs

@@ -1,10 +1,13 @@
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    /// 同步订单-详情
+    /// 内容信息详情
     /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks
     public class SyncDetail : WeChatPayObject
     {
         /// <summary>

+ 85 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/TimeRange.cs

@@ -0,0 +1,85 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 服务时间段
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a> - 最新更新时间:2020.04.23</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a> - 最新更新时间:2020.03.05</para>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
+    public class TimeRange : WeChatPayObject
+    {
+        /// <summary>
+        /// 服务开始时间
+        /// </summary>
+        /// <remarks>
+        /// 用户端展示用途
+        /// 用户下单时确认的服务开始时间(比如用户今天下单,明天开始接受服务,这里指的是明天的服务开始时间).
+        /// 1、不能比【商户使用创建订单时间】早;
+        /// 2、不能比【商户使用完结订单时间】晚。
+        /// 3、根据传入时间精度进行校验,若传入时间精确到秒,则校验精确到秒;若传入时间精确到日,则校验精确到日。
+        /// 4、要求时间格式必须与首次传入格式保持一致,在一致前提下可修改。
+        /// 支持三种格式:“yyyyMMddHHmmss”、“yyyyMMdd” 和 “OnAccept”。
+        /// ● 传入20091225091010表示2009年12月25日9点10分10秒
+        /// ● 传入20091225默认认为时间为2009年12月25日
+        /// ● 传入OnAccept表示用户确认订单成功时间为【服务开始时间】
+        /// 【服务开始时间】不能早于调用接口时间。
+        /// 【建议】
+        ///   实际服务开始时间与创建订单填写的“服务开始时间”一致时,不填写
+        /// 示例值:20091225091010
+        /// </remarks>
+        [JsonPropertyName("start_time")]
+        public string StartTime { get; set; }
+
+        /// <summary>
+        /// 服务开始时间备注
+        /// </summary>
+        /// <remarks>
+        /// 服务开始时间备注说明。
+        /// 1、服务开始时间有填时,可填写服务开始时间备注
+        /// 2、若与【服务开始时间备注】不一致,则以【实际服务开始时间备注】为准,不超过20个字符,超出报错处理。
+        /// 示例值:出账日
+        /// </remarks>
+        [JsonPropertyName("start_time_remark")]
+        public string StartTimeRemark { get; set; }
+
+        /// <summary>
+        /// 服务结束时间
+        /// </summary>
+        /// <remarks>
+        /// 创建订单未填写服务结束时间,则完结的时候,服务结束时间必填
+        /// 1、【实际服务结束时间】>【服务开始时间】。
+        /// 2、不能比【商户使用完结订单时间】晚。
+        /// 3、要求时间格式必须与首次传入格式保持一致,在一致前提下可修改。
+        /// 4、若创建时,服务开始时间为格式3=OnAccept,则完结时间默认精确到秒级。
+        /// 用户端展示用途,支持两种格式:yyyyMMddHHmmss和yyyyMMdd
+        /// ● 传入20091225091010表示2009年12月25日9点10分10秒
+        /// ● 传入20091225默认认为时间为2009年12月25日
+        /// 【建议】
+        ///   实际服务结束实际和预计服务结束时间一致时,不填写
+        /// 示例值:20091225121010
+        /// </remarks>
+        [JsonPropertyName("end_time")]
+        public string EndTime { get; set; }
+
+        /// <summary>
+        /// 服务结束时间备注
+        /// </summary>
+        /// <remarks>
+        /// 服务结束时间备注说明。
+        /// 1、服务结束时间有填时,可填写服务结束时间备注
+        /// 2、若与【服务结束时间备注】不一致,则以【实际服务结束时间备注】为准,不超过20个字符,超出报错处理。
+        /// 示例值:结束租借时间
+        /// </remarks>
+        [JsonPropertyName("end_time_remark")]
+        public string EndTimeRemark { get; set; }
+    }
+}

+ 22 - 19
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsModel.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsBodyModel.cs

@@ -1,35 +1,34 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.Json.Serialization;
+using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    ///  微信支付分 - 商户预授权
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml">商户预授权API</a></para>
+    /// 微信支付分 - 商户预授权 - 请求JSON参数
     /// </summary>
-    public class WeChatPayScorePermissionsModel : WeChatPayObject
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml">商户预授权API</a> - 最新更新时间:2020.07.20</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsBodyModel : WeChatPayObject
     {
         /// <summary>
-        /// AppId
+        /// 服务id
         /// </summary>
         /// <remarks>
-        /// 服务商申请的公众号或移动应用APPID
-        /// 示例值:wxd678efh567hg6787
+        /// 服务ID有本接口对应产品的权限.
+        /// 示例值:500001
         /// </remarks>
-        [JsonPropertyName("appid")]
-        public string AppId { get; set; }
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
 
         /// <summary>
-        /// 支付分服务ID
+        /// 应用ID
         /// </summary>
         /// <remarks>
-        /// 服务ID有本接口对应产品的权限。
-        /// 示例值:500001
+        /// 服务商申请的公众号或移动应用APPID
+        /// 示例值:wxd678efh567hg6787
         /// </remarks>
-        [JsonPropertyName("service_id")]
-        public string ServiceId { get; set; }
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
 
         /// <summary>
         /// 授权协议号
@@ -42,8 +41,12 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         public string AuthorizationCode { get; set; }
 
         /// <summary>
-        /// 商户接收授权回调通知地址 
+        /// 通知地址
         /// </summary>
+        /// <remarks>
+        /// 商户接收授权回调通知的地址 
+        /// 示例值:http://www.qq.com
+        /// </remarks>
         [JsonPropertyName("notify_url")]
         public string NotifyUrl { get; set; }
     }

+ 23 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsQueryForAuthCodeQueryModel.cs

@@ -0,0 +1,23 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 查询用户授权记录(授权协议号)- 请求URL参数
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml">查询用户授权记录(授权协议号)API</a> - 最新更新时间:2020.09.14</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsQueryForAuthCodeQueryModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限。 
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+    }
+}

+ 33 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsQueryForOpenIdQueryModel.cs

@@ -0,0 +1,33 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 查询用户授权记录(openid)- 请求URL参数
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml">查询用户授权记录(openid)API</a> - 最新更新时间:2020.09.14</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsQueryForOpenIdQueryModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限. 
+        /// 示例值:2002000000000558128851361561536
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系,此参数需在本系统先进行配置。 
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+    }
+}

+ 8 - 6
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScorePermissionsTerminateForAuthCodeModel.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsTerminateForAuthCodeBodyModel.cs

@@ -1,18 +1,20 @@
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    ///  微信支付分 - 解除用户授权关系(授权协议号)
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml">解除用户授权关系(授权协议号)API</a></para>
+    /// 微信支付分 - 解除用户授权关系(授权协议号)- 请求JSON参数
     /// </summary>
-    public class WeChatPayScorePermissionsTerminateForAuthCodeModel : WeChatPayObject
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml">解除用户授权关系(授权协议号)API</a> - 最新更新时间:2020.07.20</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsTerminateForAuthCodeBodyModel : WeChatPayObject
     {
         /// <summary>
-        /// 支付分服务ID
+        /// 服务id
         /// </summary>
         /// <remarks>
-        /// 服务ID有本接口对应产品的权限。
+        /// 该服务ID有本接口对应产品的权限. 
         /// 示例值:500001
         /// </remarks>
         [JsonPropertyName("service_id")]

+ 43 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScorePermissionsTerminateForOpenIdBodyModel.cs

@@ -0,0 +1,43 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 解除用户授权关系(openid)- 请求JSON参数
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml">解除用户授权关系(openid)API</a> - 最新更新时间:2020.07.20</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsTerminateForOpenIdBodyModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限.
+        /// 示例值:2002000000000558128851361561536
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系.需要在本系统先进行配置.
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 撤销原因
+        /// </summary>
+        /// <remarks>
+        /// 撤销原因
+        /// 示例值:reason
+        /// </remarks>
+        [JsonPropertyName("reason")]
+        public string Reason { get; set; }
+    }
+}

+ 42 - 10
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderModel.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderBodyModel.cs

@@ -1,24 +1,47 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    ///  微信支付分 - 创建支付分订单 - 请求JSON参数
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a></para>
-    /// </summary>
-    public class WeChatPayScoreServiceOrderModel : WeChatPayScoreModelBase
+    /// 微信支付分 - 创建支付分订单 - 请求JSON参数
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderBodyModel : WeChatPayObject
     {
         /// <summary>
-        /// 商户订单号
+        /// 商户服务订单号
         /// </summary>
         /// <remarks>
         /// 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。
-        /// 详见[商户订单号]。示例值:1234323JKHDFE1243252
+        /// 详见[商户订单号]。
+        /// 示例值:1234323JKHDFE1243252
         /// </remarks>
         [JsonPropertyName("out_order_no")]
         public string OutOrderNo { get; set; }
 
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系。
+        /// 此参数需在本系统先进行配置,并与创建订单时的appid保持一致。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限。
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
         /// <summary>
         /// 服务信息
         /// </summary>
@@ -50,21 +73,30 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         public List<PostDiscount> PostDiscounts { get; set; }
 
         /// <summary>
-        /// 服务时间范围
+        /// 服务时间
         /// </summary>
+        /// <remarks>
+        /// 服务时间范围
+        /// </remarks>
         [JsonPropertyName("time_range")]
         public TimeRange TimeRange { get; set; }
 
         /// <summary>
+        /// 服务位置
+        /// </summary>
+        /// <remarks>
         /// 服务位置信息
         /// 如果传入,用户侧则显示此参数。
-        /// </summary>
+        /// </remarks>
         [JsonPropertyName("location")]
         public Location Location { get; set; }
 
         /// <summary>
-        /// 订单风险金信息
+        /// 订单风险金
         /// </summary>
+        /// <remarks>
+        /// 订单风险金信息
+        /// </remarks>
         [JsonPropertyName("risk_fund")]
         public RiskFund RiskFund { get; set; }
 

+ 46 - 15
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderDirectCompleteModel.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderDirectCompleteBodyModel.cs

@@ -1,16 +1,18 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    ///  微信支付分 - 创单结单合并
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a></para>
+    /// 微信支付分 - 创单结单合并 - 请求JSON参数
     /// </summary>
-    public class WeChatPayScoreServiceOrderDirectCompleteModel : WeChatPayScoreModelBase
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a> - 最新更新时间:2020.04.23</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderDirectCompleteBodyModel : WeChatPayObject
     {
         /// <summary>
-        /// 商户订单号
+        /// 商户服务订单号
         /// </summary>
         /// <remarks>
         /// 商户系统内部服务订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一。
@@ -19,12 +21,37 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         [JsonPropertyName("out_order_no")]
         public string OutOrderNo { get; set; }
 
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系。
+        /// 此参数需在本系统先进行配置,并与创建订单时的appid保持一致。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
         /// <summary>
         /// 用户标识
         /// </summary>
+        /// <remarks>
+        /// 微信用户在商户对应appid下的唯一标识。
+        /// 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
+        /// </remarks>
         [JsonPropertyName("openid")]
         public string OpenId { get; set; }
 
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限。
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
         /// <summary>
         /// 服务信息
         /// </summary>
@@ -36,35 +63,39 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         public string ServiceIntroduction { get; set; }
 
         /// <summary>
-        /// 付费项目
+        /// 付费项目
         /// </summary>
         /// <remarks>
-        /// 后付费项目列表,最多包含100条付费项目。
-        /// 如果传入,用户侧则显示此参数。
+        /// 付费项目列表,最多包含100条付费项目。
         /// </remarks>
         [JsonPropertyName("post_payments")]
         public List<PostPayment> PostPayments { get; set; }
 
         /// <summary>
-        /// 后付费商户优惠
+        /// 商户优惠
         /// </summary>
         /// <remarks>
-        /// 后付费商户优惠列表,最多包含30条商户优惠。
+        /// 商户优惠列表,最多包含30条商户优惠。
         /// 如果传入,用户侧则显示此参数。
         /// </remarks>
         [JsonPropertyName("post_discounts")]
-        public List<ModifyPostDiscount> PostDiscounts { get; set; }
-                
+        public List<PostDiscount> PostDiscounts { get; set; }
+
         /// <summary>
-        /// 服务时间范围
+        /// 服务时间
         /// </summary>
+        /// <remarks>
+        /// 服务时间范围
+        /// </remarks>
         [JsonPropertyName("time_range")]
         public TimeRange TimeRange { get; set; }
 
         /// <summary>
-        /// 服务位置信息
-        /// 如果传入,用户侧则显示此参数。
+        /// 服务位置
         /// </summary>
+        /// <remarks>
+        /// 如果传入,用户侧则显示此参数。
+        /// </remarks>
         [JsonPropertyName("location")]
         public Location Location { get; set; }
 

+ 44 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderOutOrderNoCancelBodyModel.cs

@@ -0,0 +1,44 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 取消支付分订单 - 请求JSON参数
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml">取消支付分订单API</a> - 最新更新时间:2020.04.23</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderOutOrderNoCancelBodyModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系。
+        /// 此参数需在本系统先进行配置,并与创建订单时的appid保持一致。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限。
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
+        /// <summary>
+        /// 取消原因
+        /// </summary>
+        /// <remarks>
+        /// 最多30个字符,每个汉字/数字/英语都按1个字符计算超过长度报错处理。
+        /// 示例值:用户投诉
+        /// </remarks>
+        [JsonPropertyName("reason")]
+        public string Reason { get; set; }
+    }
+}

+ 42 - 10
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderCompleteModel.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderOutOrderNoCompleteBodyModel.cs

@@ -1,20 +1,41 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    ///  微信支付分 - 完结支付分订单
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a></para>
+    /// 微信支付分 - 完结支付分订单 - 请求JSON参数
     /// </summary>
-    public class WeChatPayScoreServiceOrderCompleteModel : WeChatPayScoreModelBase
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderOutOrderNoCompleteBodyModel : WeChatPayObject
     {
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系,此参数需在本系统先进行配置。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 服务订单的主键,唯一定义此资源的标识
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
         /// <summary>
         /// 后付费项目
         /// </summary>
         /// <remarks>
         /// 后付费项目列表,最多包含100条付费项目。
-        /// 如果传入,用户侧则显示此参数。
         /// </remarks>
         [JsonPropertyName("post_payments")]
         public List<PostPayment> PostPayments { get; set; }
@@ -27,28 +48,39 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 如果传入,用户侧则显示此参数。
         /// </remarks>
         [JsonPropertyName("post_discounts")]
-        public List<ModifyPostDiscount> PostDiscounts { get; set; }
+        public List<PostDiscount> PostDiscounts { get; set; }
 
         /// <summary>
         /// 总金额       
         /// </summary>
         /// <remarks>
-        /// 总金额,单位为分,不能超过完结订单时候的总金额,只能为整数,详见支付金额。此参数需满足:总金额 =(修改后付费项目1…+修改后完结付费项目n)-(修改 后付费商户优惠项目1…+修改后付费商户优惠项目n)
+        /// 1、金额:数字,必须≥0(单位:分),只能为整数,详见支付金额。
+        /// 2、总金额 =(完结付费项目1…+完结付费项目n)-(完结商户优惠项目1…+完结商户优惠项目n)
+        /// 3、总金额上限
+        ///   1)【评估不通过:交押金】模式:总金额≤创单时填写的“订单风险金额”
+        ///   2)【评估不通过:拒绝】模式:总金额≤“每个服务ID的风险金额上限”
         /// 示例值:50000
         /// </remarks>
         [JsonPropertyName("total_amount")]
         public long TotalAmount { get; set; }
 
         /// <summary>
-        /// 服务时间范围
+        /// 服务时间
         /// </summary>
+        /// <remarks>
+        /// 服务时间范围,创建订单未填写服务结束时间,则完结的时候,服务结束时间必填
+        /// 如果传入,用户侧则显示此参数。
+        /// </remarks>
         [JsonPropertyName("time_range")]
         public TimeRange TimeRange { get; set; }
 
         /// <summary>
-        /// 服务位置信息
-        /// 如果传入,用户侧则显示此参数。
+        /// 服务位置
         /// </summary>
+        /// <remarks>
+        /// 服务位置
+        /// 如果传入,用户侧则显示此参数。
+        /// </remarks>
         [JsonPropertyName("location")]
         public Location Location { get; set; }
 

+ 28 - 5
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Domain/WeChatPayScoreServiceOrderModifyModel.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderOutOrderNoModifyBodyModel.cs

@@ -1,14 +1,37 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
 {
     /// <summary>
-    ///  微信支付分 - 修改订单金额API
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a></para>
+    /// 微信支付分 - 修改订单金额 - 请求JSON参数
     /// </summary>
-    public class WeChatPayScoreServiceOrderModifyModel : WeChatPayScoreModelBase
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderOutOrderNoModifyBodyModel : WeChatPayObject
     {
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系。
+        /// 此参数需在本系统先进行配置,并与创建订单时的appid保持一致。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限,需要与创建订单时保持一致。
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
         /// <summary>
         /// 后付费项目
         /// </summary>
@@ -27,7 +50,7 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain
         /// 如果传入,用户侧则显示此参数。
         /// </remarks>
         [JsonPropertyName("post_discounts")]
-        public List<ModifyPostDiscount> PostDiscounts { get; set; }
+        public List<PostDiscount> PostDiscounts { get; set; }
 
         /// <summary>
         /// 总金额       

+ 33 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderPayBodyModel.cs

@@ -0,0 +1,33 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 商户发起催收扣款 - 请求JSON参数
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml">商户发起催收扣款API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderPayBodyModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系,此参数需在本系统先进行配置。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限。
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderQueryModel.cs

@@ -0,0 +1,52 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 查询支付分订单 - 请求URL参数
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a></para>
+    /// </summary>
+    public class WeChatPayScoreServiceOrderQueryModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 商户系统内部服务订单号(不是交易单号),与创建订单时一致
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        [JsonPropertyName("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 回跳查询ID
+        /// </summary>
+        /// <remarks>
+        /// 微信侧回跳到商户前端时用于查单的单据查询id。详见章节“小程序跳转接口,回跳商户接口”。
+        /// 商户单号与回跳查询id必填其中一个.不允许都填写或都不填写。
+        /// 示例值:15646546545165651651
+        /// </remarks>
+        [JsonPropertyName("query_id")]
+        public string QueryId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系,此参数需在本系统先进行配置。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+    }
+}

+ 54 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Domain/WeChatPayScoreServiceOrderSyncBodyModel.cs

@@ -0,0 +1,54 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain
+{
+    /// <summary>
+    /// 微信支付分 - 同步服务订单信息 - 请求JSON参数
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks
+    public class WeChatPayScoreServiceOrderSyncBodyModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 微信公众平台分配的与传入的商户号建立了支付绑定关系的appid,可在公众平台查看绑定关系。
+        /// 此参数需在本系统先进行配置,并与创建订单时的appid保持一致。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 该服务ID有本接口对应产品的权限,需要与创建订单时保持一致。
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
+        /// <summary>
+        /// 场景类型
+        /// </summary>
+        /// <remarks>
+        /// 场景类型为“Order_Paid”,字符串表示“订单收款成功” 。
+        /// 示例值:Order_Paid
+        /// </remarks>
+        [JsonPropertyName("type")]
+        public string Type { get; set; }
+
+        /// <summary>
+        /// 内容信息详情
+        /// </summary>
+        /// <remarks>
+        /// 场景类型为Order_Paid时,为必填项。
+        /// </remarks>
+        [JsonPropertyName("detail")]
+        public SyncDetail Detail { get; set; }
+    }
+}

+ 0 - 1
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/IWeChatPayPostRequest.cs

@@ -19,7 +19,6 @@
         /// <summary>
         /// 设置BodyModel
         /// </summary>
-        /// <param name="bodyModel"></param>
         void SetBodyModel(WeChatPayObject bodyModel);
     }
 }

+ 79 - 48
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Notify/WeChatPayScoreNotifyBase.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Notify/WeChatPayScoreUserConfirmNotify.cs

@@ -1,39 +1,64 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Domain;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Notify
 {
-    public abstract class WeChatPayScoreNotifyBase : WeChatPayNotify
+    /// <summary>
+    /// 微信支付分 - 确认订单回调通知
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml">确认订单回调通知API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreUserConfirmNotify : WeChatPayNotify
     {
         /// <summary>
-        /// 商户订单号
-        /// </summary>
-        [JsonPropertyName("out_order_no")]
-        public virtual string OutOrderNo { get; set; }
-
-        /// <summary>
-        /// AppId
+        /// 公众账号ID
         /// </summary>
+        /// <remarks>
+        /// 调用授权服务接口提交的公众账号ID。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
         [JsonPropertyName("appid")]
-        public virtual string AppId { get; set; }
+        public string AppId { get; set; }
 
         /// <summary>
         /// 商户号
         /// </summary>
+        /// <remarks>
+        /// 调用授权服务接口提交的商户号。
+        /// 示例值:1230000109
+        /// </remarks>
         [JsonPropertyName("mchid")]
-        public virtual string MchId { get; set; }
+        public string MchId { get; set; }
 
         /// <summary>
-        /// 支付分服务ID
+        /// 商户服务订单号
         /// </summary>
+        /// <remarks>
+        /// 调用接口提交的商户服务订单号。
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        [JsonPropertyName("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 调用授权服务接口提交的服务ID。
+        /// 示例值:500001
+        /// </remarks>
         [JsonPropertyName("service_id")]
-        public virtual string ServiceId { get; set; }
+        public string ServiceId { get; set; }
 
         /// <summary>
-        /// 微信用户在商户对应appid下的唯一标识
+        /// 用户标识
         /// </summary>
+        /// <remarks>
+        /// 微信用户在商户对应appid下的唯一标识。
+        /// 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
+        /// </remarks>
         [JsonPropertyName("openid")]
         public string OpenId { get; set; }
 
@@ -42,13 +67,12 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
         /// </summary>
         /// <remarks>
         /// 表示当前单据状态。
-        ///  枚举值:
-        ///  DOING:服务订单进行中
-        ///  DONE:服务订单完成
-        ///  示例值:DONE
+        /// 枚举值:
+        /// 1、DOING:服务订单进行中
+        /// 示例值:DOING
         /// </remarks>
         [JsonPropertyName("state")]
-        public virtual string State { get; set; }
+        public string State { get; set; }
 
         /// <summary>
         /// 订单状态说明
@@ -56,11 +80,10 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
         /// <remarks>
         /// 对服务订单"进行中"状态的附加说明。
         /// 1、USER_CONFIRM:用户确认
-        /// 2、MCH_COMPLETE:商户完结
-        /// 示例值:MCH_COMPLETE
+        /// 示例值:USER_CONFIRM
         /// </remarks>
         [JsonPropertyName("state_description")]
-        public virtual string StateDescription { get; set; }
+        public string StateDescription { get; set; }
 
         /// <summary>
         /// 商户收款总金额
@@ -71,66 +94,74 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
         /// 示例值:40000
         /// </remarks>
         [JsonPropertyName("total_amount")]
-        public virtual long TotalAmount { get; set; }
+        public long? TotalAmount { get; set; }
 
         /// <summary>
         /// 服务信息
         /// </summary>
         /// <remarks>
-        /// 服务信息,用于介绍本订单所提供的服务 ,当参数长度超过20个字符时,报错处理。
-        /// 示例值:某某酒店
+        /// 服务信息,用于介绍本订单所提供的服务
+        /// 不超过20个字符,超出报错处理。
+        /// 示例值:嗨客餐厅用餐
         /// </remarks>
         [JsonPropertyName("service_introduction")]
-        public virtual string ServiceIntroduction { get; set; }
+        public string ServiceIntroduction { get; set; }
 
         /// <summary>
         /// 后付费项目
         /// </summary>
         /// <remarks>
         /// 后付费项目列表,最多包含100条付费项目。
-        /// 如果传入,用户侧则显示此参数。
         /// </remarks>
         [JsonPropertyName("post_payments")]
-        public virtual List<PostPayment> PostPayments { get; set; }
+        public List<PostPayment> PostPayments { get; set; }
 
         /// <summary>
         /// 后付费商户优惠
         /// </summary>
         /// <remarks>
         /// 后付费商户优惠列表,最多包含30条商户优惠。
-        /// 如果传入,用户侧则显示此参数。
         /// </remarks>
         [JsonPropertyName("post_discounts")]
-        public virtual List<ModifyPostDiscount> PostDiscounts { get; set; }
+        public List<PostDiscount> PostDiscounts { get; set; }
 
         /// <summary>
-        /// 服务时间范围
+        /// 订单风险金
         /// </summary>
-        [JsonPropertyName("time_range")]
-        public virtual TimeRange TimeRange { get; set; }
+        /// <remarks>
+        /// 订单风险金信息
+        /// </remarks>
+        [JsonPropertyName("risk_fund")]
+        public RiskFund RiskFund { get; set; }
 
         /// <summary>
-        /// 服务位置信息
-        /// 如果传入,用户侧则显示此参数。
+        /// 服务时间段
         /// </summary>
-        [JsonPropertyName("location")]
-        public virtual Location Location { get; set; }
+        /// <remarks>
+        /// 服务使用时间范围
+        /// </remarks>
+        [JsonPropertyName("time_range")]
+        public TimeRange TimeRange { get; set; }
 
         /// <summary>
-        /// 订单风险金信息
+        /// 服务位置
         /// </summary>
-        [JsonPropertyName("risk_fund")]
-        public virtual RiskFund RiskFund { get; set; }
+        /// <remarks>
+        /// 服务使用位置信息。
+        /// </remarks>
+        [JsonPropertyName("location")]
+        public Location Location { get; set; }
 
         /// <summary>
         /// 商户数据包
         /// </summary>
         /// <remarks>
-        /// 商户数据包可存放本订单所需信息,需要先urlencode后传入。 当商户数据包总长度超出256字符时,报错处理。
-        /// 示例值:Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald
+        /// 商户数据包可存放本订单所需信息,需要先urlencode后传入。
+        /// 当商户数据包总长度超出256字符时,报错处理。
+        /// 示例值:attach
         /// </remarks>
         [JsonPropertyName("attach")]
-        public virtual string Attach { get; set; }
+        public string Attach { get; set; }
 
         /// <summary>
         /// 微信支付服务订单号
@@ -140,18 +171,18 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
         /// 示例值:15646546545165651651
         /// </remarks>
         [JsonPropertyName("order_id")]
-        public virtual string OrderId { get; set; }
+        public string OrderId { get; set; }
 
         /// <summary>
         /// 是否需要收款
         /// </summary>
         /// <remarks>
-        /// 是否需要收款,非0元完结后返回
+        /// 是否需要收款
         /// true:微信支付分代收款
         /// false:无需微信支付分代收款
         /// 示例值:true
         /// </remarks>
         [JsonPropertyName("need_collection")]
-        public virtual bool NeedCollection { get; set; }
+        public bool NeedCollection { get; set; }
     }
 }

+ 25 - 8
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Notify/WeChatPayScorePermissionsOpenOrCancelNotify.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Notify/WeChatPayScoreUserOpenOrCloseNotify.cs

@@ -1,23 +1,32 @@
 using System.Text.Json.Serialization;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Notify
 {
     /// <summary>
-    /// 开启/解除授权服务回调通知
-    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_10.shtml">开启/解除授权服务回调通知API</a></para>
+    /// 微信支付分 - 开启/解除授权服务回调通知
     /// </summary>
-    public class WeChatPayScorePermissionsOpenOrCancelNotify : WeChatPayNotify
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_10.shtml">开启/解除授权服务回调通知API</a> - 最新更新时间:2020.07.24</para>
+    /// </remarks>
+    public class WeChatPayScoreUserOpenOrCloseNotify : WeChatPayNotify
     {
         /// <summary>
-        /// AppId
+        /// 公众账号ID
         /// </summary>
+        /// <remarks>
+        /// 调用授权服务接口提交的公众账号ID。
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
         [JsonPropertyName("appid")]
         public string AppId { get; set; }
 
         /// <summary>
         /// 商户号
         /// </summary>
+        /// <remarks>
+        /// 调用授权服务接口提交的商户号。
+        /// 示例值:1230000109
+        /// </remarks>
         [JsonPropertyName("mchid")]
         public string MchId { get; set; }
 
@@ -32,14 +41,22 @@ namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Notify
         public string OutRequestNo { get; set; }
 
         /// <summary>
-        /// 支付分服务ID
+        /// 服务ID
         /// </summary>
+        /// <remarks>
+        /// 调用授权服务接口提交的服务ID。
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
         [JsonPropertyName("service_id")]
         public string ServiceId { get; set; }
 
         /// <summary>
-        /// 微信用户在商户对应appid下的唯一标识
+        /// 用户标识
         /// </summary>
+        /// <remarks>
+        /// 微信用户在商户对应appid下的唯一标识。
+        /// 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
+        /// </remarks>
         [JsonPropertyName("openid")]
         public string OpenId { get; set; }
 

+ 208 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Notify/WeChatPayScoreUserPaidNotify.cs

@@ -0,0 +1,208 @@
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Notify
+{
+    /// <summary>
+    /// 微信支付分 - 支付成功回调通知
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_22.shtml">支付成功回调通知API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
+    public class WeChatPayScoreUserPaidNotify : WeChatPayNotify
+    {
+        /// <summary>
+        /// 应用ID
+        /// </summary>
+        /// <remarks>
+        /// 调用接口提交的公众账号ID
+        /// 示例值:wxd678efh567hg6787
+        /// </remarks>
+        [JsonPropertyName("appid")]
+        public string AppId { get; set; }
+
+        /// <summary>
+        /// 商户号
+        /// </summary>
+        /// <remarks>
+        /// 调用接口提交的商户号
+        /// 示例值:1230000109
+        /// </remarks>
+        [JsonPropertyName("mchid")]
+        public string MchId { get; set; }
+
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 调用接口提交的商户服务订单号
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        [JsonPropertyName("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 服务ID
+        /// </summary>
+        /// <remarks>
+        /// 调用该接口提交的服务ID
+        /// 示例值:500001
+        /// </remarks>
+        [JsonPropertyName("service_id")]
+        public string ServiceId { get; set; }
+
+        /// <summary>
+        /// 用户标识
+        /// </summary>
+        /// <remarks>
+        /// 微信用户在商户对应appid下的唯一标识。
+        /// 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
+        /// </remarks>
+        [JsonPropertyName("openid")]
+        public string OpenId { get; set; }
+
+        /// <summary>
+        /// 服务订单状态
+        /// </summary>
+        /// <remarks>
+        /// 表示当前单据状态。
+        /// 枚举值:
+        /// 1、DOING:服务订单进行中
+        /// 示例值:DOING
+        /// </remarks>
+        [JsonPropertyName("state")]
+        public string State { get; set; }
+
+        /// <summary>
+        /// 订单状态说明
+        /// </summary>
+        /// <remarks>
+        /// 对服务订单"进行中"状态的附加说明:
+        /// USER_CONFIRM:用户确认
+        ///  MCH_COMPLETE:商户完结
+        /// 示例值:MCH_COMPLETE
+        /// </remarks>
+        [JsonPropertyName("state_description")]
+        public string StateDescription { get; set; }
+
+        /// <summary>
+        /// 商户收款总金额
+        /// </summary>
+        /// <remarks>
+        /// 总金额,大于等于0的数字,单位为分,只能为整数,详见支付金额。
+        /// 此参数需满足:总金额=后付费项目金额之和-后付费商户优惠项目金额之和,且小于等于订单风险金额。取消订单时,该字段必须为0。
+        /// 示例值:40000
+        /// </remarks>
+        [JsonPropertyName("total_amount")]
+        public long? TotalAmount { get; set; }
+
+        /// <summary>
+        /// 服务信息
+        /// </summary>
+        /// <remarks>
+        /// 服务信息,用于介绍本订单所提供的服务
+        /// 不超过20个字符,超出报错处理。
+        /// 示例值:嗨客餐厅用餐
+        /// </remarks>
+        [JsonPropertyName("service_introduction")]
+        public string ServiceIntroduction { get; set; }
+
+        /// <summary>
+        /// 后付费项目
+        /// </summary>
+        /// <remarks>
+        /// 后付费项目列表,最多包含100条付费项目。
+        /// </remarks>
+        [JsonPropertyName("post_payments")]
+        public List<PostPayment> PostPayments { get; set; }
+
+        /// <summary>
+        /// 后付费商户优惠
+        /// </summary>
+        /// <remarks>
+        /// 后付费商户优惠列表,最多包含30条商户优惠。
+        /// </remarks>
+        [JsonPropertyName("post_discounts")]
+        public List<PostDiscount> PostDiscounts { get; set; }
+
+        /// <summary>
+        /// 订单风险金
+        /// </summary>
+        /// <remarks>
+        /// 订单风险金信息
+        /// </remarks>
+        [JsonPropertyName("risk_fund")]
+        public RiskFund RiskFund { get; set; }
+
+        /// <summary>
+        /// 服务时间段
+        /// </summary>
+        /// <remarks>
+        /// 服务使用时间范围
+        /// </remarks>
+        [JsonPropertyName("time_range")]
+        public TimeRange TimeRange { get; set; }
+
+        /// <summary>
+        /// 服务位置
+        /// </summary>
+        /// <remarks>
+        /// 服务使用位置信息。
+        /// </remarks>
+        [JsonPropertyName("location")]
+        public Location Location { get; set; }
+
+        /// <summary>
+        /// 商户数据包
+        /// </summary>
+        /// <remarks>
+        /// 商户数据包可存放本订单所需信息,需要先urlencode后传入。
+        /// 当商户数据包总长度超出256字符时,报错处理。
+        /// 示例值:attach
+        /// </remarks>
+        [JsonPropertyName("attach")]
+        public string Attach { get; set; }
+
+        /// <summary>
+        /// 商户回调地址
+        /// </summary>
+        /// <remarks>
+        /// 商户接收用户确认订单和付款成功回调通知的地址。
+        /// 示例值:https://api.test.com
+        /// </remarks>
+        [JsonPropertyName("notify_url")]
+        public string NotifyUrl { get; set; }
+
+        /// <summary>
+        /// 微信支付服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 微信支付服务订单号,每个微信支付服务订单号与商户号下对应的商户服务订单号一一对应。
+        /// 示例值:15646546545165651651
+        /// </remarks>
+        [JsonPropertyName("order_id")]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 是否需要收款
+        /// </summary>
+        /// <remarks>
+        /// 是否需要收款,非0元完结后返回
+        /// true:微信支付分代收款
+        /// false:无需微信支付分代收款
+        /// 示例值:true
+        /// </remarks>
+        [JsonPropertyName("need_collection")]
+        public bool NeedCollection { get; set; }
+
+        /// <summary>
+        /// 收款信息
+        /// </summary>
+        /// <remarks>
+        /// 收款信息,非0元完结后返回
+        /// </remarks>
+        [JsonPropertyName("collection")]
+        public Collection Collection { get; set; }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsQueryForAuthCodeRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 查询用户授权记录(授权协议号)
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_3.shtml">查询用户授权记录(授权协议号)API</a> - 最新更新时间:2020.09.14</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsQueryForAuthCodeRequest : IWeChatPayGetRequest<WeChatPayScorePermissionsQueryForAuthCodeResponse>
+    {
+        private WeChatPayObject queryModel;
+
+        /// <summary>
+        /// 授权协议号
+        /// </summary>
+        /// <remarks>
+        /// 预授权成功时的授权协议号
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        public string AuthorizationCode { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/authorization-code/{AuthorizationCode}";
+        }
+
+        public WeChatPayObject GetQueryModel()
+        {
+            return queryModel;
+        }
+
+        public void SetQueryModel(WeChatPayObject queryModel)
+        {
+            this.queryModel = queryModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsQueryForOpenIdRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 查询用户授权记录(openid)
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_5.shtml">查询用户授权记录(openid)API</a> - 最新更新时间:2020.09.14</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsQueryForOpenIdRequest : IWeChatPayGetRequest<WeChatPayScorePermissionsQueryForOpenIdResponse>
+    {
+        private WeChatPayObject queryModel;
+
+        /// <summary>
+        /// 用户标识
+        /// </summary>
+        /// <remarks>
+        /// 微信用户在商户对应appid下的唯一标识 
+        /// 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
+        /// </remarks>
+        public string OpenId { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/openid/{OpenId}";
+        }
+
+        public WeChatPayObject GetQueryModel()
+        {
+            return queryModel;
+        }
+
+        public void SetQueryModel(WeChatPayObject queryModel)
+        {
+            this.queryModel = queryModel;
+        }
+    }
+}

+ 30 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsRequest.cs

@@ -0,0 +1,30 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 商户预授权
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_2.shtml">商户预授权API</a> - 最新更新时间:2020.07.20</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsRequest : IWeChatPayPostRequest<WeChatPayScorePermissionsResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        public string GetRequestUrl()
+        {
+            return "https://api.mch.weixin.qq.com/v3/payscore/permissions";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsTerminateForAuthCodeRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 解除用户授权关系(授权协议号)
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_4.shtml">解除用户授权关系(授权协议号)API</a> - 最新更新时间:2020.07.20</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsTerminateForAuthCodeRequest : IWeChatPayPostRequest<WeChatPayScorePermissionsTerminateForAuthCodeResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 授权协议号
+        /// </summary>
+        /// <remarks>
+        /// 预授权成功时的授权协议号
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        public string AuthorizationCode { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/authorization-code/{AuthorizationCode}/terminate";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScorePermissionsTerminateForOpenIdRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 解除用户授权关系(openid)
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_6.shtml">解除用户授权关系(openid)API</a> - 最新更新时间:2020.07.20</para>
+    /// </remarks>
+    public class WeChatPayScorePermissionsTerminateForOpenIdRequest : IWeChatPayPostRequest<WeChatPayScorePermissionsTerminateForOpenIdResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 用户标识
+        /// </summary>
+        /// <remarks>
+        /// 微信用户在商户对应appid下的唯一标识
+        /// 示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
+        /// </remarks>
+        public string OpenId { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/permissions/openid/{OpenId}/terminate";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 12 - 11
src/Essensoft.AspNetCore.Payment.WeChatPay/Payscore/Request/WeChatPayScoreServiceOrderDirectCompleteRequest.cs → src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderDirectCompleteRequest.cs

@@ -1,29 +1,30 @@
-using Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Response;
-using Essensoft.AspNetCore.Payment.WeChatPay.V3;
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
 
-namespace Essensoft.AspNetCore.Payment.WeChatPay.Payscore.Request
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
 {
     /// <summary>
-    ///  微信支付分 - 创单结单合并
-    ///  <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a></para>
+    /// 微信支付分 - 创单结单合并
     /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_1.shtml">创单结单合并API</a> - 最新更新时间:2020.04.23</para>
+    /// </remarks>
     public class WeChatPayScoreServiceOrderDirectCompleteRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderDirectCompleteResponse>
     {
-        private WeChatPayObject _bodyModel;
+        private WeChatPayObject bodyModel;
 
-        public WeChatPayObject GetBodyModel()
+        public string GetRequestUrl()
         {
-            return _bodyModel;
+            return "https://api.mch.weixin.qq.com/v3/payscore/serviceorder/direct-complete";
         }
 
-        public string GetRequestUrl()
+        public WeChatPayObject GetBodyModel()
         {
-            return "https://api.mch.weixin.qq.com/v3/payscore/serviceorder/direct-complete";
+            return bodyModel;
         }
 
         public void SetBodyModel(WeChatPayObject bodyModel)
         {
-            _bodyModel = bodyModel;
+            this.bodyModel = bodyModel;
         }
     }
 }

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderOutOrderNoCancelRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 取消支付分订单
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_16.shtml">取消支付分订单API</a> - 最新更新时间:2020.04.23</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderOutOrderNoCancelRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderOutOrderNoCancelResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 商户系统内部服务订单号(不是交易单号),与创建订单时一致。
+        /// 示例值:2304203423948239423
+        /// </remarks>
+        public string OutOrderNo { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/cancel";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderOutOrderNoCompleteRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 完结支付分订单
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml">完结支付分订单API</a> - 最新更新时间:2020.06.02</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderOutOrderNoCompleteRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderOutOrderNoCompleteResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 商户系统内部服务订单号(不是交易单号),与创建订单时一致
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        public string OutOrderNo { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/complete";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderOutOrderNoModifyRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 修改订单金额
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_17.shtml">修改订单金额API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderOutOrderNoModifyRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderOutOrderNoModifyResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 商户系统内部订单号(不是交易单号),与创建订单时一致。
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        public string OutOrderNo { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/modify";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderPayRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 商户发起催收扣款
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_19.shtml">商户发起催收扣款API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderPayRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderPayResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 商户系统内部服务订单号(不是交易单号),与创建订单时一致。
+        /// 示例值:2304203423948239423
+        /// </remarks>
+        public string OutOrderNo { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/pay";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 30 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderQueryRequest.cs

@@ -0,0 +1,30 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 查询支付分订单
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml">查询支付分订单API</a> - 最新更新时间:2020.05.25</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderQueryRequest : IWeChatPayGetRequest<WeChatPayScoreServiceOrderQueryResponse>
+    {
+        private WeChatPayObject queryModel;
+
+        public string GetRequestUrl()
+        {
+            return "https://api.mch.weixin.qq.com/v3/payscore/serviceorder";
+        }
+
+        public WeChatPayObject GetQueryModel()
+        {
+            return queryModel;
+        }
+
+        public void SetQueryModel(WeChatPayObject queryModel)
+        {
+            this.queryModel = queryModel;
+        }
+    }
+}

+ 30 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderRequest.cs

@@ -0,0 +1,30 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 创建支付分订单
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_14.shtml">创建支付分订单API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        public string GetRequestUrl()
+        {
+            return "https://api.mch.weixin.qq.com/v3/payscore/serviceorder";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 39 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/V3/Request/WeChatPayScoreServiceOrderSyncRequest.cs

@@ -0,0 +1,39 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.V3.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.V3.Request
+{
+    /// <summary>
+    /// 微信支付分 - 同步服务订单信息
+    /// </summary>
+    /// <remarks>
+    /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_20.shtml">同步服务订单信息API</a> - 最新更新时间:2020.03.05</para>
+    /// </remarks>
+    public class WeChatPayScoreServiceOrderSyncRequest : IWeChatPayPostRequest<WeChatPayScoreServiceOrderSyncResponse>
+    {
+        private WeChatPayObject bodyModel;
+
+        /// <summary>
+        /// 商户服务订单号
+        /// </summary>
+        /// <remarks>
+        /// 商户系统内部订单号(不是交易单号),要求此参数只能由数字、大小写字母_-|*组成,且在同一个商户号下唯一,详见「商户订单号」,需要和创建订单的商户服务订单号一致。
+        /// 示例值:1234323JKHDFE1243252
+        /// </remarks>
+        public string OutOrderNo { get; set; }
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{OutOrderNo}/sync";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

Some files were not shown because too many files changed in this diff