sunpengfei
2025-12-01 32d421fb8bdd76f7613af548c9dfb184c4a64a23
feat:开发
5个文件已修改
2个文件已添加
138 ■■■■■ 已修改文件
ApiTools.Core/ApiTools.Core.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Models/WxmpUtils/Models/WxmpSubscribMessageNotifyRequestQuery.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Web.Entry/Controllers/WxmpController.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Web.Entry/appsettings.json 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/ApiTools.Core.xml
@@ -3323,6 +3323,26 @@
            微信小程序订阅消息通知
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyRequestQuery.Signature">
            <summary>
            签名
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyRequestQuery.Timestamp">
            <summary>
            时间戳
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyRequestQuery.Nonce">
            <summary>
            随机数
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpSubscribMessageNotifyRequestQuery.Echostr">
            <summary>
            随机字符串
            </summary>
        </member>
        <member name="T:ApiTools.Core.GetWxmpSubscribMessageTemplatesQuery">
            <summary>
            查询微信小程序订阅消息模板
@@ -7140,6 +7160,21 @@
            微信小程序配置
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpOptions.SubscribMessage">
            <summary>
            订阅消息
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpOptionsSubscribMessage.Token">
            <summary>
            令牌
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpOptionsSubscribMessage.EncodingAESKey">
            <summary>
            消息加密密钥
            </summary>
        </member>
        <member name="P:ApiTools.Core.WxmpOptionsItem.Code">
            <summary>
            编号
ApiTools.Core/Models/WxmpUtils/Commands/WxmpSubscribMessageNotifyCommand.cs
@@ -10,9 +10,11 @@
    /// <summary>
    /// 微信小程序订阅消息通知
    /// </summary>
    [Resource([EnumResourceController.CommonServerWxmpUtils], Method = EnumResourceMethod.Post)]
    [Resource([EnumResourceController.CommonServerWxmpUtils], Method = EnumResourceMethod.Get)]
    public class WxmpSubscribMessageNotifyCommand : IRequest<bool>
    {
        public string ToUserName { get; set; }
        public string FromUserName { get; set; }
        public DateTime CreateTime { get; set; }
ApiTools.Core/Models/WxmpUtils/Models/WxmpSubscribMessageNotifyRequestQuery.cs
New file
@@ -0,0 +1,33 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ApiTools.Core
{
    public class WxmpSubscribMessageNotifyRequestQuery
    {
        /// <summary>
        /// 签名
        /// </summary>
        [JsonProperty("signature")]
        public string Signature { get; set; }
        /// <summary>
        /// 时间戳
        /// </summary>
        [JsonProperty("timestamp")]
        public string Timestamp { get; set; }
        /// <summary>
        /// 随机数
        /// </summary>
        [JsonProperty("nonce")]
        public string Nonce { get; set; }
        /// <summary>
        /// 随机字符串
        /// </summary>
        [JsonProperty("echostr")]
        public string Echostr { get; set; }
    }
}
ApiTools.Core/Utils/WxmpUtils/WxmpOptions.cs
@@ -18,6 +18,24 @@
        }
        public List<WxmpOptionsItem> Items { get; set; }
        /// <summary>
        /// 订阅消息
        /// </summary>
        public WxmpOptionsSubscribMessage SubscribMessage { get; set; }
    }
    public class WxmpOptionsSubscribMessage
    {
        /// <summary>
        /// 令牌
        /// </summary>
        public string Token { get; set; }
        /// <summary>
        /// 消息加密密钥
        /// </summary>
        public string EncodingAESKey { get; set; }
    }
    public class WxmpOptionsItem
ApiTools.Core/Utils/WxmpUtils/WxmpUtils.cs
@@ -176,5 +176,7 @@
            if (callback == null || callback.ErrorCode != 0)
                throw Oops.Oh(EnumErrorCodeType.s510, $"发送订阅消息失败:{callback.ErrorMessage},请联系管理员");
        }
    }
}
ApiTools.Web.Entry/Controllers/WxmpController.cs
New file
@@ -0,0 +1,39 @@
using ApiTools.Core;
using Furion.DataEncryption;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace ApiTools.Web.Entry.Controllers
{
    [Route("api/common/wxmp")]
    public class WxmpController(
            WxmpUtils utils,
            IOptions<WxmpOptions> options
        ) : ControllerBase
    {
        private readonly WxmpUtils utils = utils;
        private readonly IOptions<WxmpOptions> options = options;
        [HttpGet("subscribMessageNotify")]
        public IActionResult SubscribMessageNotify([FromQuery] WxmpSubscribMessageNotifyRequestQuery request)
        {
            var @params = new[]
            {
                options.Value.SubscribMessage.Token,
                request.Timestamp,
                request.Nonce
            }
            .OrderBy(p => p)
            .ToArray();
            var text = string.Concat(@params);
            if (SHA1Encryption.Compare(text, request.Signature, true))
            {
                return Content(request.Echostr);
            }
            else
            {
                return Unauthorized("验签失败");
            }
        }
    }
}
ApiTools.Web.Entry/appsettings.json
@@ -58,7 +58,12 @@
        "AppSecret": "9a132eda735bc925200b0e215cffe20a",
        "EnvVersion": "trial"
      }
    ]
    ],
    "SubscribMessage": {
      "Url": "https://sms.81812333.com/api/common/wxmp/wxmpSubscribMessageNotify",
      "Token": "8Uu6CZ9KM2CAr3Q3O0YdWUYPfcXFhgMK",
      "EncodingAESKey": "tbBkUB7nCgZlfton3aKMlfzHSm7QdWgnpKFibl6sjn7"
    },
  },
  "Task": {
    "SettlementTime": "T0"