您的位置:首页 > 移动开发 > 微信开发

微信模板消息推送

2016-01-27 17:48 736 查看
开发文档说明: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都是不变的,可以把他们单独写成一个类

[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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: