微信公众号开发——模板消息

一、申请模板消息权限
模板消息的申请需账号已经开通微信支付权限。
在微信公众平台的后台,依次进入“功能->添加功能插件->模板消息”,即可申请模板消息。
这里写图片描述
这里写图片描述


选择2个行业

这里写图片描述


选择模板

这里写图片描述
这里写图片描述


TemplateNews 类代码

using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeiXinPublic.utils;

namespace WeiXinPublic.dialog_service
{
    /// <summary>
    /// 模板消息
    /// </summary>
    public class TemplateNews
    {
        /// <summary>
        /// 发送模板消息
        /// </summary>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        /// <param name="postStr"></param>
        /// <returns></returns>
        private static string send_news(string appid, string secret, string postStr) 
        {
            //1.获取access_token
            Hashtable ht_access_token = BasisSupport.GetAccessToken(appid, secret);
            string access_token = ht_access_token["access_token"].ToString();
            //post数据到接口
            string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
            return Sender.Post(url, postStr);  
            //返回值{"errcode":0,"errmsg":"ok","msgid":427603660}
        }


        /// <summary>
        /// 发送模板消息
        /// </summary>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        /// <param name="postStr"></param>
        /// <returns></returns>
        public static string SendNews(string appid, string secret, string postStr) 
        {
            return send_news(appid, secret, postStr);
        }
    }
}

BasisSupport 类代码

using Codeplex.Data;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeiXinPublic.utils;

namespace WeiXinPublic.dialog_service
{
    /// <summary>
    /// 基础支持
    /// 1.获取access_token(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183&token=&lang=zh_CN)
    /// 2.获取微信服务器IP地址(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140187&token=&lang=zh_CN)
    /// </summary>
    public class BasisSupport
    {
        #region 获取access_token
        /// <summary>
        /// 获取access_token json字符串 调用微信接口
        /// </summary>
        /// <returns></returns>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        /// <returns></returns>
        private static string get_accesstoken(string appid, string secret)
        {
            string res = string.Empty;
            object obj = CacheHelper.GetCache("access_token");
            if (obj != null)
            {
                res = obj.ToString();
            }
            else
            {
                string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
                //通过接口去取
                res = Sender.Get(url);
                CacheHelper.AddCache("access_token", res, DateTime.Now.AddMinutes(120));   //ccess_token的有效期目前为2个小时  
            }
            return res;
        }

        /// <summary>
        /// 获取access_token
        /// </summary>
        /// <param name="appid"></param>
        /// <param name="secret"></param>
        /// <returns></returns>
        public static Hashtable GetAccessToken(string appid, string secret)
        {
            string res = get_accesstoken(appid, secret);
            var json = DynamicJson.Parse(res);
            var access_token = json.access_token;
            var expires_in = json.expires_in;

            //万能字典
            Hashtable ht = new Hashtable();
            ht.Add("access_token", access_token);
            ht.Add("expires_in", expires_in);
            return ht;
        } 
        #endregion

        #region 获取微信服务器IP地址
        /// <summary>
        /// 获取微信服务器IP地址
        /// </summary>
        /// <returns></returns>
        private static string get_ip_list(string accesstoken)
        {
            string url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=" + accesstoken;
            return Sender.Get(url);
        }

        /// <summary>
        /// 获取微信服务器IP地址
        /// </summary>
        /// <param name="accesstoken"></param>
        /// <returns></returns>
        public static string[] GetIpList(string accesstoken)
        {
            string res = get_ip_list(accesstoken);
            var json = DynamicJson.Parse(res);
            var ip_list = json.ip_list;
            string[] array = ip_list;
            return array;
        } 
        #endregion
    }
}

Sender 类代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace WeiXinPublic.utils
{
    public class Sender
    {
        /// <summary>
        /// Get方式 访问微信接口
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string Get(string url)
        {
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            myRequest.Method = "GET";
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

        /// <summary>
        /// Post方式 访问微信接口
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postData"></param>
        /// <returns></returns>
        public static string Post(string url, string postData)
        {
            Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(postData);
            // 准备请求...
            try
            {
                // 设置参数
                request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //发送请求并获取相应回应数据
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才开始向目标网页发送Post请求
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回结果网页(html)代码
                string content = sr.ReadToEnd();
                string err = string.Empty;
                return content;
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                return string.Empty;
            }
        }
    }
}

程序调用 代码

using Gzh.MvcWeb.Utility.Filter;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WeiXinPublic.dialog_service;

namespace Gzh.MvcWeb.Controllers
{
    public class TestController : Controller
    {
        public ActionResult Index()
        {
            string postStr = CreateTemplateNews("您收到了一条新的核实指令", DateTime.Now.ToString(), "居住登记", "待核实", "请在24小时核实并反馈", "o3rzYjnz7_WTogm-tnwJCwF2SvW8", "5EHjYKcHRnVsPUEw4t1tP4h5UofL9vFbzbOIffY6SQg", "http://jnga.sunmen.cn/Operator/UnCheckList/96");

            string str = TemplateNews.SendNews("wxb71307a08c833e74", "32c445427d5cd950445211d9c39fdd81", postStr);

            return View();
        }


        /// <summary>
        /// 创建模板消息post数据
        /// </summary>
        /// <param name="firstText"></param>
        /// <param name="keyword1Text"></param>
        /// <param name="keyword2Text"></param>
        /// <param name="keyword3Text"></param>
        /// <param name="remarkText"></param>
        /// <param name="openid">接受者openid</param>
        /// <param name="tempId">模板id</param>
        /// <param name="jumpUrl">跳转地址</param>
        /// <returns></returns>
        private static string CreateTemplateNews(string firstText, string keyword1Text, string keyword2Text, string keyword3Text, string remarkText, string openid, string tempId, string jumpUrl)
        {
            var firstObj = new { value = firstText }; 
            var keyword1Obj = new { value = keyword1Text };
            var keyword2Obj = new { value = keyword2Text };
            var keyword3Obj = new { value = keyword3Text };
            var remarkObj = new { value = remarkText };

            var data = new { first = firstObj, keyword1 = keyword1Obj, keyword2 = keyword2Obj, keyword3 = keyword3Obj, remark = remarkObj };

            var obj = new { touser = openid, template_id = tempId, url = jumpUrl, data = data };
            string postStr = JsonConvert.SerializeObject(obj);
            return postStr;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值