.NET之微信消息模板推送

前言:  

  最近在項目中使用到了微信消息模板推送的功能,也就是將對應的消息推送到對應的用戶微信上去,前提是你必需要有一個微信公衆號而且是付費了的纔會有這個功能,還有就是要推送的用戶必須是的關注了你的微信公衆號的。小程序

  這個流程是這樣的首先用戶關注你的微信公衆號,讓後獲取到對應用戶的oppenid,而後就能夠經過對應的用戶oppenid選折對應的消息模板把消息推送給用戶。api

實現:

添加功能插件:

  

找到模板消息:

  

選折對應的消息模板:

  

參數說明:

參數 是否必填 說明
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
  }
相關文章
相關標籤/搜索