【微信开发】定制消息推送
背景
因为要实现向用户推送一些消息,但是每个用户收到的消息按需求又是不同的
这里,比如在考试前向学生推送考试信息,那么每个用户收到信息的时间是不同的,收到的内容是不同的
所以,消息需要定制发送
在微信提供的接口中,我们设想了几种方案来实现,最终选择了按照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、控制台、还是服务
在讨论和实践的过程中,每次叠加实现一个技术点,一步步实现了功能
【微信开发】定制消息推送相关推荐
- 微信小程序消息推送功能开发(java实现)
先好好把官方文档看一看,链接https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push ...
- 微信公众号消息推送开发(模板消息):点击推送消息跳转到网页或者小程序(三)
需求场景: 点击推送的消息后跳转到小程序中的某个页面,或者跳转到某一个网页上,例如有这样一个需求,在商城平台购买产品后,需要通过公众号给用户推送订单详细并且点击消息可以看到对应的订单详情.以下我将在微 ...
- php微信小程序物流进度推送,微信小程序 消息推送php服务器验证实例详解
微信小程序 消息推送php服务器验证实例详解 设置页面("设置">>"开发设置"): 1.设置服务器域名 注意http和https协议的不同. 2. ...
- 小程序云开发之消息推送功能
小程序云开发之消息推送功能(图文) 一:新建项目 APPID获取方法:1.在微信公众平台上注册账号,选择小程序(也可以从服务号注册,前提你有一个服务号)注册后登录,登录时微信扫码验证一下 2.填写小程 ...
- iOS开发之消息推送 —— 远程消息推送入门
每次看到iOS的远程消息推送,总是感觉很头大,即便后来项目都做完了,还是觉得摸不着远程推送的脉门,网上介绍的资料虽多,但不是写的太简单了,就是写的太详细了,不能一下抓住要点,今天终于能够抽出点时间,来 ...
- android开发之消息推送
本人想把Android所要运用到的所有的东西都好好的梳理一遍,那今个儿就和大伙说说消息推送:想必大家都玩过小米手机,细心的人会发现,小米手机时不时的就会发一些通知告诉你要系统升级了.某某App有新版本 ...
- php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例
这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...
- nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能
利用Nodejs怎么实现一个微信小程序消息推送功能 发布时间:2021-01-20 13:55:29 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关利用Nodejs怎么实现一个微信小程 ...
- TP6 微信小程序消息推送配置Token校验失败200302
ThinkPHP6 微信小程序消息推送配置时报错: {"ret":200302,"err_msg":"verify token fail"} ...
- Beego搭建企业微信机器人定时消息推送
Beego搭建企业微信Robot定时消息推送 功能说明 PostMan添加job msgType 默认是:text并且支持@all markdown支持颜色和样式但是不支持@all cron quar ...
最新文章
- c++ template(4)基本技巧
- c# 深拷贝各种实现方式
- 【土地评价与土地管理】案例:某地区土地农业利用潜力评价
- aspx隐藏前台控件div_c# – 代码隐藏页面无法“查看”aspx页面中声明的任何项目/控件...
- Java 跨平台运行机理:Dos 命令在桌面新建文件夹,并在其中编译、运行一段 Java 程序
- shrio 登陆后 还是失效_在 iPhone 上取消订阅后,应用或内容会立即失效吗?
- 爬虫-scrapy数据的持久化存储
- 每日冲刺报告——Day2(Java-Team)
- Html中解决点击 a 标签刷新的问题,实现点击时不刷新
- 电脑重装系统 Win11 如何打开DirectX诊断工具
- 安装EUCALYPTUS
- 浅谈5G和4G有哪些区别?
- Android渐变背景色
- CF1427E Xum
- 洛谷 P5144 蜈蚣
- 关于纳什均衡与博弈论
- 4. Python函数
- Java音乐播放器设计
- 苹果手机sim卡无效怎么办_工信部提醒及时设置SIM卡密码有用吗,手机被盗该怎么办,盗走个人信息危害大吗?- 今日头条...
- 【闲趣】你的父母有哪些神操作?