本文是比较老得技术来实现,用最新技术实现小程序推送,请看
5行java代码实现微信小程序模版消息推送 (含springboot后台和小程序源码)
也可以看最新的视频讲解:https://edu.csdn.net/course/detail/23750

最近需要开发微信和小程序的推送功能,需要用java后台实现推送,自己本身java和小程序都做,所以就自己动手实现下小程序的模版推送功能推送。

实现思路

  • 1 小程序获取用户openid,收集formid传给java后台
  • 2 java推送消息给指定小程序用户

老规矩,还是先看效果图


我的这个是跑腿抢单推送,当用户新下单时,会给跑腿员推送消息。

下面开始讲解实现步骤

一,微信小程序管理后台开通模版推送


这里的模版id很重要,接下来我们推送的都是这个模版。

二,java后台实现推送所需字段

  • 1 看微信官方推送消息所需要的字段

  • 2 有了官方说明,我门接下来就去拿到官方所需要的这些字段,来组装请求数据就可以了。

三,下面讲解实现步骤

我的java后台是基于springboot开发的,如果你不了解spring boot,建议你先去了解下springboot再回来接着学习。
还有RestTemplate是我们java后台做get和post请求必须的,我们和微信服务器交互就用的RestTemplate

  • 1 首先根据官方推送所需字段组装java-bean
    这里用到两个javabean
/*
* 小程序推送所需数据
* qcl 微信:2501902696
* */
@Data
public class WxMssVo {private String touser;//用户openidprivate String template_id;//模版idprivate String page = "index";//默认跳到小程序首页private String form_id;//收集到的用户formidprivate String emphasis_keyword = "keyword1.DATA";//放大那个推送字段private Map<String, TemplateData> data;//推送文字
}
/*
* 设置推送的文字和颜色
* qcl 微信:2501902696
* */
@Data
public class TemplateData {//keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注private String value;//,,依次排下去
//    private String color;//字段颜色(微信官方已废弃,设置没有效果)
}

到这里请求推送的数据就组装好了,解下来我们去实现推送功能。
奥不对,还有一个重要的字段需要获取到:access_token

access_token的获取

