时序图

​​​​​​​

首先,我们需要知道一件事情,小程序的模板推送分为“一次性订阅”和“长期订阅”

一次性订阅:用户订阅小程序后,程序只能对指定OpenId进行一次推送模板消息,无法多次推送

长期订阅:用户长期订阅,能够多次推送模板消息(长期订阅模板需要向微信官方发起申请)

推送模板消息前置配置

1.需要配置消息推送

2.需要根据AppId、AppSecret调用开发文档Api获取access_token

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

2.需要使用access_token调用以下Api获取到微信用户的open_id

POST https://api.weixin.qq.com/wxa/getpluginopenpid?access_token=ACCESS_TOKEN

推送模板消息API

微信开发文档中的模板消息已经废弃不进行使用了,我们现在应该使用“订阅消息”——>“send”这个API(下方链接)

subscribeMessage.send | 微信开放文档

其中参数的data属性,需要我们在代码中与之对应:

例如:

模板格式

参数类型:

类型:(需要注意一些长度限制)

上边的准备好就可以进行代码编写。

代码实现

1.模板消息:(所要传的参数实体)

public class WxSubscribeMsg {// 接收人idprivate String touser;// 模板idprivate String template_id;// 跳转小程序private String page;// 模板数据private Map<String, WxTemplateValue> data;// 跳转小程序类型 默认正式版private String miniprogram_state;// 语言类型 默认中文private String lang = "zh_CN";public String getTouser() {return touser;}public void setTouser(String touser) {this.touser = touser;}public String getTemplate_id() {return template_id;}public void setTemplate_id(String template_id) {this.template_id = template_id;}public String getPage() {return page;}public void setPage(String page) {this.page = page;}public Map<String, WxTemplateValue> getData() {return data;}public void setData(Map<String, WxTemplateValue> data) {this.data = data;}public String getMiniprogram_state() {return miniprogram_state;}public void setMiniprogram_state(String miniprogram_state) {this.miniprogram_state = miniprogram_state;}public String getLang() {return lang;}public void setLang(String lang) {this.lang = lang;}
}

2.模板内容:(API中的data属性)

public class WxTemplateValue {private String value;public String getValue() {return value;}public void setValue(String value) {this.value = value;}@Overridepublic String toString() {return "WxTemplateValue{" +"value='" + value + '\'' +'}';}
}

3.返回数据接收

public class WxUserInfo {private String openid;private String session_key;private String unionid;private int errcode;private String errmsg;public String getOpenid() {return openid;}public void setOpenid(String openid) {this.openid = openid;}public String getSession_key() {return session_key;}public void setSession_key(String session_key) {this.session_key = session_key;}public String getUnionid() {return unionid;}public void setUnionid(String unionid) {this.unionid = unionid;}public int getErrcode() {return errcode;}public void setErrcode(int errcode) {this.errcode = errcode;}public String getErrmsg() {return errmsg;}public void setErrmsg(String errmsg) {this.errmsg = errmsg;}
}

推送代码:

调用的API接口:

POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
WxSubscribeMsg wxSubscribeMsg = new WxSubscribeMsg();wxSubscribeMsg.setTouser(openId);wxSubscribeMsg.setTemplate_id(templateId);// 模板消息到小程序跳转页面wxSubscribeMsg.setPage("pages/workbench/workbench?id=" + dto.getId()+"&pageTpye=task");
//                             开发版
//                            wxSubscribeMsg.setMiniprogram_state("developer");
//                             跳转体验版wxSubscribeMsg.setMiniprogram_state("trial");
//                             跳转正式版
//                            wxSubscribeMsg.setMiniprogram_state("formal");// 模板消息Map<String, WxTemplateValue> map = new HashMap<>();// 发布内容WxTemplateValue keyword1 = new WxTemplateValue();keyword1.setValue(sendContent);map.put("thing1", keyword1);// 影响区域WxTemplateValue keyword2 = new WxTemplateValue();String taskArea = dto.getSecondAreaName()+dto.getThirdAreaName();if(taskArea.length() < 20){keyword2.setValue(taskArea);}else{keyword2.setValue("");}map.put("thing2", keyword2);// 发布时间WxTemplateValue keyword3 = new WxTemplateValue();String date = dto.getTaskStartTime()keyword3.setValue(date);map.put("date3", keyword3);// 发布单位WxTemplateValue keyword4 = new WxTemplateValue();String group = dto.getName();if(group.length() < 20){keyword4.setValue(group);}else{String substring = group.substring(0, 20);keyword4.setValue(substring);}map.put("thing4", keyword4);// 推送模板参数wxSubscribeMsg.setData(map);// 参数转jsonString json = JSONObject.toJSONString(wxSubscribeMsg);// 调用微信推送模板接口String doPostJson = HttpClientUtil.doPostJson(requestUrl, json);// 将获取到的数据进行判断进行日志写入JSONObject jsonObject = JSONObject.parseObject(doPostJson);LOGGER.info("调用微信模板消息回调结果:"+ com.wanwei.oneview.base.utils.JsonUtils.objectToJson(jsonObject));

