本文是比较老得技术来实现,用最新技术实现小程序推送,请看
5行java代码实现微信小程序模版消息推送 (含springboot后台和小程序源码)
也可以看最新的视频讲解:https://edu.csdn.net/course/detail/23750
最近需要开发微信和小程序的推送功能,需要用java后台实现推送,自己本身java和小程序都做,所以就自己动手实现下小程序的模版推送功能推送。
-
1 小程序获取用户openid,收集formid传给java后台
-
2 java推送消息给指定小程序用户
我的这个是跑腿抢单推送,当用户新下单时,会给跑腿员推送消息。
下面开始讲解实现步骤
==============================================================================
这里的模版id很重要,接下来我们推送的都是这个模版。
=============================================================================
-
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;//用户openid
private String template_id;//模版id
private String page = "index";//默认跳到小程序首页
private String form_id;//收集到的用户formid
private 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_token
String 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_token
String 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);//用户openid
wxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//模版id
wxMssVo.setForm_id(formid);//formid
Map<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
@Autowired
private RestTemplate restTemplate;
/*
* 微信小程序推送单个用户
* */
public String pushOneUser(String openid, String formid) {
//获取access_token
String 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);//用户openid
wxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//模版id
wxMssVo.setForm_id(formid);//formid
Map<String, TemplateData> m = new HashMap<>(5);
//keyword1:订单类型,keyword2:下单金额,keyword3:配送地址,keyword4:取件地址,keyword5备注
TemplateData keyword1 = new TemplateData();
keyword1.setValue("新下单待抢单");
m.put("keyword1", keyword1);
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。**
**因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/812e61445c35e32b1259a60d443968a3.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/8fb6db857e2ddfd76b441ff71406f191.png)
![img](https://img-blog.csdnimg.cn/img_convert/aa35937f7bfe95f1928b993ae7910383.png)
**既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!**
**由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)**
![img](https://img-blog.csdnimg.cn/img_convert/ac35dbd759b56ed2a6d53d2c71391f08.png)
适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。**
**因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。**
[外链图片转存中...(img-CgHCZl73-1712577750538)]
[外链图片转存中...(img-SXK4RffN-1712577750539)]
[外链图片转存中...(img-u3SrDap1-1712577750539)]
**既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!**
**由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频**
**如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)**
[外链图片转存中...(img-UqYBkDwq-1712577750540)]