Java代码实现发送微信小程序服务通知

笔者在上个月接到一个需求,大概是需要计算一条数据的最大办理时间从而发送任务超期的微信小程序服务通知,俺也是第一次接触到需要调用微信的API去进行发送消息,该博客权当记录此次功能开发的过程了~

文档来源:

本身微信的官方文档是提供了采用http调用的方式去进行调用微信的API微信小程序官方文档
但是俺想着都已经是什么年代了,于是找到了GitHub上的一个资料GitHub地址

我们可以看到几乎涵盖了所有微信相关的API,在这里不得不感慨一下binarywang,王哥他们真的太厉害了~

可以理解为不同的jar包对应引入了不从的SDK库,使调用的更方便,更简洁,下面就来依次讲解吧:

JAR包引入

        <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>4.0.0</version></dependency>

准备工作当然不止后端的JAR包引入,我们还需要选择一个将要发送消息通知的模板,此步如果是全栈大怨种就看该官方文档,很详细选择服务通知模板,如果是后端好哥们,就让前端自己研究,宗旨是需要拿到模板ID很重要!!见下图,为我圈中的那个ID,需要被后端拿到。

后端工作:

我们先看我们所需要的所有配置,笔者均写到了yml中,可能不是太好看,见谅~

wx:miniapp:#上面拿到的很重要的那个模板IDtemplate-id: g19lTFku79jXC58CDzTnoIeazJC8HHvbW82apat_vgs configs:#微信小程序的appid 开发者工具拿到appid: wx05e2612sfav212bddev12#开发者工具拿到Secretsecret: 91b5a9e5645e8cf2123213safasfgwgf#微信小程序消息服务器配置的tokentoken: 123#微信小程序消息服务器配置的EncodingAESKeyaesKey: msgDataFormat: JSON

一:编写配置文件

该配置文件笔者这里为两个,大家也可以只写一个,主要目的是为了注入引入的JAR包中的WxMaService,只有用这个,我们才能进行调用API

配置一 WxConfig

这里需要注意的是笔者的WxProperties是写的另一个配置文件,如果大家觉得写配置文件很麻烦,也可以写一个,采用手动注入值的放肆,这个WxProperties见下一个配置文件:

