From 9f7df6c82745bf3f3722114610653c77fac68a43 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 21 十一月 2025 10:24:38 +0800
Subject: [PATCH] feat:开发

---
 ApiTools.Application/ApiTools.Application.csproj                            |    4 
 ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs                                |   18 +
 ApiTools.Core/Models/WxmpUtils/Commands/WxmpSendSubscribMessageCommand.cs   |   47 +++
 ApiTools.Web.Entry/appsettings.json                                         |   29 ++
 ApiTools.Core/Enums/WxmpUtils/EnumWxmpSubscribMessageTemplate.cs            |   35 ++
 ApiTools.Core/Utils/WxmpUtils/WxmpSendSubscribMessageRequest.cs             |   80 ++++++
 ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs  |   66 +++++
 /dev/null                                                                   |   36 ---
 ApiTools.Application/ApiTools.Application.xml                               |   32 +-
 ApiTools.Core/Enums/Resources/EnumResourceController.cs                     |    4 
 ApiTools.Core/Utils/WxmpUtils/WxmpGetQrCodeRequest.cs                       |   69 -----
 ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs                                  |   31 +-
 ApiTools.Core/ApiTools.Core.xml                                             |  228 ++++++++++--------
 ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs |   22 +
 14 files changed, 455 insertions(+), 246 deletions(-)

diff --git a/ApiTools.Application/ApiTools.Application.csproj b/ApiTools.Application/ApiTools.Application.csproj
index 4c7484c..806b4d8 100644
--- a/ApiTools.Application/ApiTools.Application.csproj
+++ b/ApiTools.Application/ApiTools.Application.csproj
@@ -16,4 +16,8 @@
 		<ProjectReference Include="..\ApiTools.Core\ApiTools.Core.csproj" />
 	</ItemGroup>
 
+	<ItemGroup>
+	  <Folder Include="WxUtils\Queries\" />
+	</ItemGroup>
+
 </Project>
diff --git a/ApiTools.Application/ApiTools.Application.xml b/ApiTools.Application/ApiTools.Application.xml
index a8261f0..c54741f 100644
--- a/ApiTools.Application/ApiTools.Application.xml
+++ b/ApiTools.Application/ApiTools.Application.xml
@@ -215,6 +215,22 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:ApiTools.Application.WxmpSubscribMessageCommandHandler.Handle(ApiTools.Core.WxmpSendSubscribMessageCommand,System.Threading.CancellationToken)">
+            <summary>
+            寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ApiTools.Application.WxmpSubscribMessageCommandHandler.Handle(ApiTools.Core.WxmpSubscribMessageNotifyCommand,System.Threading.CancellationToken)">
+            <summary>
+            寰俊灏忕▼搴忚闃呮秷鎭�氱煡
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
         <member name="T:ApiTools.CommonServer.Application.SaveSmsSettingCommandHandler">
             <summary>
             淇濆瓨鐭俊閰嶇疆
@@ -282,22 +298,6 @@
         <member name="M:ApiTools.CommonServer.Application.GetSmsSettingQueryHandler.Handle(ApiTools.Core.GetSmsSettingQuery,System.Threading.CancellationToken)">
             <summary>
             鏌ヨ鐭俊閰嶇疆
-            </summary>
-            <param name="request"></param>
-            <param name="cancellationToken"></param>
-            <returns></returns>
-        </member>
-        <member name="M:ApiTools.CommonServer.Application.SaveWxCommandHandler.Handle(ApiTools.Core.SaveWxSendCommand,System.Threading.CancellationToken)">
-            <summary>
-            璇ユ帴鍙g敤浜庡彂閫佽闃呮秷鎭�
-            </summary>
-            <param name="request"></param>
-            <param name="cancellationToken"></param>
-            <returns></returns>
-        </member>
-        <member name="M:ApiTools.CommonServer.Application.SaveWxSettingCommandHandler.Handle(ApiTools.Core.SaveWxSettingCommand,System.Threading.CancellationToken)">
-            <summary>
-            淇濆瓨寰俊閰嶇疆
             </summary>
             <param name="request"></param>
             <param name="cancellationToken"></param>
