说明
最近需要做一个微信小程序中的发送订阅消息功能,网上看了些资料,说明不是很详细,这里详细记录下,前面的申请模板就不说了,网上资料很多,也很详细,主要说明下代码
小程序端
调用下接口,需要用户允许才能发送
wx.requestSubscribeMessage({
//模板ID
tmplIds: ['JTh0eBJScPIcEVjb9dhQDVN9xZXFvyZ3WXWgrljnUP8'],
success (res) {
console.log(res);
}
})
服务器端
//发送订阅消息
public ResponseModel SendSubscribe(string openid, string repairid)
{
//demo格式
//"{
// "touser": \"OPENID\",
// "template_id": "TEMPLATE_ID",
// "page": "index",
// "miniprogram_state":"developer",
// "lang":"zh_CN",
// "data": {
// "number01": {
// "value": "339208499"
// },
// "date01": {
// "value": "2015年01月05日"
// },
// "site01": {
// "value": "TIT创意园"
// } ,
// "site02": {
// "value": "广州市新港中路397号"
// }
// }
//}"
//组装json格式的请求参数
string content = "维修水龙头";
string finishtime = DateTime.Now.ToLocalTime().ToString();
string tips = "超过7日未验收,系统将自动验收";
var param = new
{
touser = openid,
template_id = DormConfig.WARN_ACCEPT,
data = new
{
//参数名要按照小程序后台模板中详细内容的参数写
character_string1 = new { value= repairid },
thing2 = new { value = content },
time3 = new { value = finishtime },
thing4 = new { value = tips }
}
};
string _params = JsonTools.Instance.ToJson(param);
string token = Home_BLL.Instance.GetAccessToken();
string res=RequestWXAPI.Instance.SendSubscribe(token, _params);
if (res != "OK") return new ResponseModel() { Code = 101, Msg = res };
return new ResponseModel() { Code = 200, Msg = "success" };
}
SendSubscribe方法就是调用微信接口:
https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
然后post参数,比较简单,这里就不贴了
注意
先贴下遇到的返回信息的几种情况
- {“errcode”:43101,“errmsg”:“user refuse to accept the msg hint: [e5WcGA07873114]”}
用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系,如果只订阅1次,第二次发送也会有这个错误 - {“errcode”:47003,“errmsg”:“argument invalid! hint: [26.orA01123945] data.character_string1.value i”}
模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错 参数名按照小程序后台模板里的写 - {“errcode”:0,“errmsg”:“ok”}
成功
第二种47003错误,是因为post的参数名和模板中的不同,这点网上有很多案例是写的thing01这种格式,注意这个参数名是不可以自己修改定义的,需严格按照模板中的来,在模板中以下位置
进入“详情”,按照详细内容中的名称填写