微信小程序模板消息推送相关推荐

  1. java实现微信消息和小程序模板消息推送

    002java实现微信模版消息推送 本节知识点 1,注册微信公号测试账号 2,获取测试账号的用户openid 3,接入微信推送sdk 4,实现微信推送 课程中用到的网址和文件 1,微信官方注册测试账号 ...

  2. 微信小程序开发—消息推送

    微信小程序的消息推送简单的说就是发送一条微信通知给用户,用户点开消息可以查看消息内容,可以链接进入到小程序的指定页面. 微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单.支付成功.一次 ...

  3. 微信小程序开发消息推送配置教程

    微信小程序开发消息推送配置教程 微信小程序开发消息推送配置这一块网上都是PHP居多,由于用egg.js写了一套验证方法. 第一步:填写服务器配置 登录微信小程序官网后,在小程序官网的"设置- ...

  4. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...

    我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...

  5. 【Node.js】实现微信小程序订阅消息推送功能

    实战项目名称:实现微信小程序订阅消息通知 文章目录 一.实战步骤 1. 登录微信小程序管理端,添加订阅消息模板 2. 定义好需要发送的消息 3.获取小程序的access_token 4. 发起请求,向 ...

  6. 微信小程序实现消息推送(调用小程序推送模板接口) 完整示例

    wxml文件:<form bind:submit="testSubmit" report-submit="true" hidden="{{emp ...

  7. 【微信小程序】消息推送服务器配置及服务器域名配置(记录坑)

    我最近想在微信小程序推送通知,于是开始学怎么弄模板消息. 首先要配置服务器域名和消息推送配置. 先配置服务器域名吧,这个简单. 配置服务器域名 首先进入小程序后台>>开发>>开 ...

  8. 微信小程序订阅消息推送(附带后台java代码)

    官方文档: 小程序前端:点击进入 小程序服务端:点击进入 一,代码实现(后端) ①定义实体类 package com.saic.fin.system.sendInfo;import lombok.Da ...

  9. Java开发微信小程序订阅消息推送

    使用到开源工具WxJava 这里环境使用到springboot 框架,废话不多说直接上干货. pom.xml引用 <!-- https://mvnrepository.com/artifact/ ...

  10. 微信小程序订阅消息推送-php

    最近在给微信小程序写后端接口,有一个场景是 每天给指定账号推送 小程序消息,这期间踩了不少坑,希望记录下来能帮助导大家. 给小程序用户推送消息,首先需要获取用户的openid,这个是小程序的openi ...

最新文章

  1. LeetCode简单题之三角形的最大周长
  2. PDD面试题:new一个对象的过程中发生了什么?
  3. 悲催的IE6,悲催的壳浏览器,悲催的搜狗,悲催的360
  4. 什么是OOP(面向对象编程)?
  5. 让你的网站在移动端健步如飞
  6. JSON Web Tokens(JWT)
  7. 最近在玩linux时 yum 遇到了问题
  8. c语言编写贪吃蛇代码无错,刚学C语言,想写一个贪吃蛇的代码
  9. Node MemoryLeak
  10. Notepad++ 配置 Markdown
  11. Linux虚拟化KVM-Qemu分析(十一)之virtqueue
  12. 手机充电器5V=1A和5V=2A的区别是什么?能通用吗?
  13. 开启 TLS 1.3 加密协议,极速 HTTPS 体验
  14. 双稳态电路的两个稳定状态是什么_电子电路原理图识图心得及电路分析方法
  15. Sessions, Window Stations and Desktops(GetDesktopWindow函数得到的桌面句柄, 是Csrss.exe创建的一个窗口)
  16. c语言99乘法表流程图表,C语言做99乘法表.doc
  17. sl400升级win10_联想SL400全安装WIN7(官方最完美教程).doc
  18. 自制windows免安装版jdk
  19. 《实战 Linux Socket 编程》Warren W.Gay 图解Key-point学习笔记-1
  20. 如何在Visual Studio中自动格式化代码?

热门文章

  1. emlog rss.php,[emlog]boblog数据转到emlog
  2. 侠客行手游如何用电脑玩 侠客行手游PC电脑版教程
  3. 微商分销代理新零售商城源码
  4. 技术面试问项目难题如何解决的_技术面试中,遇到不会回答的问题怎么破?
  5. 手机号码检测开通微信方法
  6. 霍尔探头对高斯计测量的影响
  7. 数据仓库之元数据管理
  8. 俄罗斯方块c语言游戏代码大全,C语言实现俄罗斯方块小游戏
  9. 虚拟光驱 DAEMON Tools Lite 安装笔记
  10. IOS github客户端操作流程 超详细