diff --git a/ApiTools.Application/WxUtils/Commands/SaveWxCommandHandler.cs b/ApiTools.Application/WxUtils/Commands/SaveWxCommandHandler.cs
deleted file mode 100644
index 18489f4..0000000
--- a/ApiTools.Application/WxUtils/Commands/SaveWxCommandHandler.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-锘縰sing ApiTools.Core;
-using Baidu.Aip;
-using MediatR;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.CommonServer.Application
-{
-    public class SaveWxCommandHandler(WxmpUtils utils) : IRequestHandler<SaveWxSendCommand, string>
-    {
-        private readonly WxmpUtils utils = utils;
-        /// <summary>
-        /// 璇ユ帴鍙g敤浜庡彂閫佽闃呮秷鎭�
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public async Task<string> Handle(SaveWxSendCommand request, CancellationToken cancellationToken)
-        {
-            return await utils.WxSend(new SendRequest
-            {
-                WxmpCode = request.WxmpCode,
-                //EnvVersion = request.EnvVersion,
-                Template_id = request.Template_id.ToString(),
-                Page = request.Page,
-                Touser = request.Touser,
-                Data = request.Data,
-                //miniprogram_state = request.miniprogram_state,
-                Lang = request.Lang
-            });
-        }
-    }
-}
diff --git a/ApiTools.Application/WxUtils/Commands/SaveWxSettingCommandHandler.cs b/ApiTools.Application/WxUtils/Commands/SaveWxSettingCommandHandler.cs
deleted file mode 100644
index 7267a12..0000000
--- a/ApiTools.Application/WxUtils/Commands/SaveWxSettingCommandHandler.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-锘縰sing ApiTools.Core;
-using Furion.DatabaseAccessor;
-using Mapster;
-using MediatR;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.CommonServer.Application
-{
-    public class SaveWxSettingCommandHandler(IRepository<WxSetting> rep) :IRequestHandler<SaveWxSettingCommand, Guid>
-    {
-        private readonly IRepository<WxSetting> rep = rep;
-
-        /// <summary>
-        /// 淇濆瓨寰俊閰嶇疆
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public async Task<Guid> Handle(SaveWxSettingCommand request, CancellationToken cancellationToken)
-        {
-            var logier = JwtUtils.GetCurrentLogier();
-            var entity = await rep.AsQueryable()
-                .Where(it => it.Code == request.Code)
-                .FirstOrDefaultAsync();
-            var add = false;
-            if (entity == null)
-            {
-                entity = new WxSetting();
-                entity.Code = request.Code;
-                entity.AppId = request.AppId;
-                entity.AppSecret = request.AppSecret;
-                entity.EnvVersion = request.EnvVersion;
-                add = true;
-            }
-            request.Adapt(entity);
-            if (add)
-            {
-                await rep.InsertAsync(entity);
-            }
-            else
-            {
-                await rep.UpdateAsync(entity);
-            }
-            return entity.Id;
-            //return Guid.NewGuid();
-        }
-    }
-}
diff --git a/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs b/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs
new file mode 100644
index 0000000..25a8315
--- /dev/null
+++ b/ApiTools.Application/WxUtils/Commands/WxmpSubscribMessageCommandHandler.cs
@@ -0,0 +1,66 @@
+锘縰sing Aop.Api.Domain;
+using ApiTools.Core;
+using log4net.Core;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Application
+{
+    public class WxmpSubscribMessageCommandHandler(
+            ILogger<WxmpSubscribMessageCommandHandler> logger,
+            WxmpUtils utils,
+            IHttpContextAccessor httpContextAccessor
+        ) :
+        IRequestHandler<WxmpSendSubscribMessageCommand, Guid>,
+        IRequestHandler<WxmpSubscribMessageNotifyCommand, bool>
+    {
+        private readonly ILogger<WxmpSubscribMessageCommandHandler> logger = logger;
+        private readonly WxmpUtils utils = utils;
+        private readonly IHttpContextAccessor httpContextAccessor = httpContextAccessor;
+
+        /// <summary>
+        /// 寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<Guid> Handle(WxmpSendSubscribMessageCommand request, CancellationToken cancellationToken)
+        {
+            await utils.WxmpSendSubscribMessage(new WxmpSendSubscribMessageRequest
+            {
+                Data = request.Data,
+                TemplateId = request.Template.ToString(),
+                Page = request.Page,
+                WxmpCode = request.WxmpCode,
+                Touser = request.Touser,
+            });
+            return Guid.Empty;
+        }
+
+        /// <summary>
+        /// 寰俊灏忕▼搴忚闃呮秷鎭�氱煡
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<bool> Handle(WxmpSubscribMessageNotifyCommand request, CancellationToken cancellationToken)
+        {
+            var req = httpContextAccessor.HttpContext.Request;
+            logger.LogInformation($"寰俊灏忕▼搴忚闃呮秷鎭�氱煡query锛歿req.QueryString.Value}");
+
+            req.EnableBuffering();
+            req.Body.Position = 0;
+            using var reader = new StreamReader(req.Body, Encoding.UTF8, leaveOpen: true);
+            var body = await reader.ReadToEndAsync();
+            logger.LogInformation($"寰俊灏忕▼搴忚闃呮秷鎭�氱煡body锛歿body}");
+            req.Body.Position = 0;
+            return true;
+        }
+    }
+}
diff --git a/ApiTools.Application/WxUtils/Queries/GetWxSettingQueryHandler.cs b/ApiTools.Application/WxUtils/Queries/GetWxSettingQueryHandler.cs
deleted file mode 100644
index 29b6550..0000000
--- a/ApiTools.Application/WxUtils/Queries/GetWxSettingQueryHandler.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-锘縰sing ApiTools.Core;
-using Furion.DatabaseAccessor;
-using MediatR;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.CommonServer.Application
-{
-    //public class GetWxSettingQueryHandler(IRepository<SmsSetting> rep, IRepository<SmsLog> repSmsLog) : IRequestHandler<GetSmsSettingQuery, GetSmsSettingQueryResult>
-    //{
-    //    private readonly IRepository<SmsSetting> rep = rep;
-    //    private readonly IRepository<SmsLog> repSmsLog = repSmsLog;
-
-    //    /// <summary>
-    //    /// 鏌ヨ鐭俊閰嶇疆
-    //    /// </summary>
-    //    /// <param name="request"></param>
-    //    /// <param name="cancellationToken"></param>
-    //    /// <returns></returns>
-    //    public async Task<GetSmsSettingQueryResult> Handle(GetSmsSettingQuery request, CancellationToken cancellationToken)
-    //    {
-    //        var logier = JwtUtils.GetCurrentLogier();
-    //        var detail = await rep.AsQueryable().AsNoTracking()
-    //            .Where(it => it.ChannelId == logier.ChannelId)
-    //            .GetDetail<SmsSetting, GetSmsSettingQueryResult>();
-    //        detail.Accesses = detail.Accesses.OrderBy(it => it.Sort).ToList();
-    //        return detail;
-    //    }
-    //}
-}
diff --git a/ApiTools.Core/ApiTools.Core.xml b/ApiTools.Core/ApiTools.Core.xml
index 75f2db9..53af37e 100644
--- a/ApiTools.Core/ApiTools.Core.xml
+++ b/ApiTools.Core/ApiTools.Core.xml
@@ -1280,31 +1280,6 @@
             鐘舵��
             </summary>
         </member>