/*** @describe:* @author: jiazl /* @version: v1.0*/
@Slf4j
@Configuration
@EnableConfigurationProperties(WxProperties.class)
public class WxConfig {private final WxProperties properties;@Autowiredpublic WxConfig(WxProperties properties) {this.properties = properties;}@Beanpublic WxMaService getService() {if (properties == null || properties.getAppid() == null || properties.getSecret() == null) {throw new WxRuntimeException("required wechat param not found");}WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();config.setAppid(properties.getAppid());config.setSecret(properties.getSecret());config.setToken(properties.getToken());config.setAesKey(properties.getAesKey());config.setMsgDataFormat(properties.getMsgDataFormat());WxMaService service = new WxMaServiceImpl();service.setWxMaConfig(config);return service;}
配置二:WxProperties

采用配置类注入的方式,如果大家不想写配置,可以采用手动设置值,目的是为了让上面的配置中的service注入到容器里面。

@Data
@ConfigurationProperties(prefix = "wx.miniapp.configs")
public class WxProperties {/*** 设置微信小程序的appid*/private String appid;/*** 设置微信小程序的Secret*/private String secret;/*** 设置微信小程序消息服务器配置的token*/private String token;/*** 设置微信小程序消息服务器配置的EncodingAESKey*/private String aesKey;/*** 消息格式,XML或者JSON*/private String msgDataFormat;}
三 代码编写
@RestController
@Slf4j
@Api(tags = "征兵测试接口")
public class ZbSendDemoController {@Autowiredprivate  WxMaService wxService;@Value("${wx.miniapp.template-id}")private String templteId;@Resourcepublic RabbitTemplate rabbitTemplate;/*** 跳转的小程序页面*/private static final String PAGES_ZP = "pages/draft-review/list/list";@GetMapping("/api/zphs/sendZbhsMsg")@ApiOperation("传openId发送微信服务通知")public ApiResult<Boolean> sendMsg(String openID)  {sendSmallMsg(openID);return ApiResult.success(true);}private  void sendSmallMsg(String openId)  {Map<String, String> map = new HashMap<>();map.put("phrase1","测试");map.put("thing3", "您收到了应征公民测试测试的任务提醒消息");map.put("time12", LocalDateTimeUtil.formatNormal(LocalDateTime.now()));WxMaSubscribeMessage wxMaSubscribeMessage = WxMaSubscribeMessage.builder().toUser(openId).templateId(templteId).page(PAGES_ZP).build();// 设置将推送的消息map.forEach((k, v) -> {wxMaSubscribeMessage.addData(new WxMaSubscribeMessage.Data(k, v));});try {log.info("开始发送消息!!!!");wxService.getMsgService().sendSubscribeMsg(wxMaSubscribeMessage);log.info("消息发送成功!!!!");} catch (WxErrorException e) {e.printStackTrace();}}@GetMapping("/api/zphs/sendMqDemo")@ApiOperation("消息队列发送微信服务通知测试")public ApiResult<Boolean> sendMqDemo(String taskId,String time,String state,String id )  {sendMessage( taskId, time, state,id);return ApiResult.success(true);}public void sendMessage(String taskId,String time,String state,String id) {//发送延时队列消息Map<String, Object> map = new HashMap<>(10);map.put("taskId", taskId);map.put("state", state);map.put("bzpId",id);String message = JSON.toJSONString(map);log.info("开始发送!!!");rabbitTemplate.convertAndSend(RabbitMqSendMsgConfig.DELAYED_EXCHANGE_NAME, RabbitMqSendMsgConfig.DELAYED_ROUTING_KEY,message, msg -> {msg.getMessageProperties().setDelay(Integer.parseInt(time));return msg;});log.info("发送消息成功!!!");}

笔者这里的Controller很乱,因为里面不仅有发送消息的代码,也有RabbitMq的代码,当然这都是和具体业务相关,我们的重点是sendSubscribeMsg
到这一步,消息就发送成功了,我们可以看到实例:


到这里,我们需要有几个地方注意:
1 模板中当前状态,温馨提示,工单创建时间均为参数对应值,代码是为发送前的Map里面
2 Controller最上面有一行:

   private static final String PAGES_ZP = "pages/draft-review/list/list";

对应为点击进入小城许跳转的页面,为具体业务所定
3OpenId是个很重要的东西,是登录微信小程序都会获取到的,唯一性的,微信的API就是通过OpenId给具体的用户发送消息,所以第一个方法内我的参数就为OpenId,这个OpenId是前端传输到后端的,我在这里仅仅是一个Demo接口,切记
4如果有时间,我会写一篇RabbitMq的文章,讲解一下用法及踩过的坑,然后将整个业务需求进行描述讲解
5注意图片中的参数的个数及名称

一定要和微信小程序模板上的保持一致,个数及参数名(模板的参数可以在微信开发者工具上看),注意部分参数有字数限制,具体限制要求可以查看微信开发者工具上的具体描述。
6祝大家天天开心~~~~
好了,俺这次的文章就到这里结束了,祝大家都找到新的工作,天天开心,万事如意~~

敬礼!
salute!!

Java实现微信小程序发送服务通知相关推荐

  1. 微信小程序发送服务通知

