Browse Source

新增 关闭订单API

Roc 5 years ago
parent
commit
cf1d6e0fd6

+ 34 - 0
samples/WebApplicationSample/Controllers/WeChatPayV3Controller.cs

@@ -278,5 +278,39 @@ namespace WebApplicationSample.Controllers
             ViewData["response"] = response.Body;
             return View();
         }
+
+        /// <summary>
+        /// 关闭订单
+        /// </summary>
+        [HttpGet]
+        public IActionResult OutTradeNoClose()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 关闭订单
+        /// </summary>
+        /// <param name="viewModel"></param>
+        [HttpPost]
+        public async Task<IActionResult> OutTradeNoClose(WeChatPayOutTradeNoCloseViewModel viewModel)
+        {
+            var model = new WeChatPayTransactionsOutTradeNoCloseModel
+            {
+                MchId = _optionsAccessor.Value.MchId,
+            };
+
+            var request = new WeChatPayTransactionsOutTradeNoCloseRequest
+            {
+                OutTradeNo = viewModel.OutTradeNo,
+            };
+
+            request.SetBodyModel(model);
+
+            var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
+
+            ViewData["response"] = response.Body;
+            return View();
+        }
     }
 }

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

@@ -95,4 +95,11 @@ namespace WebApplicationSample.Models
         [Display(Name = "out_trade_no")]
         public string OutTradeNo { get; set; }
     }
+
+    public class WeChatPayOutTradeNoCloseViewModel
+    {
+        [Required]
+        [Display(Name = "out_trade_no")]
+        public string OutTradeNo { get; set; }
+    }
 }

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

@@ -60,5 +60,11 @@
             <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_5.shtml" target="_blank">https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{out_trade_no}</a></td>
             <td><a asp-controller="WeChatPayV3" asp-action="QueryByOutTradeNo">立即测试</a></td>
         </tr>
+        <tr>
+            <th scope="row">8</th>
+            <td>关闭订单</td>
+            <td><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_6.shtml" target="_blank">https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{out_trade_no}/close</a></td>
+            <td><a asp-controller="WeChatPayV3" asp-action="OutTradeNoClose">立即测试</a></td>
+        </tr>
     </tbody>
 </table>

+ 33 - 0
samples/WebApplicationSample/Views/WeChatPayV3/OutTradeNoClose.cshtml

@@ -0,0 +1,33 @@
+@model WeChatPayOutTradeNoCloseViewModel
+@{
+    ViewData["Title"] = "关闭订单";
+}
+<nav aria-label="breadcrumb">
+    <ol class="breadcrumb">
+        <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="WeChatPayV3" asp-action="OutTradeNoClose">
+            <div asp-validation-summary="All" class="text-danger"></div>
+            <div class="form-group">
+                <label asp-for="OutTradeNo"></label>
+                <input type="text" class="form-control" asp-for="OutTradeNo" />
+            </div>
+            <button type="submit" class="btn btn-primary">提交请求</button>
+        </form>
+        <hr />
+        <form class="form-horizontal">
+            <div class="form-group">
+                <label>Response:</label>
+                <textarea class="form-control" rows="10">@ViewData["response"]</textarea>
+            </div>
+        </form>
+    </div>
+</div>
+@section Scripts {
+    @{await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
+}

+ 20 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/Domain/WeChatPayTransactionsOutTradeNoCloseModel.cs

@@ -0,0 +1,20 @@
+using System.Text.Json.Serialization;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.Domain
+{
+    /// <summary>
+    /// 关闭订单API-请求参数
+    /// 最新更新时间:2020.05.26
+    /// https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_6.shtml
+    /// </summary>
+    public class WeChatPayTransactionsOutTradeNoCloseModel : WeChatPayObject
+    {
+        /// <summary>
+        /// 直连商户号
+        /// 直连商户的商户号,由微信支付生成并下发。
+        /// 示例值:1230000109
+        /// </summary>
+        [JsonPropertyName("mchid")]
+        public string MchId { get; set; }
+    }
+}

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

@@ -0,0 +1,37 @@
+using Essensoft.AspNetCore.Payment.WeChatPay.Response;
+
+namespace Essensoft.AspNetCore.Payment.WeChatPay.Request
+{
+    /// <summary>
+    /// 关闭订单API
+    /// 最新更新时间:2020.05.26
+    /// https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_6.shtml
+    /// </summary>
+    public class WeChatPayTransactionsOutTradeNoCloseRequest : IWeChatPayV3PostRequest<WeChatPayTransactionsOutTradeNoCloseResponse>
+    {
+        /// <summary>
+        /// 商户订单号
+        /// 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一,详见【商户订单号】。
+        /// 特殊规则:最小字符长度为6
+        /// 示例值:1217752501201407033233368018
+        /// </summary>
+        public string OutTradeNo { get; set; }
+
+        private WeChatPayObject bodyModel;
+
+        public string GetRequestUrl()
+        {
+            return $"https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{OutTradeNo}/close";
+        }
+
+        public WeChatPayObject GetBodyModel()
+        {
+            return bodyModel;
+        }
+
+        public void SetBodyModel(WeChatPayObject bodyModel)
+        {
+            this.bodyModel = bodyModel;
+        }
+    }
+}

+ 11 - 0
src/Essensoft.AspNetCore.Payment.WeChatPay/Response/WeChatPayTransactionsOutTradeNoCloseResponse.cs

@@ -0,0 +1,11 @@
+namespace Essensoft.AspNetCore.Payment.WeChatPay.Response
+{
+    /// <summary>
+    /// 关闭订单API-返回参数
+    /// 最新更新时间:2020.05.26
+    /// https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_6.shtml
+    /// </summary>
+    public class WeChatPayTransactionsOutTradeNoCloseResponse : WeChatPayV3Response
+    {
+    }
+}