-        <member name="T:ApiTools.Core.WxSetting">
-            <summary>
-            寰俊閰嶇疆
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.WxSetting.Code">
-            <summary>
-            缂栧彿
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.WxSetting.AppId">
-            <summary>
-            灏忕▼搴廔D
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.WxSetting.AppSecret">
-            <summary>
-            灏忕▼搴忓瘑閽�
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.WxSetting.EnvVersion">
-            <summary>
-            鐗堟湰
-            </summary>
-        </member>
         <member name="F:ApiTools.Core.EnumErrorCodeType.s400">
             <summary>
             鍙傛暟閿欒
@@ -1525,7 +1500,7 @@
             鐭俊宸ュ叿
             </summary>
         </member>
-        <member name="F:ApiTools.Core.EnumResourceController.CommonServerWxUtils">
+        <member name="F:ApiTools.Core.EnumResourceController.CommonServerWxmpUtils">
             <summary>
             寰俊宸ュ叿
             </summary>
@@ -1957,6 +1932,36 @@
             杞处
             </summary>
         </member>
+        <member name="T:ApiTools.Core.EnumWxmpSubscribMessageTemplate">
+            <summary>
+            寰俊灏忕▼搴忚闃呮秷鎭ā鏉�
+            </summary>
+        </member>
+        <member name="F:ApiTools.Core.EnumWxmpSubscribMessageTemplate.SettlementCompletedToSupplier">
+            <summary>
+            鏀粯鎴愬姛鎻愰啋  缁撶畻瀹屾垚鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ��
+            </summary>
+        </member>
+        <member name="F:ApiTools.Core.EnumWxmpSubscribMessageTemplate.SettlementAuditCompletedToSupplier">
+            <summary>
+            鎶ラ叕缁撶畻瀹℃牳缁撴灉閫氱煡  鐢叉柟缁撶畻纭鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ��
+            </summary>
+        </member>
+        <member name="F:ApiTools.Core.EnumWxmpSubscribMessageTemplate.SettlementReceiveCompletedToUser">
+            <summary>
+            宸ヨ祫鍙戞斁閫氱煡  缁撶畻瀹屾垚鍚庡悜C绔汉鍛橀�氱煡
+            </summary>
+        </member>
+        <member name="F:ApiTools.Core.EnumWxmpSubscribMessageTemplate.HireCompletedToUser">
+            <summary>
+            鎶ュ悕褰曠敤缁撴灉閫氱煡  琚綍鐢ㄥ悗鍚慍绔汉鍛橀�氱煡
+            </summary>
+        </member>
+        <member name="F:ApiTools.Core.EnumWxmpSubscribMessageTemplate.ArrangeCompletedToUser">
+            <summary>
+            鎺掔彮鎴愬姛閫氱煡  鎺掔彮鍚庡悜C绔汉鍛橀�氱煡
+            </summary>
+        </member>
         <member name="T:ApiTools.Core.IIsDisabled">
             <summary>
             鏄惁宸茬鐢�
@@ -2001,6 +2006,16 @@
         <member name="P:ApiTools.Core.ITreeData`1.Code">
             <summary>
             缂栧彿
+            </summary>
+        </member>
+        <member name="T:ApiTools.Core.Jobs.RefreshChannelWalletSignStatusJob">
+            <summary>
+            鍒锋柊娓犻亾閽卞寘鐘舵��
+            </summary>
+        </member>
+        <member name="M:ApiTools.Core.Jobs.RefreshChannelWalletSignStatusJob.#ctor(ApiTools.Core.ChannelWalletRepository,ApiTools.Core.ChannelWalletService)">
+            <summary>
+            鍒锋柊娓犻亾閽卞寘鐘舵��
             </summary>
         </member>
         <member name="T:ApiTools.Core.RefreshChannelWalletTransactionStatusJob">
@@ -3268,64 +3283,39 @@
             绛惧悕鍚嶇О
             </summary>
         </member>
-        <member name="T:ApiTools.Core.SaveWxSendCommand">
+        <member name="T:ApiTools.Core.WxmpSendSubscribMessageCommand">
             <summary>
-            璇ユ帴鍙g敤浜庡彂閫佽闃呮秷鎭�
+            寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveWxSendCommand.WxmpCode">
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageCommand.WxmpCode">
             <summary>
             灏忕▼搴忕紪鍙�
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveWxSendCommand.Template_id">
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageCommand.Template">
             <summary>
-            鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d锛堝仛鎴愭灇涓撅級
+            鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveWxSendCommand.Page">
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageCommand.Page">
             <summary>
-            鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆锛堝仛鍒伴厤缃枃浠堕噷闈級
+            鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveWxSendCommand.Touser">
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageCommand.Touser">
             <summary>
             鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveWxSendCommand.Data">
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageCommand.Data">
             <summary>
             妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveWxSendCommand.Lang">