    服务通知在微信开发中很常见,支付,审核等等都需要用到服务通知. 记录一下开发中用到的需求,以后直接复制. public static void senddingyue(String open_id,S ...

  2. 教你设置微信小程序的服务通知推送!搜狗文章

    场景碎碎念:嗨喽,小伙伴闷,今天的学习到咯.通过咱们快一个月的学习,已经把平台的组件学习的差不多了,当然咱闷这个功能组件是在不停更新.不断完善的.今天咱们来学下"模板消息"推送功能 ...

  3. java后台接收微信小程序发送的post请求参数

    java后台接收微信小程序发送的post请求参数 // 微信端:data数据要加上JSON转换JSON.stringify() wx.request({url: 'http://127.0.0.1:8 ...

  4. java基于微信小程序的加油服务系统 uniapp小程序

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,加油服务系统被用户普遍使用,为方便用户能够可以随时进行 ...

  5. java家政后台代码下载_微信小程序家政服务预约系统毕业论文+前台源码+后台(JavaSSM)源码及Mysql数据库...

    摘  要 O2O模式能够充分的利用网站创立企业在O2O模式中的竞争优势,基于O2O模式的这一特点,本次毕业设计开发了微信小程序家政服务预约系统.该家政服务预约系统发挥了网络优势,采用O2O模式营销手段 ...

  6. 最全的java对接微信小程序客服功能实现(包含自动回复文本消息、图片消息,进入人工客服)

    java对接微信小程序客服功能实现(包含自动回复文本消息.图片消息,进入人工客服) 第一步:请求校验(确认请求来自微信服务器) 代码如下: @ApiOperation(value = " 微 ...

  7. java与微信小程序通讯_java与微信小程序实现websocket长连接

    本文实例为大家分享了java与微信小程序实现websocket长连接的具体代码,供大家参考,具体内容如下 背景: 需要在小程序实现地图固定坐标下实时查看消息 java环境 :tomcat7 jdk1. ...

  8. 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近Native App性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服 ...

  9. Java实现微信小程序校验图片是否含有违法违规内容

    文章目录 1.Java实现微信小程序校验图片是否含有违法违规内容(security.imgSecCheck) 2.接口文档简述 3.Java实现对接接口 4.压缩图片(Thumbnails) 5.整合 ...

最新文章

  1. leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
  2. CVPR2020论文解析:视频分类Video Classification
  3. mysql中00933错误_java.sql.SQLException: ORA-00933: SQL 命令未正确结束错误解决
  4. And it's over,And it's a new start
  5. PHP进行图片下载的时候,出现图片损坏,无法打开(实质原因,多输出了一个空白字符ZWNBSP )
  6. 0811-按钮操作(加法计算器)(拖控件找控件代码属性名称)(frame center bounds)(上下左右移动button图片)...
  7. SAP ABAP实用技巧介绍系列之ABAP取中文字符串的字节长度
  8. “约见”面试官系列之常见面试题之第一百零一篇之vue-router传参(建议收藏)
  9. QT打开文件选择框(demo code)
  10. cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)
  11. 多行文字或者单行文字的垂直居中解决方案
  12. 计算机数字媒体学什么以后,数字媒体设计是学什么的?以后的发展方向是什么?...
  13. 测视力距离5米还是3米_高度近视眼怎么恢复视力?
  14. ruoyi(若依)框架使用说明(前后端分离)
  15. 适合自学的C语言基础视频教程
  16. CAN通信波特率计算
  17. 如何打开后缀为.xps的文件?
  18. 公有云与私有云的概念解读与优势分析
  19. 康宇的OJ愚人手账1
  20. Python装逼神器,5 行 Python 代码 实现一键批量扣图!

热门文章

  1. 并发常用的2个SQL语句
  2. 交通中心助力打造城市交通大脑深圳样板 ⑩
  3. MySQL 占用过高CPU时的优化手段
  4. Linux教学资源服务器构建
  5. Java数据结构——堆排序
  6. 如何从海量特征中选取用户的关键画像特征?
  7. (步骤详细)MATLAB/SIMULINK全局变量设置
  8. Supervised Online Hashing via Hadamard Codebook Learning
  9. 服务器不响应tcp,一直连接不上TCP服务器,服务器防火墙已经关了
  10. 【人工智能】基于五笔字型规范和人工神经网络的简中汉字识别【一】