背景
因为要实现向用户推送一些消息,但是每个用户收到的消息按需求又是不同的
这里,比如在考试前向学生推送考试信息,那么每个用户收到信息的时间是不同的,收到的内容是不同的
所以,消息需要定制发送
在微信提供的接口中,我们设想了几种方案来实现,最终选择了按照openid列表群发接口来实现
功能
根据不同用户在不同的时间向用户发送定制的消息
代码
获取用户openid
if (!IsPostBack && (Request.QueryString["echostr"]==null))
{
string appid = "YOUR APPID";
string appsecret = "YOUR APPSECRET";
string code = null;
//调用10次微信服务,查询用户openid-暂时不用
//for (int i = 0; i < 10; i++)
//{
code = Request.QueryString["code"];
if (code == null)
{
Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http%3a%2f%2--你的域名--%2fET%2f&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
}
else
{
string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + code + "&grant_type=authorization_code";
string jsonReturn = "";
HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(url);
httprequest.Method = "GET";
HttpWebResponse response = (HttpWebResponse)httprequest.GetResponse();
using (Stream steam = response.GetResponseStream())
{
StreamReader reader = new StreamReader(steam, Encoding.GetEncoding("gb2312"));
jsonReturn = reader.ReadToEnd();
steam.Close();
}
JObject jo = JObject.Parse(jsonReturn);
OPENID = jo["openid"].ToString();
}
}
获取access_token
public static string getAccessToken()
{
string appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
string appsecret = System.Configuration.ConfigurationManager.AppSettings["appsecret"];
string access_token = null;
string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret;
string jsonReturn = "";
HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(url);
httprequest.Method = "GET";
HttpWebResponse response = (HttpWebResponse)httprequest.GetResponse();
using (Stream steam = response.GetResponseStream())
{
StreamReader reader = new StreamReader(steam, Encoding.GetEncoding("gb2312"));
jsonReturn = reader.ReadToEnd();
steam.Close();
}
JObject jo = JObject.Parse(jsonReturn);
access_token = jo["access_token"].ToString();
return access_token;
}
用post方式推送
private static string Post(string url, byte[] bytesToPost)
{
if (String.IsNullOrEmpty(url))
return "url参数为空值";
if (bytesToPost == null)
return "post数据为空值";
string ResponseString = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
System.Net.ServicePointManager.DefaultConnectionLimit = 50;
request.KeepAlive = false;
request.Method = "POST";
request.ContentType = "text/xml";//提交xml
request.ContentLength = bytesToPost.Length;
Stream writer = request.GetRequestStream();
writer.Write(bytesToPost, 0, bytesToPost.Length);
HttpWebResponse HttpWebRespon = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(HttpWebRespon.GetResponseStream(), Encoding.UTF8);
ResponseString = myStreamReader.ReadToEnd();
myStreamReader.Close();
writer.Flush();
if (writer != null)
{
writer.Close();
}
if (request != null)
{
request.Abort();
}
return ResponseString;
}
向openid发送定制消息
string access_token = getAccessToken();
string url = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=" + access_token;
string postText = "{
\"touser\":[\"" + list[i].WeChatOpenId + "\",\"\"],\"msgtype\": \"text\",\"text\": {
\"content\": \"【 考试提醒 】\\n\\n\\n" + list[i].StudentName + "同学,你好!\\n明天有考试,请做好准备\\n\\n考试科目:" + list[i].ExamName + "\\n考试日期:" + list[i].Date + "\\n考试时间:" + list[i].StartTime + " - " + list[i].EndTime + "\\n考试地点:" + list[i].ExamPlace + "-" + list[i].SeatNo + "号\\n\\n" + "请提前准备好文具和证件\\n详细情况可点击“查考场”进行查询\\n\\n" + "祝您考试顺利~~\\n\\n\\n" + "-------------------------------\\n" + "xx公司 · 技术支持\\n" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "\"}}";
//因为汉字编码问题,出现40008错误,可采用以下方式对文本编码
//string contentText = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("今天用微信和女神表白,什么排比、比喻各种修辞,可谓字字经典,句句动情,引经据典,声情并茂。最后,在我强烈的感情攻势下,女神终于回了一句:你谁啊?"));
Encoding encoding = Encoding.GetEncoding("utf-8");
byte[] bytesToPost = encoding.GetBytes(postText);
string res = Post(url, bytesToPost);
Console.WriteLine(res);
流程说明
1.首先需要获取用户openid,在用户访问页面的时候就可以获得,然后存到数据库中
2.获取access_token,用post方式调用微信接口向用户发送消息
注意:
具体什么时间发送,发送什么什么内容,根据自己的业务逻辑来编写
这里的定时发送采用的是Quartz框架,并把推送程序做成了一个服务
小结
在实现消息推送的过程中,遇到很多问题
比如:如何获取openid,获取access_token,在哪里获取,如何和微信接口交互,如何实现定时发送,程序应该是一个BS、CS、控制台、还是服务
在讨论和实践的过程中,每次叠加实现一个技术点,一步步实现了功能
今天的文章微信定制消息怎么设置_消息推送平台分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/67931.html