+        <member name="T:ApiTools.Core.WxmpSubscribMessageNotifyCommand">
             <summary>
-            璇█锛堥粯璁や腑鏂囷級
-            </summary>
-        </member>
-        <member name="T:ApiTools.Core.SaveWxSettingCommand">
-            <summary>
-            淇濆瓨寰俊閰嶇疆
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveWxSettingCommand.Code">
-            <summary>
-            缂栧彿
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveWxSettingCommand.AppId">
-            <summary>
-            灏忕▼搴廔D
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveWxSettingCommand.AppSecret">
-            <summary>
-            灏忕▼搴忓瘑閽�
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveWxSettingCommand.EnvVersion">
-            <summary>
-            鐗堟湰
+            寰俊灏忕▼搴忚闃呮秷鎭�氱煡
             </summary>
         </member>
         <member name="M:ApiTools.Core.BaseRepository`2.GetQueryable(System.Boolean)">
@@ -6990,49 +6980,24 @@
             閿欒淇℃伅
             </summary>
         </member>
-        <member name="T:ApiTools.Core.SendRequest">
-            <summary>
-            鍙戦�佽闃呮秷鎭�
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SendRequest.WxmpCode">
-            <summary>
-            灏忕▼搴忕紪鍙�
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SendRequest.EnvVersion">
-            <summary>
-            瑕佹墦寮�鐨勫皬绋嬪簭鐗堟湰銆傛寮忕増涓� "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛��
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SendRequest.Template_id">
-            <summary>
-            鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SendRequest.Page">
-            <summary>
-            鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SendRequest.Touser">
-            <summary>
-            鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SendRequest.Data">
-            <summary>
-            妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
-            </summary>
-        </member>
-        <member name="T:ApiTools.Core.SendResponse">
-            <summary>
-            鍙戦�佽闃呮秷鎭�-缁撴灉
-            </summary>
-        </member>
         <member name="T:ApiTools.Core.WxmpOptions">
             <summary>
             寰俊灏忕▼搴忛厤缃�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpOptions.SubscribMessageTemplates">
+            <summary>
+            璁㈤槄娑堟伅妯℃澘
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpOptionsSubscribMessageTemplate.TemplateId">
+            <summary>
+            妯℃澘Id
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpOptionsSubscribMessageTemplate.Page">
+            <summary>
+            椤甸潰
             </summary>
         </member>
         <member name="P:ApiTools.Core.WxmpOptionsItem.Code">
@@ -7055,6 +7020,61 @@
             鐗堟湰
             </summary>
         </member>
+        <member name="T:ApiTools.Core.WxmpSendSubscribMessageRequest">
+            <summary>
+            寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.WxmpCode">
+            <summary>
+            灏忕▼搴忕紪鍙�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.TemplateId">
+            <summary>
+            鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.Page">
+            <summary>
+            鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.Touser">
+            <summary>
+            鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.Data">
+            <summary>
+            妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.EnvVersion">
+            <summary>
+            璺宠浆灏忕▼搴忕被鍨嬶細developer涓哄紑鍙戠増锛泃rial涓轰綋楠岀増锛沠ormal涓烘寮忕増锛涢粯璁や负姝e紡鐗�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageRequest.Lang">
+            <summary>
+            杩涘叆灏忕▼搴忔煡鐪嬧�濈殑璇█绫诲瀷锛屾敮鎸亃h_CN(绠�浣撲腑鏂�)銆乪n_US(鑻辨枃)銆亃h_HK(绻佷綋涓枃)銆亃h_TW(绻佷綋涓枃)锛岄粯璁や负zh_CN
+            </summary>
+        </member>
+        <member name="T:ApiTools.Core.WxmpSendSubscribMessageResponse">
+            <summary>
+            寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageResponse.ErrorCode">
+            <summary>
+            閿欒鐮�
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.WxmpSendSubscribMessageResponse.ErrorMessage">
+            <summary>
+            閿欒淇℃伅
+            </summary>
+        </member>
         <member name="T:ApiTools.Core.WxmpUtils">
             <summary>
             寰俊灏忕▼搴忓伐鍏�
@@ -7074,9 +7094,9 @@
             <param name="command"></param>
             <returns></returns>
         </member>
-        <member name="M:ApiTools.Core.WxmpUtils.WxSend(ApiTools.Core.SendRequest)">
+        <member name="M:ApiTools.Core.WxmpUtils.WxmpSendSubscribMessage(ApiTools.Core.WxmpSendSubscribMessageRequest)">
             <summary>
-            璇ユ帴鍙g敤浜庡彂閫佽闃呮秷鎭�
+            鍙戦�佽闃呮秷鎭�
             </summary>
             <param name="command"></param>
             <returns></returns>
diff --git a/ApiTools.Core/Entities/WxmpUtils/WxSetting.cs b/ApiTools.Core/Entities/WxmpUtils/WxSetting.cs
deleted file mode 100644
index 714f4e9..0000000
--- a/ApiTools.Core/Entities/WxmpUtils/WxSetting.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-锘縰sing Furion.DatabaseAccessor;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.Core
-{
-
-    /// <summary>
-    /// 寰俊閰嶇疆
-    /// </summary>
-    public class WxSetting : CommonEntity<MasterDbContextLocator>
-    {
-        /// <summary>
-        /// 缂栧彿
-        /// </summary>
-        public string Code { get; set; }
-
-        /// <summary>
-        /// 灏忕▼搴廔D
-        /// </summary>
-        public string AppId { get; set; }
-
-        /// <summary>
-        /// 灏忕▼搴忓瘑閽�
-        /// </summary>
-        public string AppSecret { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public string EnvVersion { get; set; }
-    }
-}
diff --git a/ApiTools.Core/Enums/Resources/EnumResourceController.cs b/ApiTools.Core/Enums/Resources/EnumResourceController.cs
index 7a347c4..007e404 100644
--- a/ApiTools.Core/Enums/Resources/EnumResourceController.cs
+++ b/ApiTools.Core/Enums/Resources/EnumResourceController.cs
@@ -35,8 +35,8 @@
         /// <summary>
         /// 寰俊宸ュ叿
         /// </summary>
-        [ResourceController(EnumResourceService.CommonServer, "Wx")]
-        CommonServerWxUtils,
+        [ResourceController(EnumResourceService.CommonServer, "Wxmp")]
+        CommonServerWxmpUtils,
 
         /// <summary>
         /// 鐢ㄦ埛璁よ瘉
diff --git a/ApiTools.Core/Enums/WxmpUtils/EnumTemplate.cs b/ApiTools.Core/Enums/WxmpUtils/EnumTemplate.cs
deleted file mode 100644
index 261773a..0000000
--- a/ApiTools.Core/Enums/WxmpUtils/EnumTemplate.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-锘縰sing Furion.FriendlyException;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.Core.Enums.WxmpUtils
-{
-    [ErrorCodeType]
-    public enum EnumTemplate
-    {
-        [ErrorCodeItemMetadata("妯℃澘1")]
-        Template01 = 01,
-
-        [ErrorCodeItemMetadata("妯℃澘2")]
-        Template02 = 02,
-    }
-}
diff --git a/ApiTools.Core/Enums/WxmpUtils/EnumWxmpSubscribMessageTemplate.cs b/ApiTools.Core/Enums/WxmpUtils/EnumWxmpSubscribMessageTemplate.cs
new file mode 100644
index 0000000..0fce40e
--- /dev/null
+++ b/ApiTools.Core/Enums/WxmpUtils/EnumWxmpSubscribMessageTemplate.cs
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core
+{
+    /// <summary>
+    /// 寰俊灏忕▼搴忚闃呮秷鎭ā鏉�
+    /// </summary>
+    public enum EnumWxmpSubscribMessageTemplate
+    {
+        /// <summary>
+        /// 鏀粯鎴愬姛鎻愰啋  缁撶畻瀹屾垚鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ��
+        /// </summary>
+        SettlementCompletedToSupplier,
+        /// <summary>
+        /// 鎶ラ叕缁撶畻瀹℃牳缁撴灉閫氱煡  鐢叉柟缁撶畻纭鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ��
+        /// </summary>
+        SettlementAuditCompletedToSupplier,
+        /// <summary>
+        /// 宸ヨ祫鍙戞斁閫氱煡  缁撶畻瀹屾垚鍚庡悜C绔汉鍛橀�氱煡
+        /// </summary>
+        SettlementReceiveCompletedToUser,
+        /// <summary>
+        /// 鎶ュ悕褰曠敤缁撴灉閫氱煡  琚綍鐢ㄥ悗鍚慍绔汉鍛橀�氱煡
+        /// </summary>
+        HireCompletedToUser,
+        /// <summary>
+        /// 鎺掔彮鎴愬姛閫氱煡  鎺掔彮鍚庡悜C绔汉鍛橀�氱煡
+        /// </summary>
+        ArrangeCompletedToUser,
+    }
+}
diff --git a/ApiTools.Core/Models/WxmpUtils/Commands/SaveWxSendCommand.cs b/ApiTools.Core/Models/WxmpUtils/Commands/SaveWxSendCommand.cs
deleted file mode 100644
index 0650b65..0000000
--- a/ApiTools.Core/Models/WxmpUtils/Commands/SaveWxSendCommand.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-锘縰sing ApiTools.Core.Enums.WxmpUtils;
-using MediatR;
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.Core
-{
-    /// <summary>
-    /// 璇ユ帴鍙g敤浜庡彂閫佽闃呮秷鎭�
-    /// </summary>
-    [Resource([EnumResourceController.CommonServerWxUtils], Method = EnumResourceMethod.Post)]
-    public class SaveWxSendCommand : IRequest<string>
-    {
-        /// <summary>
-        /// 灏忕▼搴忕紪鍙�
-        /// </summary>
-        public string WxmpCode { get; set; }
-
-        ///// <summary>
-        ///// 瑕佹墦寮�鐨勫皬绋嬪簭鐗堟湰銆傛寮忕増涓� "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛�傦紙璇诲彇閰嶇疆锛�
-        ///// </summary>
-        //public string EnvVersion { get; set; }
-
-        /// <summary>
-        /// 鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d锛堝仛鎴愭灇涓撅級
-        /// </summary>
-        public EnumTemplate Template_id { get; set; } 
-
-        /// <summary>
-        /// 鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆锛堝仛鍒伴厤缃枃浠堕噷闈級
-        /// </summary>
-        public string Page { get; set; }
-
-        /// <summary>
-        /// 鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
-        /// </summary>
-        public string Touser { get; set; }
-
-        /// <summary>
-        /// 妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
-        /// </summary>
-        public object Data { get; set; }
-
-        ///// <summary>
-        ///// 璺宠浆灏忕▼搴忕被鍨嬶細developer涓哄紑鍙戠増锛泃rial涓轰綋楠岀増锛沠ormal涓烘寮忕増锛涢粯璁や负姝e紡鐗�
-        ///// </summary>
-        //public string miniprogram_state { get; set; }
-
-        /// <summary>
-        /// 璇█锛堥粯璁や腑鏂囷級
-        /// </summary>
-        public string Lang { get; set; }
-    }
-}
diff --git a/ApiTools.Core/Models/WxmpUtils/Commands/SaveWxSettingCommand.cs b/ApiTools.Core/Models/WxmpUtils/Commands/SaveWxSettingCommand.cs
deleted file mode 100644
index b316f80..0000000
--- a/ApiTools.Core/Models/WxmpUtils/Commands/SaveWxSettingCommand.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-锘縰sing MediatR;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ApiTools.Core
-{
-    /// <summary>
-    /// 淇濆瓨寰俊閰嶇疆
-    /// </summary>
-    [Resource([EnumResourceController.CommonServerWxUtils], Method = EnumResourceMethod.Post)]
-    public class SaveWxSettingCommand : IRequest<Guid>
-    {
-        /// <summary>
-        /// 缂栧彿
-        /// </summary>
-        public string Code { get; set; }
-
-        /// <summary>
-        /// 灏忕▼搴廔D
-        /// </summary>
-        public string AppId { get; set; }
-
-        /// <summary>
-        /// 灏忕▼搴忓瘑閽�
-        /// </summary>
-        public string AppSecret { get; set; }
-
-        /// <summary>
-        /// 鐗堟湰
-        /// </summary>
-        public string EnvVersion { get; set; }
-    }
-}
diff --git a/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSendSubscribMessageCommand.cs b/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSendSubscribMessageCommand.cs
new file mode 100644
index 0000000..b73c4bf
--- /dev/null
+++ b/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSendSubscribMessageCommand.cs
@@ -0,0 +1,47 @@
+锘縰sing MediatR;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core
+{
+    /// <summary>
+    /// 寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+    /// </summary>
+    [Resource([EnumResourceController.CommonServerWxmpUtils], Method = EnumResourceMethod.Post)]
+    public class WxmpSendSubscribMessageCommand : IRequest<Guid>
+    {
+        /// <summary>
+        /// 灏忕▼搴忕紪鍙�
+        /// </summary>
+        [Required]
+        public string WxmpCode { get; set; }
+
+        /// <summary>
+        /// 鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d
+        /// </summary>
+        [Required]
+        public EnumWxmpSubscribMessageTemplate Template { get; set; }
+
+        /// <summary>
+        /// 鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
+        /// </summary>
+        public string Page { get; set; }
+
+        /// <summary>
+        /// 鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
+        /// </summary>
+        [Required]
+        public string Touser { get; set; }
+
+        /// <summary>
+        /// 妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
+        /// </summary>
+        [Required]
+        public object Data { get; set; }
+    }
+}
diff --git a/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs b/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs
new file mode 100644
index 0000000..033e7d6
--- /dev/null
+++ b/ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs
@@ -0,0 +1,22 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core
+{
+    /// <summary>
+    /// 寰俊灏忕▼搴忚闃呮秷鎭�氱煡
+    /// </summary>
+    [Resource([EnumResourceController.CommonServerWxmpUtils], Method = EnumResourceMethod.Post)]
+    public class WxmpSubscribMessageNotifyCommand : IRequest<bool>
+    {
+        public string ToUserName { get; set; }
+        public string FromUserName { get; set; }
+        public DateTime CreateTime { get; set; }
+        public string MsgType { get; set; }
+        public string Event { get; set; }
+    }
+}
diff --git a/ApiTools.Core/Utils/WxmpUtils/WxmpGetQrCodeRequest.cs b/ApiTools.Core/Utils/WxmpUtils/WxmpGetQrCodeRequest.cs
index e60c155..2cf4fdd 100644
--- a/ApiTools.Core/Utils/WxmpUtils/WxmpGetQrCodeRequest.cs
+++ b/ApiTools.Core/Utils/WxmpUtils/WxmpGetQrCodeRequest.cs
@@ -106,73 +106,4 @@
         public string ErrorMessage { get; set; }
 
     }
