.Net6+Furion+Sqlsugar+SenparcSdk開發微信公衆號系列之十:模板消息

一、說明

模板消息僅用於公衆號向用戶發送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支持廣告等營銷類消息以及其它所有可能對用戶造成騷擾的消息。

關於使用規則,請注意:

  1. 所有服務號都可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認證後的服務號纔可以申請模板消息的使用權限並獲得該權限;
  2. 需要選擇公衆賬號服務所處的2個行業,每月可更改1次所選行業;
  3. 在所選擇行業的模板庫中選用已有的模板進行調用;
  4. 每個賬號可以同時使用25個模板。
  5. 當前每個賬號的模板消息的日調用上限爲10萬次,單個模板沒有特殊限制。【2014年11月18日將接口調用頻率從默認的日1萬次提升爲日10萬次,可在 MP 登錄後的開發者中心查看】。當賬號粉絲數超過10W/100W/1000W時,模板消息的日調用上限會相應提升,以公衆號 MP 後臺開發者中心頁面中標明的數字爲準。

關於接口文檔,請注意:

  1. 模板消息調用時主要需要模板 ID 和模板中各參數的賦值內容;
  2. 模板中參數內容必須以".DATA"結尾,否則視爲保留字;
  3. 模板保留符號""。

二、設置所屬行業

Services下新建模板消息所需要的類

IndustryInput.cs用來設置行業ID接收的實體

namespace WeiXinApi.Application.Services
{
    public class IndustryInput
    {
        /// <summary>
        /// 行業代碼1
        /// </summary>
        public IndustryCode Id1 { get; set; }

        /// <summary>
        /// 行業代碼2
        /// </summary>
        public IndustryCode Id2 { get; set; }
    }
}

TemplateService用來寫API

namespace WeiXinApi.Application.Services
{
    public class TemplateService : BaseService
    {
    
    }
}

新建設置行業id的api接口

        /// <summary>
        /// 設置行業Id
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("/template/setindustry")]
        public async Task<dynamic> SetIndustry(IndustryInput input)
        {
            return await TemplateApi.SetIndustryAsync(AppId, input.Id1, input.Id2);
        }

測試一下,請求成功

三、獲取設置的行業信息

 新增獲取行業信息接口


        /// <summary>
        /// 獲取行業信息
        /// </summary>
        /// <returns></returns>
        [HttpGet("/template/industry")]
        public async Task<dynamic> GetIndustry()
        {
            return await TemplateApi.GetIndustryAsync(AppId);
        }

測試下,可以正常顯示

四、獲取模板列表

測試賬號接口新增一個模板

模板內容

{{first.DATA}} 商品名稱:{{keyword1.DATA}} 消費金額: {{keyword2.DATA}} 購買時間:{{keyword3.DATA}} {{remark.DATA}}

新建獲取模板接口

        /// <summary>
        /// 獲取模板列表
        /// </summary>
        /// <returns></returns>
        [HttpGet("/template/list")]
        public async Task<dynamic> GetTemplate()
        {
            return await TemplateApi.GetPrivateTemplateAsync(AppId);
        }

測試下,可以正常顯示

五、刪除模板

新建接口

        /// <summary>
        /// 刪除模板
        /// </summary>
        /// <param name="template_id"></param>
        /// <returns></returns>
        [HttpPost("/template/delete/{template_id}")]
        public async Task<dynamic> Delete(string template_id)
        {
            return await TemplateApi.DelPrivateTemplateAsync(AppId, template_id);
        }

測試下,請求沒問題

後臺也沒了

六、發送模板消息

Dto文件夾下新建TemplateInput.cs


namespace WeiXinApi.Application.Services
{
    public class TemplateInput
    {
        /// <summary>
        /// 模板ID
        /// </summary>
        public string TemplateId { get; set; }

        /// <summary>
        /// 開發者微信號
        /// </summary>
        public string OpenId { get; set; }

        /// <summary>
        /// 跳轉鏈接
        /// </summary>
        public string Url { get; set; }

        /// <summary>
        /// 小程序信息
        /// </summary>
        public TemplateModel_MiniProgram MiniProgram { get; set; }

        /// <summary>
        /// 模板數據
        /// </summary>
        public TemplateData Data { get; set; }
    }

    public class TemplateData
    {

        /// <summary>
        /// 跳轉鏈接
        /// </summary>
        public TemplateDataInfo first { get; set; }


        /// <summary>
        /// 跳轉鏈接
        /// </summary>
        public TemplateDataInfo keyword1 { get; set; }

        /// <summary>
        /// 跳轉鏈接
        /// </summary>
        public TemplateDataInfo keyword2 { get; set; }

        /// <summary>
        /// 跳轉鏈接
        /// </summary>
        public TemplateDataInfo keyword3 { get; set; }

        /// <summary>
        /// 跳轉鏈接
        /// </summary>
        public TemplateDataInfo remark { get; set; }


    }

    public class TemplateDataInfo
    {
        /// <summary>
        /// 值
        /// </summary>
        public string value { get; set; }

        /// <summary>
        /// 顏色
        /// </summary>
        public string color { get; set; } = "#173177";
    }

}

新建發送模板消息接口

        /// <summary>
        /// 發送模板消息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("/template/send")]
        public async Task<dynamic> Send(TemplateInput input)
        {
            var result = await TemplateApi.SendTemplateMessageAsync(AppId, input.OpenId, input.TemplateId, input.Url, input.Data, input.MiniProgram);
            return result;
        }

測試下,請求成功

微信也收到了消息

七、事件推送

IMessageService_Events.cs定義接口

        /// <summary>
        /// 模板發送事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        Task OnEvent_TemplateSendJobFinishRequestAsync(RequestMessageEvent_TemplateSendJobFinish requestMessage);

MessageService_Events實現接口

        public async Task OnEvent_TemplateSendJobFinishRequestAsync(RequestMessageEvent_TemplateSendJobFinish requestMessage)
        {
            Console.WriteLine("進入模板事件推送");

            Console.WriteLine($"發送結果:{requestMessage.Status}");
        }

CustomMessageHandler_Events.cs重寫模板發送事件

        /// <summary>
        /// 模板發送事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override async Task<IResponseMessageBase> OnEvent_TemplateSendJobFinishRequestAsync(RequestMessageEvent_TemplateSendJobFinish requestMessage)
        {
            await _messageService.OnEvent_TemplateSendJobFinishRequestAsync(requestMessage);
            return await base.OnEvent_TemplateSendJobFinishRequestAsync(requestMessage);
        }

發佈大服務器,測試結果,沒問題

八、本章Gitee地址鏈接

https://gitee.com/huguodong520/weixinapi/tree/%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章