微信模板消息推送

版权声明:本文为博主原创文章,需要转载尽管转载。 https://blog.csdn.net/z5976749/article/details/50595604

开发文档说明:http://mp.weixin.qq.com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.html#.E8.8E.B7.E5.BE.97.E6.A8.A1.E6.9D.BFID

请求方法:

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN
返回值:
   {
           "errcode":0,
           "errmsg":"ok",
           "template_id":"Aojud5uP7Aciu-qZ2sIUPtWkbkYnWBWVja22DeDISyk"
       }

POST数据:

 {
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",            
           "data":{
                   "first": {
                       "value":"恭喜你购买成功!",
                       "color":"#173177"
                   },
                   "keynote1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keynote2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keynote3": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"欢迎再次购买!",
                       "color":"#173177"
                   }
           }
       }
这是传给微信服务器的数据。

写法:

    [DataContract]
    public class BaseTemplete
    {
        [DataMember(Order = 0, IsRequired = true)]
        public string touser { get; set; }        //接收方的openid
        [DataMember(Order = 1, IsRequired = true)]
        public string template_id { get; set; }   //模板ID
        [DataMember(Order = 2, IsRequired = true)]
	public string url { get; set; } //点击模板进入的页面地址</span>
        [DataMember(Order = 3, IsRequired = true)]
        public OrderConfirm data { get; set; } //data数据
    }
 
 

    [DataContract]
    public class OrderConfirm
    {
        [DataMember(Order = 0)]
        public TempleteValue first { get; set; }
        [DataMember(Order = 1)]//订单编号:{{keyword1.DATA}}
        public TempleteValue keyword1 { get; set; }
        [DataMember(Order = 2)]//下单时间:{{keyword2.DATA}}
        public TempleteValue keyword2 { get; set; }
        [DataMember(Order = 3)]//订单详情:{{keyword3.DATA}}
        public TempleteValue keyword3 { get; set; }
        [DataMember(Order = 4)]//订单金额:{{keyword4.DATA}}
        public TempleteValue keyword4 { get; set; }
        [DataMember(Order = 5)]//备注
        public TempleteValue remark { get; set; }
    }
可以看到在data中的数据,除了内容和名字不一样,value和color都是不变的,可以把他们单独写成一个类

扫描二维码关注公众号,回复: 3212496 查看本文章

    [DataContract]
    public class TempleteValue
    {
        [DataMember(Order = 0, IsRequired = true)]
        public string value { get; set; } //对应的值
        [DataMember(Order = 1)]
        public string color { get; set; } //对应文字的颜色

        //重写构造函数
        public TempleteValue(string value,string color)
        {
            this.value = value;
            this.color = color;
        }
    }

这里生成一个TempleteValue对象

TempleteValue t1 = new TempleteValue("name","#000");

这样data中的first已经生成好了,赋值给OrderConfirm

OrderConfirm oc = new OrderConfirm();

oc.first = t1;

一次赋值到remark,然后把BaseTemplete序列化就OK了。

具体:

                            OrderConfirmTemplete orderConfirmTemplete = new OrderConfirmTemplete();
                            orderConfirmTemplete.touser = ds.Tables[0].Rows[0]["WECHAT_OPEN_ID"].ToString();//用户openid
                            orderConfirmTemplete.template_id = ConfigurationManager.AppSettings["confirmid"].ToString();//模板id
                            orderConfirmTemplete.url = ""//链接地址,可不写
                            OrderConfirm oc = new OrderConfirm();
                            TempleteValue tv1 = new TempleteValue("尊敬的用户您好。您有一个订单待确认!", "#000");
                            oc.first = tv1;
                            TempleteValue tv2 = new TempleteValue("1", "#000");
                            oc.keyword1 = tv2;
                            TempleteValue tv3 = new TempleteValue("2", "#173177");
                            oc.keyword2 = tv3;
                            TempleteValue tv4 = new TempleteValue("3", "#173177");
                            oc.keyword3 = tv4;
                            TempleteValue tv5 = new TempleteValue("5", "#173177");
                            oc.keyword4 = tv5;
                            TempleteValue tv6 = new TempleteValue("点击查看详细信息", "#00f");
                            oc.remark = tv6;
                            orderConfirmTemplete.data = oc;
                            string postdata = WXJSONHelper.GetJson<OrderConfirmTemplete>(orderConfirmTemplete); //序列化方法,不会则看我上一篇博客
                            //调用发送模板消息的方法
                            SendModelMessageInterface(postdata, "11111");

SendModelMessageInterface方法:

        public string SendModelMessageInterface(string postData, string accountcode)   
        {
            string access_Token = new GetAccessToken().GetNewAccess_token(accountcode); //内部自己写获取token的方法
            string url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_Token; //微信token,
            return DealPost(url,postData); //POST数据到微信服务器
        }
DealPost:

       public  string DealPost(string posturl, string postdata)
       {
           string responseString = "";//post返回的结果
           ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
           HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(posturl);
           req.Method = "POST";
           req.Headers["Cookie"] = "usersession=67d2da2c9f17e5e189fb1bf334fc6e36";
           byte[] postBytes = Encoding.UTF8.GetBytes(postdata);
           req.ContentType = "application/json; charset=utf-8";
           req.ContentLength = Encoding.UTF8.GetByteCount(postdata);//strJson为json字符串
           Stream stream = req.GetRequestStream();
           stream.Write(postBytes, 0, postBytes.Length);
           req.Timeout = 90000;
           stream.Close();
           var response = req.GetResponse();
           Stream streamResponse = response.GetResponseStream();
           StreamReader streamRead = new StreamReader(streamResponse);
           responseString = streamRead.ReadToEnd();
           response.Close();
           streamRead.Close();
           return responseString;
       }




猜你喜欢

转载自blog.csdn.net/z5976749/article/details/50595604