微信模板消息推送

最近做一个项目用到微信模板消息推送功能

1、在公众号管理页面中,左侧菜单栏》功能》添加功能插件,找到模板消息然后开通该功能,在模板消息界面的模板库中找到你要用到的模板添加到我的模板里面

 

2、发送模板消息

        /// <summary>
        /// 向用户发送公众号模板消息
        /// </summary>
        /// <param name="open_id">用户openID</param>
        /// <param name="car_no">车牌号</param>
        /// <param name="name">司机姓名</param>
        /// <param name="address">发生区域</param>
        /// <param name="date">违章日期</param>
        /// <param name="content">违章内容</param>
        /// <param name="remark">备注</param>
        /// <returns></returns>
        private String SendMessage(string open_id,string car_no,string name,string address,string date,string content,string remark)
        {
            string strReturn = string.Empty;
            try
            {
                string token = GetAccess_Token();
                string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
                string temp = "{\"touser\": \"" + open_id + "\"," +
                       "\"template_id\": \"E46pmW-z-Sb5fTAW4PZwu_52ycaApg7j863WMu9zNgM\", " +
                       "\"url\":\"https://www.sxnhkj.top/wz.aspx\","+ 
                       "\"topcolor\": \"#FF0000\", " +
                       "\"data\": " +
                       "{\"first\": {\"value\": \"你好,你有一条新的厂区违章记录!\"}," +
                       "\"keyword1\": { \"value\": \"" + car_no + "\"}," +
                       "\"keyword2\": { \"value\": \"" + name + "\"}," +
                       "\"keyword3\": { \"value\": \"" + address + "\"}," +
                       "\"keyword4\": { \"value\": \"" + date + "\"}," +
                       "\"keyword5\": { \"value\": \"" + content + "\"}," +
                       "\"remark\": {\"value\": \"" + remark + "\" }}}";
                GetResponseData(temp, @url);
                strReturn = "推送成功";
            }
            catch (Exception ex)
            {
                strReturn = ex.Message;
            }
            return strReturn;
        }
        
        /// <summary>
        /// 返回JSon数据
        /// </summary>
        /// <param name="JSONData">要处理的JSON数据</param>
        /// <param name="Url">要提交的URL</param>
        /// <returns>返回的JSON处理字符串</returns>
        public string GetResponseData(string JSONData, string Url)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(JSONData);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType = "json";
            Stream reqstream = request.GetRequestStream();
            reqstream.Write(bytes, 0, bytes.Length);
            //声明一个HttpWebRequest请求
            request.Timeout = 90000;
            //设置连接超时时间
            request.Headers.Set("Pragma", "no-cache");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream streamReceive = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(streamReceive, encoding);
            string strResult = streamReader.ReadToEnd();
            streamReceive.Dispose();
            streamReader.Dispose();
            return strResult;
        }

/// <summary>
        /// 获取Accesstoken
        /// </summary>
        /// <returns></returns>
        private string GetAccess_Token()
        {
            string access_token = "";
            string sql = "select access_token,expires_in,add_date from tab_access_token where token_type=0 order by add_date desc";
            DataSet ds = DBHelper.Query(sql);
            if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count>0)
            {
                access_token = ds.Tables[0].Rows[0]["access_token"].ToString();//获取access_token
                string expires_in = ds.Tables[0].Rows[0]["expires_in"].ToString();
                string get_date = ds.Tables[0].Rows[0]["add_date"].ToString();
                if (access_token != "" && expires_in != "" && get_date != "")
                {
                    //判断是否过期
                    TimeSpan ts = DateTime.Now.Subtract(Convert.ToDateTime(get_date));
                    if ((ts.TotalSeconds - int.Parse(expires_in)) > 0)
                    {
                        //过期重新获取
                        access_token = GetAccessToken();
                    }

                }
                else
                {
                    access_token = GetAccessToken();
                }
            }
            else
            {
                access_token = GetAccessToken();
            }

            
            return access_token;
            
        }
        /// <summary>
        /// 由于本地客户端的外网IP地址不固定,IP白名单无法添加,所以只能作为测试临时使用,
        /// 正式上线后要部署到服务器定时刷新获取,服务器IP地址是固定不变
        /// </summary>
        /// <returns></returns>
        private string GetAccessToken()
        {
            string AppID = "wx6fea65cd988a5d82";
            string AppSecret = "fcf840ab5ad915fa762fe4ce3432b241";
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret);
            System.Net.WebRequest wrq = System.Net.WebRequest.Create(url);
            wrq.Method = "GET";
            System.Net.WebResponse wrp = wrq.GetResponse();
            System.IO.StreamReader sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"));
            string strResult = sr.ReadToEnd();
            //string strResult = "{\"access_token\":\"7_ORi8K6fA2wALPGycy_kEDcdV69SqZyjPfaBZRfU_ATPRXSvcan9K7cE7Ozv7BXsYg51rL0xYjsmQJvtiKEK0olkQFvcq6Qml7_kIfTiWbFHhk8TJsJKQLm4abLfY6PgXTRwwHYDYCM3fX0QBMQOhAAAQUS\",\"expires_in\":7200}";
            string access_tokens = strResult.Split(',')[0].Split(':')[1];
            access_tokens = access_tokens.Substring(1, access_tokens.Length - 2);
            string expires_in = strResult.Split(',')[1].Split(':')[1];
            expires_in = expires_in.Substring(0, expires_in.Length - 1);

            更新access_token到数据库
            try
            {
                string sql_img = "insert into tab_access_token(access_token,access_token_ref,token_type,expires_in,add_date) values('" + access_tokens + "','',0," + expires_in + ",'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "')";
                DBHelper.ExecuteSql(sql_img);
            }
            catch { }
            return access_tokens;
        }

注意:1、openID和access_token一定要配对,我就是应为做的小程序和公众号两个弄混淆了,openID保存的是小程序的,access_token是用公众号的APPID获取的,即使两者相关联,但获取到的还是不一样,害我研究了好半天才弄明白。2、在本地测试的时候一定要注意IP白名单,由于本地外网IP不固定,经常就应为没有加入IP白名单而导致获取access_token失败。3、access_token有次数限制,一定要保存起来定时获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxd512395830

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值