-
-    /// <summary>
-    /// 鍙戦�佽闃呮秷鎭�
-    /// </summary>
-    public class SendRequest
-    {
-
-        /// <summary>
-        /// 灏忕▼搴忕紪鍙�
-        /// </summary>
-        [JsonProperty("WxmpCode")]
-        [Required]
-        public string WxmpCode { get; set; }
-
-        /// <summary>
-        /// 瑕佹墦寮�鐨勫皬绋嬪簭鐗堟湰銆傛寮忕増涓� "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛��
-        /// </summary>
-        [JsonProperty("env_version")]
-        public string EnvVersion { get; set; }
-
-        /// <summary>
-        /// 鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d
-        /// </summary>
-        [JsonProperty("Template_id")]
-        [Required]
-        public string Template_id { get; set; }
-
-        /// <summary>
-        /// 鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
-        /// </summary>
-        [JsonProperty("Page")]
-        [Required]
-        public string Page { get; set; }
-
-        /// <summary>
-        /// 鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
-        /// </summary>
-        [JsonProperty("Touser")]
-        [Required]
-        public string Touser { get; set; }
-
-        /// <summary>
-        /// 妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
-        /// </summary>
-        [JsonProperty("Data")]
-        [Required]
-        public object Data { get; set; }
-
-        [JsonProperty("璺宠浆灏忕▼搴忕被鍨嬶細developer涓哄紑鍙戠増锛泃rial涓轰綋楠岀増锛沠ormal涓烘寮忕増锛涢粯璁や负姝e紡鐗�")]
-        [Required]
-        public string Miniprogram_state { get; set; }
-
-        [JsonProperty("杩涘叆灏忕▼搴忔煡鐪嬧�濈殑璇█绫诲瀷锛屾敮鎸亃h_CN(绠�浣撲腑鏂�)銆乪n_US(鑻辨枃)銆亃h_HK(绻佷綋涓枃)銆亃h_TW(绻佷綋涓枃)锛岄粯璁や负zh_CN")]
-        [Required]
-        public string Lang { get; set; }
-
-    }
-
-    /// <summary>
-    /// 鍙戦�佽闃呮秷鎭�-缁撴灉
-    /// </summary>
-    public class SendResponse
-    {
-        [JsonProperty("ErrorCode")]
-        public int ErrorCode { get; set; }
-
-        [JsonProperty("errmsg")]
-        public int errmsg { get; set; }
-    }
 }
