• .NET之微信消息模板推送


    前言:  

      最近在项目中使用到了微信消息模板推送的功能,也就是将对应的消息推送到对应的用户微信上去,前提是你必须要有一个微信公众号并且是付费了的才会有这个功能,还有就是要推送的用户必须是的关注了你的微信公众号的。

      这个流程是这样的首先用户关注你的微信公众号,让后获取到对应用户的oppenid,然后就可以通过对应的用户oppenid选折对应的消息模板把消息推送给用户。

    实现:

    添加功能插件:

      

    找到模板消息:

      

    选折对应的消息模板:

      

    参数说明:

    参数是否必填说明
    touser 接收者openid
    template_id 模板ID
    url 模板跳转链接(海外帐号没有跳转能力)
    miniprogram 跳小程序所需数据,不需跳小程序可不用传该数据
    appid 所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)
    pagepath 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏
    data 模板数据
    color 模板内容字体颜色,不填默认为黑色

    代码实现:

    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace JJHL.Service
    {
        /// <summary>
        /// 微信消息推送
        /// </summary>
        public class WxChatPrompt
        {
            public WxChatPrompt()
            {
    
            }
    
            private static WxChatPrompt _objPrompt;
    
            public static WxChatPrompt _
            {
                get => _objPrompt ?? new WxChatPrompt();
                set => _objPrompt = value;
            }
    
            /// <summary>
            /// 消息推送
            /// </summary>
            /// <param name="Access_token">网页授权凭证,通过微信接口获取</param>
            /// <param name="Openid">要推送的用户oppenid</param>
            /// <returns></returns>
            public string MsgPush(string Access_token, string Openid)
            {
                string templateId = "";//模板编号
                string firstContent= "";//内容
                string keyword1 = "";//自定义内容
                string keyword2 = "";//自定义内容
                string keyword3 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //时间
                string remark = "";//备注
    
                string contentmsg = "{"touser":"" + Openid + "","template_id":"" + templateId + "","topcolor":"#FF0000","data":{"first":{"value":"" + firstContent + "","color":"#173177"},"keyword1":{"value":"" + keyword1 + "","color":"#173177"},"keyword2":{"value":"" + keyword2 + "","color":"#173177"},"keyword3":{"value":"" + keyword3 + "","color":"#173177"},"remark":{"value":"" +remark + "","color":"#173177"}}}";
                string result = WeChatPushNotice(Access_token, contentmsg);
    
                return result;
            }
    
            /// <summary>
            ///微信消息推送
            /// </summary>
            /// <param name="accessToken">微信access_token</param>
            /// <param name="contentMsg">推送内容</param>
            /// <returns></returns>
            public string WeChatPushNotice(string accessToken, string contentMsg)
            {
                string promat = "";
                //需要提交的数据
                byte[] bs = Encoding.UTF8.GetBytes(contentMsg);
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken + "");
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.ContentLength = bs.Length;
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                }
                HttpWebResponse respon = (HttpWebResponse)req.GetResponse();
                Stream stream = respon.GetResponseStream();
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    promat = reader.ReadToEnd();
                }
                ReturnMsg y = JsonConvert.DeserializeObject<ReturnMsg>(promat);
                promat = y.errmsg;
    
                return promat;
    
            }
    
            /// <summary>
            /// 自定义模型
            /// </summary>
            private class ReturnMsg
            {
                public string errcode { get; set; }
                public string errmsg { get; set; }
                public string msgid { get; set; }
            }
    
        }
    }

     在调用模板消息接口后,会返回JSON数据包。正常时的返回JSON数据包示例:

     {
        "errcode":0,
         "errmsg":"ok",
         "msgid":200228332
      }
  • 相关阅读:
    中英切换
    vue-cli3 关闭一直运行的 /sockjs-node/info?t= ...
    vue 深拷贝
    C++ 中 typename
    将博客搬至CSDN
    死锁及处理
    C 运算符优先级
    阻塞与非阻塞,同步与异步
    同步函数与异步函数
    C 结构体位域
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/9661554.html
Copyright © 2020-2023  润新知