/** 获取access_token* appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来* */public String getAccess_token(String appid, String appsecret) {//获取access_tokenString url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +"&appid=" + appid + "&secret=" + appsecret;String json = restTemplate.getForObject(url, String.class);AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);return accessToken.getAccess_token();}

这次是真正的可以来请求微信服务器来实现消息推送了

/** 微信小程序推送单个用户* */public String pushOneUser(String openid, String formid) {//获取access_tokenString access_token = getAccess_token(ConstantUtils.SCHOOL_APPID, ConstantUtils.SCHOOL_APPSECRET);String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send" +"?access_token=" + access_token;//拼接推送的模版WxMssVo wxMssVo = new WxMssVo();wxMssVo.setTouser(openid);//用户openidwxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//模版idwxMssVo.setForm_id(formid);//formidMap<String, TemplateData> m = new HashMap<>(5);//keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注TemplateData keyword1 = new TemplateData();keyword1.setValue("新下单待抢单");m.put("keyword1", keyword1);TemplateData keyword2 = new TemplateData();keyword2.setValue("这里填下单金额的值");m.put("keyword2", keyword2);wxMssVo.setData(m);TemplateData keyword3 = new TemplateData();keyword3.setValue("这里填配送地址");m.put("keyword3", keyword3);wxMssVo.setData(m);TemplateData keyword4 = new TemplateData();keyword4.setValue("这里填取件地址");m.put("keyword4", keyword4);wxMssVo.setData(m);TemplateData keyword5 = new TemplateData();keyword5.setValue("这里填备注");m.put("keyword5", keyword5);wxMssVo.setData(m);ResponseEntity<String> responseEntity =restTemplate.postForEntity(url, wxMssVo, String.class);log.error("小程序推送结果={}", responseEntity.getBody());return responseEntity.getBody();}

openid可以让小程序开发人员给你传过来,也可以自己获取。
formid需要小程序开发给你传过来,你也可以把formid存到数据库里,什么时候需要直接拿出来用就可以了。
注意:formid必须和用户openid对应。

下面贴出来完整代码

package com.qcl.paotuischool.wechat;import com.google.gson.Gson;
import com.qcl.userwechat.bean.AccessToken;
import com.qcl.utils.ConstantUtils;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;import lombok.extern.slf4j.Slf4j;/*** Created by qcl on 2018/9/11.* 微信小程序推送服务,* 包含获取access_token的服务*/
@Service
@Slf4j
public class WxPushServiceQcl {//用来请求微信的get和post@Autowiredprivate RestTemplate restTemplate;/** 微信小程序推送单个用户* */public String pushOneUser(String openid, String formid) {//获取access_tokenString access_token = getAccess_token(ConstantUtils.SCHOOL_APPID, ConstantUtils.SCHOOL_APPSECRET);String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send" +"?access_token=" + access_token;//拼接推送的模版WxMssVo wxMssVo = new WxMssVo();wxMssVo.setTouser(openid);//用户openidwxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//模版idwxMssVo.setForm_id(formid);//formidMap<String, TemplateData> m = new HashMap<>(5);//keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注TemplateData keyword1 = new TemplateData();keyword1.setValue("新下单待抢单");m.put("keyword1", keyword1);TemplateData keyword2 = new TemplateData();keyword2.setValue("这里填下单金额的值");m.put("keyword2", keyword2);wxMssVo.setData(m);TemplateData keyword3 = new TemplateData();keyword3.setValue("这里填配送地址");m.put("keyword3", keyword3);wxMssVo.setData(m);TemplateData keyword4 = new TemplateData();keyword4.setValue("这里填取件地址");m.put("keyword4", keyword4);wxMssVo.setData(m);TemplateData keyword5 = new TemplateData();keyword5.setValue("这里填备注");m.put("keyword5", keyword5);wxMssVo.setData(m);ResponseEntity<String> responseEntity =restTemplate.postForEntity(url, wxMssVo, String.class);log.error("小程序推送结果={}", responseEntity.getBody());return responseEntity.getBody();}/** 获取access_token* appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来* */public String getAccess_token(String appid, String appsecret) {//获取access_tokenString url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +"&appid=" + appid + "&secret=" + appsecret;String json = restTemplate.getForObject(url, String.class);AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);return accessToken.getAccess_token();}}

在需要做推送的地方调用WxPushServiceQcl类中的pushOneUser方法,并传入openid, formid参数即可。

这是我推送成功后打印的log

下面来讲小程序端开发需要做些什么

可以看出,我们的formid有效期是7天,并且一个form_id只能使用一次,所以我们小程序端所需要做的就是尽可能的多拿些formid,然后传个后台,让后台存到数据库中,这样7天有效期内,想怎么用就怎么用了。

所以接下来要讲的就是小程序开发怎么尽可能多的拿到formid了。


看下官方提供的,只有在表单提交时把report-submit设为true时才能拿到formid,比如这样

 <form report-submit='true' ><button  form-type='submit'>获取formid</button></form>

所以我们就要在这里下功夫了,既然只能在form组件获取,我们能不能把我们小程序里用到最多的地方用form来伪装呢。

我的小程序是跑腿小程序,消息也主要推送给跑腿员的,而跑腿员点击最多的也就是这两个条目,所以我们就用from组件来伪装这两个条目,让用户在点击的同时就可以收集到用的formid。

 <view class='button_item'><form class="form_item" bindsubmit='gorRunnerLobby' report-submit='true' data-type="1"><button class="button" form-type='submit'><text>抢单大厅</text><text class='runner_desc'>(兼职也可月入万元)</text></button></form><view class='right_arrow' /></view>

这样就可以在用户点击条目时,收集到用户formid了

由于上面的botton有默认样式,所以我们就通过修改css来去除botton默认样式。

.button_item {width: 100%;display: flex;flex-direction: row;align-items: center;padding: 2px 20px;background: white;border-bottom: 1px solid gainsboro;
}
/* 主要通过这里去除botton默认样式 */
.button {width: 100%;background: white;border: none;text-align: left;padding: 6px 0px;margin: 0px;line-height: 1.5;
}/* 主要通过这里去除botton边框 */
.button::after {border: none;
}/* 用button伪装获取formid */.form_item {width: 100%;
}

到这里我们小程序端也圆满完成自己的任务了。

补充知识点

  • 小程序开发如何获取用户openid
  • 借助小程序云开发获取小程序用户openid

这样我们java后台和小程序开发就可以开开心心的完成微信小程序的消息推送功能了。

如果有java或小程序相关的问题可以加我微信交流学习2501902696(备注小程序或java)

视频讲解:https://edu.csdn.net/course/detail/23750

小程序消息推送(含源码)java实现小程序推送,springboot实现微信消息推送相关推荐

  1. 【Matlab脑电信号】小波睡眠监测【含源码 595期】

    一.代码运行视频(哔哩哔哩) [Matlab脑电信号]小波睡眠监测[含源码 595期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 沈再阳.精通MATLAB ...

  2. [附源码]JAVA毕业设计小王防疫副食品配送商城(系统+LW)

    [附源码]JAVA毕业设计小王防疫副食品配送商城(系统+LW) 项目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  3. 微信小程序之问答论坛(含源码+论文+答辩PPT等)

    项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的问答论坛+前台和Java做的后台管理系统: 微信小程序--问答论坛+前台涉及技术:WXM ...

  4. 微信短视频去水印小程序搭建教程(含源码),超级详细哦,支持流量主的

    话不多说,先看看效果,感觉OK,再往下看! 下面进入正式教程阶段 1.域名添加解析 2.宝塔后台创建站点及数据库 不懂的可以看我以前的文章,这里就不详细多说了. 小程序,其实也就是一种网页运用,如果你 ...

  5. 微信小程序之记事本管理系统(含源码+论文+答辩PPT等)

    项目功能简介: 该项目含有源码等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的记事本前台和Java做的后台管理系统: 微信小程序--记事本前台涉及技术:WXML 和 WXS ...

  6. 微信小程序电影购票系统(含源码+论文+答辩PPT等)

    项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的电影购票前台和Java做的后台管理系统: 微信小程序--电影购票前台涉及技术:WXML ...

  7. 微信小程序之教学管理系统(含源码+论文+答辩PPT等)

    项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的教学管理系统前台和Java做的后台管理系统: 微信小程序--教学管理系统前台涉及技术:W ...

  8. 10行代码实现微信小程序支付功能,使用小程序云开发实现小程序支付功能(含源码

    前面给大家讲过一个借助小程序云开发实现微信支付的,但是那个操作稍微有点繁琐,并且还会经常出现问题,今天就给大家讲一个简单的,并且借助官方支付api实现小程序支付功能. 传送门 借助小程序云开发实现小程 ...

  9. 边玩边学,13个 Python 小游戏真有趣啊(含源码)

    经常听到有朋友说,学习编程是一件非常枯燥无味的事情.其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程? 今天我想跟大家分享几个Python小游戏,教你 ...

  10. 汉字大英雄-赚钱类小游戏脚本系列(含源码)

    "ui"; //更多精品源码请访问:https//01jb.cn/ var 软件名 = "汉字大英雄" var 包名 = "com.ruiqugame ...

最新文章

  1. 模板 - 质数筛法(线性筛法、二次筛法)
  2. TSNE 正规英文api
  3. [unreal4入门系列之八] 使用VS编译UE4编辑器并添加物体到场景中
  4. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器
  5. 【励志】高考失利之后,属于我的大学本科四年
  6. 用汇编写改进的冒泡排序
  7. win 10 arm iso 文件下载
  8. 1493:物种大交换开创的世界史
  9. linux键盘及终端快捷键
  10. 方舟手游服务器怎么发位置,方舟手游怎么把自己号传到服务器 | 手游网游页游攻略大全...
  11. Photoshop从入门到放弃
  12. PHP函数array_intersect_assoc
  13. [编程题]漂流船问题
  14. [CATransaction flush] 作用详解
  15. 手机屏幕常见故障_手机测试常见问题总结!
  16. Oracle:获取数据库系统的当前时间
  17. wps怎么把ppt里的字体一起保存_干货 | 如何快速导出PPT中的文字内容?
  18. 计算机网络背诵笔记,震惊!网络搜索、数字笔记和云盘,让你变笨!!!
  19. 智慧路灯商业模式分析:智慧灯杆如何盈利?12项盈利模式汇总
  20. 【项目实战课】基于Pytorch的Semantic_Human_Matting(人像软分割)实战

热门文章

  1. log4cplus总结
  2. maven 编译忽略某些文件
  3. usb设备复合g_webcam摄像头码流传输功能以及g_serial串口功能
  4. java流的试题_Java练习题 - Stream流
  5. PCA降维(主成分分析法)
  6. 【猛料】腾讯前总监受贿侵占数百万获刑9年
  7. python 查询周数 week number
  8. SP2限制连接数补丁!最新版本2.11a
  9. 网络式数据库和关系式数据库三种
  10. 404页面该怎么做?