diff --git a/ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs b/ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs
index ec1a277..56bb3b0 100644
--- a/ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs
+++ b/ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs
@@ -18,6 +18,24 @@
         }
 
         public List<WxmpOptionsItem> Items { get; set; }
+
+        /// <summary>
+        /// 璁㈤槄娑堟伅妯℃澘
+        /// </summary>
+        public Dictionary<string, WxmpOptionsSubscribMessageTemplate> SubscribMessageTemplates { get; set; } = [];
+    }
+
+    public class WxmpOptionsSubscribMessageTemplate
+    {
+        /// <summary>
+        /// 妯℃澘Id
+        /// </summary>
+        public string TemplateId { get; set; }
+
+        /// <summary>
+        /// 椤甸潰
+        /// </summary>
+        public string Page { get; set; }
     }
 
     public class WxmpOptionsItem
diff --git a/ApiTools.Core/Utils/WxmpUtils/WxmpSendSubscribMessageRequest.cs b/ApiTools.Core/Utils/WxmpUtils/WxmpSendSubscribMessageRequest.cs
new file mode 100644
index 0000000..3208d98
--- /dev/null
+++ b/ApiTools.Core/Utils/WxmpUtils/WxmpSendSubscribMessageRequest.cs
@@ -0,0 +1,80 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core
+{
+    /// <summary>
+    /// 寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+    /// </summary>
+    public class WxmpSendSubscribMessageRequest
+    {
+        /// <summary>
+        /// 灏忕▼搴忕紪鍙�
+        /// </summary>
+        [JsonIgnore]
+        public string WxmpCode { get; set; }
+
+        /// <summary>
+        /// 鎵�闇�涓嬪彂鐨勮闃呮ā鏉縤d
+        /// </summary>
+        [JsonProperty("template_id")]
+        [Required]
+        public string TemplateId { get; set; }
+
+        /// <summary>
+        /// 鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆
+        /// </summary>
+        [JsonProperty("page")]
+        public string Page { get; set; }
+
+        /// <summary>
+        /// 鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid
+        /// </summary>
+        [JsonProperty("touser")]
+        [Required]
+        public string Touser { get; set; }
+
+        /// <summary>
+        /// 妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } }
+        /// </summary>
+        [JsonProperty("data")]
+        [Required]
+        public object Data { get; set; }
+
+        /// <summary>
+        /// 璺宠浆灏忕▼搴忕被鍨嬶細developer涓哄紑鍙戠増锛泃rial涓轰綋楠岀増锛沠ormal涓烘寮忕増锛涢粯璁や负姝e紡鐗�
+        /// </summary>
+        [JsonProperty("miniprogram_state")]
+        [Required]
+        public string EnvVersion { get; set; }
+
+        /// <summary>
+        /// 杩涘叆灏忕▼搴忔煡鐪嬧�濈殑璇█绫诲瀷锛屾敮鎸亃h_CN(绠�浣撲腑鏂�)銆乪n_US(鑻辨枃)銆亃h_HK(绻佷綋涓枃)銆亃h_TW(绻佷綋涓枃)锛岄粯璁や负zh_CN
+        /// </summary>
+        [JsonProperty("lang")]
+        [Required]
+        public string Lang { get; set; } = "zh_CN";
+    }
+
+    /// <summary>
+    /// 寰俊灏忕▼搴忓彂閫佽闃呮秷鎭�
+    /// </summary>
+    public class WxmpSendSubscribMessageResponse
+    {
+        /// <summary>
+        /// 閿欒鐮�
+        /// </summary>
+        [JsonProperty("errcode")]
+        public int ErrorCode { get; set; }
+        /// <summary>
+        /// 閿欒淇℃伅
+        /// </summary>
+        [JsonProperty("errmsg")]
+        public string ErrorMessage { get; set; }
+    }
+}
diff --git a/ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs b/ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs
index cb686c5..ee4d5cc 100644
--- a/ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs
+++ b/ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs
@@ -130,19 +130,23 @@
         }
 
         /// <summary>
-        /// 璇ユ帴鍙g敤浜庡彂閫佽闃呮秷鎭�
+        /// 鍙戦�佽闃呮秷鎭�
         /// </summary>
         /// <param name="command"></param>
         /// <returns></returns>
