开发文档说明: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;
}