今天KingYiFan给大家分享一下小程序模板消息推送:
什么是微信模板推送呢?
废话不多说先上一张熟悉图
你们有没有收到这些通知。顿时是不是觉得活动性感觉很牛掰。
what?? 感觉好牛逼的样子。
今天就来教大家怎么实现。
老规矩先甩一下微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF
我是一个很懒的人从来不看微信官方文档,写的太笼统(完全看不懂~~~)。
原来我用这个玩意用的老疯狂了。天天给我喜欢的女孩推送,我喜欢你。哈哈哈 比如xxx是女神了。哈哈哈
确实做一个程序员确实能给女朋友很多浪漫的地方。为了保护我家女神隐私哈哈哈,我就不上图了。 等你们学会可以自己给女朋友退送表白信息哦。。
原来可以随便推,只要知道用户openid 就能无限制推,推到把小程序封了。。。
--------普及一下微信推送的好处。
微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条,当然可以通过某种方法发送多条,KingYiFan就不在这里赘述了。下面就介绍一下如何推送消息。
微信现在改成了只有用户点了小程序,然后生成一个fromId 该死的fromId 也就是用户不点你小程序按钮,就不会推送。好尴尬。并且这个fromId既然是一个按钮。。我靠微信真的是太坑了。。。
来吧上教程吧。。。
一、准备工作
首先,在微信小程序后台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。
插一个小小的话题。。。。
昨天我发了微信支付,有人问我微信小程序后台管理系统怎么进入。。。。。。
晕。。。。。这都不知道,你让我还能说什么呢。。。。
悄悄告诉你,当时KingYiFan也当时没找到,该死的微信隐藏的太深了。。。
注册小程序,我这就不赘述了。然后直接在微信公众平台登录就可以了。公众号也能登录,小程序也能登录。
哈哈哈哈哈~~ 是不是很扯,马爸爸说小程序是未来的趋势。。怎么不给他们开一个独立的平台。后来我给马爸爸发了一封邮件,马爸爸说 小龙给忘了。。哈哈哈哈哈 上面纯属瞎说啊。。
废话不多说。开始之前打个广告吧。下面的是KingYiFan的小程序。纯属GitHub拉去的。反正这个小程序很牛逼
这是微信小程序登录后台管理系统。(别问我为什么叫彩狼阁~~)
找到模板消息。
新建一个模板。。。
然后点击提交----
就变成了这个样子。。一点要把模板id保存到钱包里,丢了就不能和KingYiFan一起装逼了
好了,大家一定要看好 我要开始装逼(▼へ▼メ)了
纳尼,刚刚有人问我,appid怎么获取?
好咱们继续哈。。
刚刚说了半天fromId 这么牛逼的字符串,要获取呢?
--下面是微信说的
在需要触发消息推送的页面添加提交表单的事件。目的是得到formID,formID是消息推送时必须的参数。
<form name='pushMsgFm' report-submit='true' bindsubmit='getFormID'> <button form-type="submit" class="zan-btn zan-btn--large zan-btn--danger payButton">有本事点我啊~~~</button> </form>
以上代码中“getFormID”是提交表单时触发的事件。
getFormID: function (e) { this.setData({ formId: e.detail.formId }) }
三下五除二就把fromId获取了 是不是感觉懵逼。为什么腾讯获取fromId放到from表单提交里。
因为fromId 是from的儿子啊哈哈哈哈~~~
好了,不闹了,这是微信防止恶意给用户推送信息骚扰客户。具体为什么表单 我也不知道····
是不是上面的都没有看懂呢,就要开始下面了,如果你是小程序开发人员肯定能看懂,如果你和KingYiFan一样是后台程序猿,就把上面代码扔给前段工程师就好了。别问为什么,他一定会感谢你。
先来看看微信官方的API
接口地址-请求方式
你们是不是想问我access_token是什么鬼。哈哈哈哈 这个给你们扔一个APi文档你们看看就明白了就是一个微信调取APi凭证,一会给你们分享一个工具类 直接用就行。。
看看API参数
还有废弃参数,这又是什么鬼。。。来吧让你们看一些熟悉的东西。
/** * @throws @author: KingYiFan * @Title: main别问我为什么这么LOW 还用main方法,我只想告诉你main方法是最牛逼的方法没有之一 * @Description: 测试推送 * @param: args * @return: void */ public static void main(String[] args) { //封装了推送实体类,别问我为什么一直封装,java三特性 继承 封装 多态 com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplate tem = new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplate(); //模板id 刚刚获取废了很成时间 如果还不会,我觉得你应该放弃java了 tem.setTemplateId("_yPJaTTc7zmPliitwUm0VY4wjRRvuVOdk57tA1Nggw0"); //推送给哪位神仙。 这个是openId 不是UnionID 如果是unionId肯定推送不过去。 tem.setToUser("oHi8u5dZc6whcGp8DpUv7h-iM12g"); //fromId 这个炒鸡重要,没有他百分百推送不成功,fromId+openId 才能推送 tem.setForm_id("679293f4f93c31e15d1f14dcf3f77d5a"); //用户点击之后调到小程序哪个页面 找你们前段工程师提供即可 tem.setPage("pages/welcome/welcome"); //有封装了一个实体类 哈哈哈 这个是模板消息参数 List<com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam> paras = new ArrayList<com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam>(); //这个是满参构造 keyword1代表的第一个提示 红包已到账这是提示 #DC143C这是色值不过废弃了 com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam templateParam = new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam( "keyword1", "红包已到账", "#DC143C"); //装进小参数结合中 paras.add(templateParam); //我就不嘚瑟了 省点劲直接扔进去算了哈哈哈哈哈~~~~ paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword2", "刘骞", "")); paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword3", "0.02元", "#DC143C")); paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword4", "成功成为您店铺的会员", "")); paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword5", "卓志海", "")); paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword6", "暂无推荐店铺", "")); paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword7", "红包已到您app账户,请尽快查询", "#0000FF")); //这里写的挺恶心的,不想抽取工具了。直接转换时间戳把 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date temp = new Date(); String str = ""; str = sdf.format(temp); paras.add(new com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplateParam("keyword8", str, "")); //然后把所有参数扔到大的模板中 tem.setTemplateParamList(paras); //模板需要放大的关键词,不填则默认无放大 tem.setEmphasis_keyword("keyword1.DATA"); //获取token凭证。 Token token = com.jiaewo.house.wxxcx.util.CommonUtil.getToken(); String accessToken = token.getAccessToken(); //最后一步请求接口哈哈哈 推送成功 boolean result1 = com.jiaewo.house.wxxcx.util.CommonUtil.sendTemplateMsg(accessToken, tem); if (result1) { System.err.println("推送成功"); } else { System.err.println("推送失败"); } }
是不是感觉炒鸡简单。。。。。没错哈哈哈哈。。。
来继续甩代码和工具类---
/** * @ClassName: Template * @Description:小程序微信推送模版model * @author: KingYiFan * @date: 2018年3月5日 下午4:17:25 */ public class wxsmallTemplate { // 消息接收方 private String toUser; // 模板id private String templateId; // 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转 private String page; // 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id private String form_id; // 模板内容字体的颜色,不填默认黑色 【废弃】 private String color; // 模板需要放大的关键词,不填则默认无放大 private String emphasis_keyword; // 参数列表 private List<wxsmallTemplateParam> templateParamList; public String getToUser() { return toUser; } public void setToUser(String toUser) { this.toUser = toUser; } public String getTemplateId() { return templateId; } public void setTemplateId(String templateId) { this.templateId = templateId; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public String getForm_id() { return form_id; } public void setForm_id(String form_id) { this.form_id = form_id; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getEmphasis_keyword() { return emphasis_keyword; } public void setEmphasis_keyword(String emphasis_keyword) { this.emphasis_keyword = emphasis_keyword; } public List<wxsmallTemplateParam> getTemplateParamList() { return templateParamList; } public void setTemplateParamList(List<wxsmallTemplateParam> templateParamList) { this.templateParamList = templateParamList; } public String toJSON() { StringBuffer buffer = new StringBuffer(); buffer.append("{"); buffer.append(String.format(""touser":"%s"", this.toUser)).append(","); buffer.append(String.format(""template_id":"%s"", this.templateId)).append(","); buffer.append(String.format(""page":"%s"", this.page)).append(","); buffer.append(String.format(""form_id":"%s"", this.form_id)).append(","); buffer.append(""data":{"); wxsmallTemplateParam param = null; for (int i = 0; i < this.templateParamList.size(); i++) { param = templateParamList.get(i); // 判断是否追加逗号 if (i < this.templateParamList.size() - 1) { buffer.append(String.format(""%s": {"value":"%s","color":"%s"},", param.getName(), param.getValue(), param.getColor())); } else { buffer.append(String.format(""%s": {"value":"%s","color":"%s"}", param.getName(), param.getValue(), param.getColor())); } } buffer.append("},"); buffer.append(String.format(""emphasis_keyword":"%s"", this.emphasis_keyword)); buffer.append("}"); return buffer.toString(); } } /** * @Title: Token.java * @Package com.jiaewo.house.entity * @author: 家小二-风清扬 * @date: 2018年3月5日 下午4:39:38 * @version V1.0 */package com.jiaewo.house.entity;/** * @ClassName: Token * @Description:微信凭证实体类 * @author: 家小二-风清扬 * @date: 2018年3月5日 下午4:39:51 * * @Copyright: 2018 www.jiajiao2o.com Inc. All rights reserved. * 注意:本内容仅限于北京赢在路上科技有限公司内部传阅,禁止外泄以及用于其他的商业目 */public class Token { // 接口访问凭证 private String accessToken; // 凭证有效期,单位:秒 private int expiresIn; public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public int getExpiresIn() { return expiresIn; } public void setExpiresIn(int expiresIn) { this.expiresIn = expiresIn; }}
参数Bean
/** * @ClassName: TemplateParam * @Description:微信推送模版model * @author: KingYiFan * @date: 2018年3月5日 下午4:16:33 */ public class wxsmallTemplateParam { // 参数名称 private String name; // 参数值 private String value; // 颜色 废弃了哎。。。。。。。。。。。。。。。。。。。 private String color; public wxsmallTemplateParam(String name, String value, String color) { this.name = name; this.value = value; this.color = color; } public wxsmallTemplateParam(String name, String value) { this.name = name; this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
获取接口访问凭证获取token
/** * 获取接口访问凭证 * * @param appid * 凭证 * @param appsecret * 密钥 * @return */ public static Token getToken() { Token token = null; String requestUrl = token_url.replace("APPID", appID).replace("APPSECRET", secret); // 发起GET请求获取凭证 JSONObject jsonObject = httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { try { token = new Token(); token.setAccessToken(jsonObject.getString("access_token")); token.setExpiresIn(jsonObject.getInt("expires_in")); } catch (JSONException e) { token = null; // 获取token失败 log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg")); } } return token; }
推送消息 请求腾讯API
public static boolean sendTemplateMsg(String token, com.jiaewo.house.entity.wxsmallapppush.wxsmallTemplate template) { boolean flag = false; String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN"; requestUrl = requestUrl.replace("ACCESS_TOKEN", token); net.sf.json.JSONObject jsonResult = httpsRequest(requestUrl, "POST", template.toJSON()); System.err.println(template.toJSON()); if (jsonResult != null) { Integer errorCode = jsonResult.getInt("errcode"); String errorMessage = jsonResult.getString("errmsg"); if (errorCode == 0) { flag = true; } else { System.out.println("模板消息发送失败:" + errorCode + "," + errorMessage); flag = false; } } return flag; }
剧终。。。。
花絮··
疑问1:用户只有点了生成fromId是不是才能推送?
答:对没错,还有一种方法就是用户支付成功 prepay_id 用户支付成功可以连续推送三次哦!
疑问2:怎么才能给用户无限制推送?
答:目前微信是不支持的,不过KingYiFan想了一个歪点子,那就是吧所有按钮都弄成表单钮,然后用户点了,存起来。记住哈。fromId只有7天有效期,如果不用就浪费了。用完就没用了
彩蛋开始哈哈哈。。原创 转载请说明出处
KingYiFan教你无限制给用户推送消息KingYiFan教你无限制给用户推送消息
1.封装小程序页面,诱导用户点击按钮,然后生成fromId
2.把fromId存入数据库 然后设置一个有效期 起始时间 和过期时间。
3.比如想给用户推送广告,在把fromId拿出来 直接推送。推送完删除。
PS:只要用户点击就保存数据库别嫌多。越多就代表能和用户推无数条
来吧给大家画一个流程图吧。
上面就是一套完整的微信小程序推送流程,有什么不懂就联系我。
鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。
微信:
支付宝:
感谢一路支持我的人。。。。。
Love me and hold me
QQ:69673804(16年老号)
EMAIL:69673804@qq.com
友链交换
如果有兴趣和本博客交换友链的话,请按照下面的格式在评论区进行评论,我会尽快添加上你的链接。
网站名称:KingYiFan’S Blog
网站地址:http://blog.cnbuilder.cn
网站描述:年少是你未醒的梦话,风华是燃烬的彼岸花。
网站Logo/头像:http://blog.cnbuilder.cn/upload/2018/7/avatar20180720144536200.jpg