-        public async Task<string> WxSend(SendRequest command)
+        public async Task WxmpSendSubscribMessage(WxmpSendSubscribMessageRequest command)
         {
             var option = options.Value.Items.FirstOrDefault(it => it.Code == command.WxmpCode);
             if (option == null || option.AppId.IsNull() || option.AppSecret.IsNull())
-                throw Oops.Oh(EnumErrorCodeType.s400, "鑾峰彇灏忕▼搴忕爜澶辫触锛岀己澶遍厤缃細WxmpOptions");
+                throw Oops.Oh(EnumErrorCodeType.s400, "鍙戦�佽闃呮秷鎭け璐ワ紝缂哄け閰嶇疆锛歐xmpOptions");
             command.EnvVersion = option.EnvVersion;
+            if (!options.Value.SubscribMessageTemplates.ContainsKey(command.TemplateId))
+                throw Oops.Oh(EnumErrorCodeType.s400, "鍙戦�佽闃呮秷鎭け璐ワ紝妯℃澘涓嶅瓨鍦�");
+            var template = options.Value.SubscribMessageTemplates[command.TemplateId];
+            command.TemplateId = template.TemplateId;
+            if (command.Page.IsNull()) command.Page = template.Page;
             var accessToken = await GetAccessToken(command.WxmpCode);
-            var request = command.Adapt<SendRequest>();
-            var jsonContent = JsonConvert.SerializeObject(request, new JsonSerializerSettings
+            var jsonContent = JsonConvert.SerializeObject(command, new JsonSerializerSettings
             {
                 NullValueHandling = NullValueHandling.Ignore
             });
@@ -151,22 +155,13 @@
                 .WithQueryParameter("access_token", accessToken)
                 .SetJsonContent(jsonContent));
             response.EnsureSuccessStatusCode();
-            //var a = response.Content.Headers.ContentType.ToString();
-            //application/json; encoding=utf-8
-            //if (response.Content.Headers.ContentType.ToString() == "application/json; charset=UTF-8")
-            if (response.Content.Headers.ContentType.ToString() == "application/json; encoding=utf-8")
+            if (response.Content.Headers.ContentType.ToString() == "application/json; charset=UTF-8")
             {
                 var jsonResult = await response.Content.ReadAsStringAsync();
-                //var callback = jsonResult.JsonTo<SendResponse>();
-                //if (callback == null || callback.ErrorCode != 0)
-                    //throw Oops.Oh(EnumErrorCodeType.s510, $"鑾峰彇灏忕▼搴忕爜澶辫触锛歿callback.errmsg}锛岃鑱旂郴绠$悊鍛�");
-                return jsonResult;
+                var callback = jsonResult.JsonTo<WxmpSendSubscribMessageResponse>();
+                if (callback == null || callback.ErrorCode != 0)
+                    throw Oops.Oh(EnumErrorCodeType.s510, $"鍙戦�佽闃呮秷鎭け璐ワ細{callback.ErrorMessage}锛岃鑱旂郴绠$悊鍛�");
             }
-            //var stream = await response.Content.ReadAsStreamAsync();
-            //var result = AliyunOSSUtils.Upload(command, stream, command.OssFileName);
-            return "";
         }
-
-
     }
 }
diff --git a/ApiTools.Web.Entry/appsettings.json b/ApiTools.Web.Entry/appsettings.json
index 7d20f94..a7b024e 100644
--- a/ApiTools.Web.Entry/appsettings.json
+++ b/ApiTools.Web.Entry/appsettings.json
@@ -52,7 +52,34 @@
         "AppSecret": "c03a62ad6822f1c925532c34183e7f7f",
         "EnvVersion": "trial"
       }
-    ]
+    ],
+    "SubscribMessageTemplates": {
+      // 鏀粯鎴愬姛鎻愰啋  缁撶畻瀹屾垚鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ��
+      "SettlementCompletedToSupplier": {
+        "TemplateId": "dz2HCc-EnR4WEfsuj2GuduF8SLu40J83xez1bLLbaC0",
+        "Page": "pages/workbenches/workbenches"
+      },
+      // 鎶ラ叕缁撶畻瀹℃牳缁撴灉閫氱煡  鐢叉柟缁撶畻纭鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ��
+      "SettlementAuditCompletedToSupplier": {
+        "TemplateId": "Qp6cetvhwONMS1y9LOBt4dZgq49Hc14lIsm-LVE0Hfo",
+        "Page": "pages/workbenches/workbenches"
+      },
+      // 宸ヨ祫鍙戞斁閫氱煡  缁撶畻瀹屾垚鍚庡悜C绔汉鍛橀�氱煡
+      "SettlementReceiveCompletedToUser": {
+        "TemplateId": "pw-WntZZJjADXfLsxcs5S8pKlpTrSc-HtJs0ZZvqliE",
+        "Page": "pages/home/index"
+      },
+      // 鎶ュ悕褰曠敤缁撴灉閫氱煡  琚綍鐢ㄥ悗鍚慍绔汉鍛橀�氱煡
+      "HireCompletedToUser": {
+        "TemplateId": "dz2HCc-EnR4WEfsuj2GuduF8SLu40J83xez1bLLbaC0",
+        "Page": "pages/home/index"
+      },
+      // 鎺掔彮鎴愬姛閫氱煡  鎺掔彮鍚庡悜C绔汉鍛橀�氱煡
+      "ArrangeCompletedToUser": {
+        "TemplateId": "dz2HCc-EnR4WEfsuj2GuduF8SLu40J83xez1bLLbaC0",
+        "Page": "pages/home/index"
+      }
+    }
   },
   "Task": {
     "SettlementTime": "T0"

--
Gitblit v1.9.1