前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序推送模板消息

微信小程序推送模板消息

作者头像
猿码优创
发布2019-07-28 14:09:19
9.5K2
发布2019-07-28 14:09:19
举报
文章被收录于专栏:猿码优创猿码优创

今天KingYiFan给大家分享一下小程序模板消息推送:


~~什么是微信模板推送呢?~~ 废话不多说先上一张熟悉图

活动行
活动行

你们有没有收到这些通知。顿时是不是觉得活动性感觉很牛掰。

今天就来教大家怎么实现。

我是一个很懒的人从来不看微信官方文档,写的太笼统(~~完全看不懂~~~~~)。

~~原来我用这个玩意用的老疯狂了。天天给我喜欢的女孩推送,我喜欢你。哈哈哈 比如xxx是女神了。哈哈哈 确实做一个程序员确实能给女朋友很多浪漫的地方。为了保护我家女神隐私哈哈哈,我就不上图了。 等你们学会可以自己给女朋友退送表白信息哦。。~~


原来可以随便推,只要知道用户openid 就能无限制推,推到把小程序封了。。。 --------普及一下微信推送的好处。

微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条,当然可以通过某种方法发送多条,KingYiFan就不在这里赘述了。下面就介绍一下如何推送消息。

微信现在改成了只有用户点了小程序,然后生成一个fromId 该死的fromId 也就是用户不点你小程序按钮,就不会推送。好尴尬。并且这个fromId既然是一个按钮。。我靠微信真的是太坑了。。。

来吧上教程吧。。。

一、准备工作

代码语言:javascript
复制
首先,在微信小程序后台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。

插一个小小的话题。。。。 昨天我发了微信支付,有人问我微信小程序后台管理系统怎么进入。。。。。。 晕。。。。。这都不知道,你让我还能说什么呢。。。。 悄悄告诉你,当时KingYiFan也当时没找到,该死的微信隐藏的太深了。。。


注册小程序,我这就不赘述了。然后直接在微信公众平台登录就可以了。公众号也能登录,小程序也能登录。 哈哈哈哈哈~~ 是不是很扯,马爸爸说小程序是未来的趋势。。怎么不给他们开一个独立的平台。后来我给马爸爸发了一封邮件,马爸爸说 小龙给忘了。。哈哈哈哈哈 上面纯属瞎说啊。。

这是微信小程序登录后台管理系统。

(别问我为什么叫彩狼阁~~~~~~)

找到模板消息。

新建一个模板。。。

然后点击提交----

就变成了这个样子。。一点要把模板id保存到钱包里,丢了就不能和KingYiFan一起装逼了

好了,大家一定要看好 我要开始装逼(▼へ▼メ)了

纳尼,刚刚有人问我,appid怎么获取?

好咱们继续哈。。 刚刚说了半天fromId 这么牛逼的字符串,要获取呢? --下面是微信说的 在需要触发消息推送的页面添加提交表单的事件。目的是得到formID,formID是消息推送时必须的参数。

代码语言:javascript
复制
<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”是提交表单时触发的事件。

代码语言:javascript
复制
getFormID: function (e) {
    	 this.setData({
    formId: e.detail.formId
		})
	}

三下五除二就把fromId获取了 是不是感觉懵逼。为什么腾讯获取fromId放到from表单提交里。 因为fromId 是from的儿子啊哈哈哈哈~~~ 好了,不闹了,这是微信防止恶意给用户推送信息骚扰客户。具体为什么表单 我也不知道····

(adsbygoogle =window.adsbygoogle ||[]).push({});


是不是上面的都没有看懂呢,就要开始下面了,如果你是小程序开发人员肯定能看懂,如果你和KingYiFan一样是后台程序猿,就把上面代码扔给前段工程师就好了。别问为什么,他一定会感谢你。

先来看看微信官方的API 接口地址-请求方式

你们是不是想问我access_token是什么鬼。哈哈哈哈 这个给你们扔一个APi文档你们看看就明白了就是一个微信调取APi凭证,一会给你们分享一个工具类 直接用就行。。

看看API参数

还有废弃参数,这又是什么鬼。。。来吧让你们看一些熟悉的东西。

代码语言:javascript
复制
	/**
     * @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("推送失败");
        }
    }

是不是感觉炒鸡简单。。。。。没错哈哈哈哈。。。

来继续甩代码和工具类---

代码语言:javascript
复制
/**
	 * @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

代码语言:javascript
复制
/**
	 * @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

代码语言:javascript
复制
/**
	 * 获取接口访问凭证
	 *
	 * @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

代码语言:javascript
复制
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天有效期,如果不用就浪费了。用完就没用了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今天KingYiFan给大家分享一下小程序模板消息推送:
  • 来吧上教程吧。。。
  • 剧终。。。。
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档