5行代码实现微信小程序模版消息推送 含推送后台和小程序源码

我们在做小程序开发时,消息推送是不可避免的。今天就来教大家如何实现小程序消息推送的后台和前台开发。源码会在文章末尾贴出来。

其实我之前有写过一篇:《springboot实现微信消息推送,java实现小程序推送,含小程序端实现代码》 但是有同学反应这篇文章里的代码太繁琐,接入也比较麻烦。今天就来给大家写个精简版的,基本上只需要几行代码,就能实现小程序模版消息推送功能。

老规矩先看效果图

这是我们最终推送给用户的模版消息。这是用户手机微信上显示的推送消息截图。

本节知识点

1,java开发推送后台

2,springboot实现推送功能

3,小程序获取用户openid

4,小程序获取fromid用来推送

先来看后台推送功能的实现

只有下面一个简单的PushController类,就可以实现小程序消息的推送

再来看下PushController类,你没看错,实现小程序消息推送,就需要下面这几行代码就可以实现了。

由于本推送代码是用springboot来实现的,下面就来简单的讲下。我我们需要注意的几点内容。

1,需要在pom.xml引入一个三方类库(推送的三方类库)

pom.xml的完整代码如下

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.5.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>com.qcl</groupId>

<artifactId>wxapppush</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>wxapppush</name>

<description>Demo project for Spring Boot</description>

<properties>

<java.version>1.8</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<!--微信小程序模版推送-->

<dependency>

<groupId>com.github.binarywang</groupId>

<artifactId>weixin-java-miniapp</artifactId>

<version>3.4.0</version>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

其实到这里我们java后台的推送功能,就已经实现了。我们只需要运行springboot项目,就可以实现推送了。

下面贴出完整的PushController.java类。里面注释很详细了。

package com.qcl.wxapppush;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

import java.util.List;

import cn.binarywang.wx.miniapp.api.WxMaService;

import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;

import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;

import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;

import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;

import me.chanjar.weixin.common.error.WxErrorException;

/**

* Created by qcl on 2019-05-20

* :2501902696

* desc: 微信小程序模版推送实现

*/

@RestController

public class PushController {

@GetMapping("/push")

public String push(@RequestParam String openid, @RequestParam String formid) {

//1,配置小程序信息

WxMaInMemoryConfig wxConfig = new WxMaInMemoryConfig();

wxConfig.setAppid("wx7c54942dfc87f4d8");//小程序appid

wxConfig.setSecret("5873a729c365b65ab42bb5fc82d2ed49");//小程序AppSecret

WxMaService wxMaService = new WxMaServiceImpl();

wxMaService.setWxMaConfig(wxConfig);

//2,设置模版信息(keyword1:类型,keyword2:内容)

List<WxMaTemplateData> templateDataList = new ArrayList<>(2);

WxMaTemplateData data1 = new WxMaTemplateData("keyword1", "获取老师微信");

WxMaTemplateData data2 = new WxMaTemplateData("keyword2", "2501902696");

templateDataList.add(data1);

templateDataList.add(data2);

//3,设置推送消息

WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder()

.toUser(openid)//要推送的用户openid

.formId(formid)//收集到的formid

.templateId("eDZCu__qIz64Xx19dAoKg0Taf5AAoDmhUHprF6CAd4A")//推送的模版id(在小程序后台设置)

.data(templateDataList)//模版信息

.page("pages/index/index")//要跳转到小程序那个页面

.build();

//4,发起推送

try { wxMaService.getMsgService().sendTemplateMsg(templateMessage);

} catch (WxErrorException e) {

System.out.println("推送失败:" + e.getMessage());

return e.getMessage();

}

return "推送成功";

}

}

看代码我们可以知道,我们需要做一些配置,需要下面信息

1,小程序appid

2,小程序AppSecret(密匙)

3,小程序推送模版id

4,用户的openid

5,用户的formid(一个formid只能用一次)

下面就是小程序部分,来教大家如何获取上面所需的5个信息。

1,appid和AppSecret的获取(登录小程序管理后台)

2,推送模版id

3,用户openid的获取,可以看下面的这篇文章,也可以看源码,这里不做具体讲解

小程序开发如何获取用户openid

4,获取formid

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

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

<form report-submit='true' >

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

</form>

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

下面简单写个获取formid和openid的完整示例,方便大家学习

效果图

我们要做的就是点击获取formid按钮,可以获取到用户的formid和openid,正常我们开发时,是需要把openid和formid传给后台的,这里简单起见,我们直接用获取到的formid和openid实现推送功能

下面来看小程序端的实现代码

1,index.wxml

2,index.js

到这里我们小程序端的代码也实现了,接下来测试下推送。

formid: 6ee9ce80c1ed4a2f887fccddf87686eb

openid o3DoL0Uusu1URBJK0NJ4jD1LrRe0

可以看到我们用了上面获取到的openid和formid做了一次推送,显示推送成功

到这里我们小程序消息推送的后台和小程序端都讲完了。

这里有两点需要大家注意

1,推送的openid和formid必须对应。

2,一个formid只能用一次,多次使用会报一下错误。

{"errcode":41029,"errmsg":"form id used count reach limit hint: [ssun8a09984113]"}

编程小石头,码农一枚,非著名全栈开发人员。分享自己的一些经验,学习心得,希望后来人少走弯路,少填坑。

这里就不单独贴出源码下载链接了,大家感兴趣的话,可以私信我,或者在底部留言,我会把源码下载链接贴在留言区。

原文地址:https://www.toutiao.com/article/6693364003160195597/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340