?
我們在做小程序開發(fā)時,消息推送是不可避免的。今天就來教大家如何實現(xiàn)小程序消息推送的后臺和前臺開發(fā)。源碼會在文章末尾貼出來。
其實我之前有寫過一篇:《springboot實現(xiàn)微信消息推送,java實現(xiàn)小程序推送,含小程序端實現(xiàn)代碼》 但是有同學(xué)反應(yīng)這篇文章里的代碼太繁瑣,接入也比較麻煩。今天就來給大家寫個精簡版的,基本上只需要幾行代碼,就能實現(xiàn)小程序模版消息推送功能。
老規(guī)矩先看效果圖
這是我們最終推送給用戶的模版消息。這是用戶手機微信上顯示的推送消息截圖。
本節(jié)知識點
1,java開發(fā)推送后臺
2,springboot實現(xiàn)推送功能
3,小程序獲取用戶openid
4,小程序獲取fromid用來推送
只有下面一個簡單的PushController類,就可以實現(xiàn)小程序消息的推送
再來看下PushController類,你沒看錯,實現(xiàn)小程序消息推送,就需要下面這幾行代碼就可以實現(xiàn)了。
由于本推送代碼是用springboot來實現(xiàn)的,下面就來簡單的講下。我我們需要注意的幾點內(nèi)容。
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后臺的推送功能,就已經(jīng)實現(xiàn)了。我們只需要運行springboot項目,就可以實現(xiàn)推送了。
下面貼出完整的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: 微信小程序模版推送實現(xiàn) */ @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,設(shè)置模版信息(keyword1:類型,keyword2:內(nèi)容) List<WxMaTemplateData> templateDataList = new ArrayList<>(2); WxMaTemplateData data1 = new WxMaTemplateData("keyword1", "獲取老師微信"); WxMaTemplateData data2 = new WxMaTemplateData("keyword2", "2501902696"); templateDataList.add(data1); templateDataList.add(data2); //3,設(shè)置推送消息 WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder() .toUser(openid)//要推送的用戶openid .formId(formid)//收集到的formid .templateId("eDZCu__qIz64Xx19dAoKg0Taf5AAoDmhUHprF6CAd4A")//推送的模版id(在小程序后臺設(shè)置) .data(templateDataList)//模版信息 .page("pages/index/index")//要跳轉(zhuǎn)到小程序那個頁面 .build(); //4,發(fā)起推送 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只能用一次)
1,appid和AppSecret的獲?。ǖ卿浶〕绦蚬芾砗笈_)
2,推送模版id
3,用戶openid的獲取,可以看下面的這篇文章,也可以看源碼,這里不做具體講解
小程序開發(fā)如何獲取用戶openid
4,獲取formid
看官方文檔,可以知道我們的formid有效期是7天,并且一個form_id只能使用一次,所以我們小程序端所需要做的就是盡可能的多拿些formid,然后傳個后臺,讓后臺存到數(shù)據(jù)庫中,這樣7天有效期內(nèi),想怎么用就怎么用了。
所以接下來要講的就是小程序開發(fā)怎么盡可能多的拿到formid了
看下官方提供的,只有在表單提交時把report-submit設(shè)為true時才能拿到formid,比如這樣
<form report-submit='true' > <button form-type='submit'>獲取formid</button> </form>
所以我們就要在這里下功夫了,既然只能在form組件獲取,我們能不能把我們小程序里用到最多的地方用form來偽裝呢。
下面簡單寫個獲取formid和openid的完整示例,方便大家學(xué)習(xí)
效果圖
我們要做的就是點擊獲取formid按鈕,可以獲取到用戶的formid和openid,正常我們開發(fā)時,是需要把openid和formid傳給后臺的,這里簡單起見,我們直接用獲取到的formid和openid實現(xiàn)推送功能
下面來看小程序端的實現(xiàn)代碼
1,index.wxml
2,index.js
到這里我們小程序端的代碼也實現(xiàn)了,接下來測試下推送。
formid: 6ee9ce80c1ed4a2f887fccddf87686eb openid o3DoL0Uusu1URBJK0NJ4jD1LrRe0
可以看到我們用了上面獲取到的openid和formid做了一次推送,顯示推送成功
到這里我們小程序消息推送的后臺和小程序端都講完了。
這里有兩點需要大家注意
1,推送的openid和formid必須對應(yīng)。
2,一個formid只能用一次,多次使用會報一下錯誤。
{"errcode":41029,"errmsg":"form id used count reach limit hint: [ssun8a09984113]"}
?
?
本文摘自 :https://blog.51cto.com/u