當(dāng)前位置:首頁(yè) > IT技術(shù) > 微信平臺(tái) > 正文

5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)
2021-08-07 19:06:28

?

我們?cè)谧鲂〕绦蜷_發(fā)時(shí),消息推送是不可避免的。今天就來(lái)教大家如何實(shí)現(xiàn)小程序消息推送的后臺(tái)和前臺(tái)開發(fā)。源碼會(huì)在文章末尾貼出來(lái)。

其實(shí)我之前有寫過(guò)一篇:《springboot實(shí)現(xiàn)微信消息推送,java實(shí)現(xiàn)小程序推送,含小程序端實(shí)現(xiàn)代碼》 但是有同學(xué)反應(yīng)這篇文章里的代碼太繁瑣,接入也比較麻煩。今天就來(lái)給大家寫個(gè)精簡(jiǎn)版的,基本上只需要幾行代碼,就能實(shí)現(xiàn)小程序模版消息推送功能。

老規(guī)矩先看效果圖
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_springboot推送
這是我們最終推送給用戶的模版消息。這是用戶手機(jī)微信上顯示的推送消息截圖。

本節(jié)知識(shí)點(diǎn)

1,java開發(fā)推送后臺(tái)
2,springboot實(shí)現(xiàn)推送功能
3,小程序獲取用戶openid
4,小程序獲取fromid用來(lái)推送

先來(lái)看后臺(tái)推送功能的實(shí)現(xiàn)

只有下面一個(gè)簡(jiǎn)單的PushController類,就可以實(shí)現(xiàn)小程序消息的推送
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序推送_02
再來(lái)看下PushController類,你沒(méi)看錯(cuò),實(shí)現(xiàn)小程序消息推送,就需要下面這幾行代碼就可以實(shí)現(xiàn)了。
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序推送_03
由于本推送代碼是用springboot來(lái)實(shí)現(xiàn)的,下面就來(lái)簡(jiǎn)單的講下。我我們需要注意的幾點(diǎn)內(nèi)容。
1,需要在pom.xml引入一個(gè)三方類庫(kù)(推送的三方類庫(kù))
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序推送_04
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>

其實(shí)到這里我們java后臺(tái)的推送功能,就已經(jīng)實(shí)現(xiàn)了。我們只需要運(yùn)行springboot項(xiàng)目,就可以實(shí)現(xiàn)推送了。
下面貼出完整的PushController.java類。里面注釋很詳細(xì)了。

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: 微信小程序模版推送實(shí)現(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(在小程序后臺(tái)設(shè)置)
                .data(templateDataList)//模版信息
                .page("pages/index/index")//要跳轉(zhuǎn)到小程序那個(gè)頁(yè)面
                .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(一個(gè)formid只能用一次)

下面就是小程序部分,來(lái)教大家如何獲取上面所需的5個(gè)信息。

1,appid和AppSecret的獲取(登錄小程序管理后臺(tái))
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序_05
2,推送模版id
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_springboot推送_06
3,用戶openid的獲取,可以看下面的這篇文章,也可以看源碼,這里不做具體講解
小程序開發(fā)如何獲取用戶openid
4,獲取formid
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_微信消息推送_07
看官方文檔,可以知道我們的formid有效期是7天,并且一個(gè)form_id只能使用一次,所以我們小程序端所需要做的就是盡可能的多拿些formid,然后傳個(gè)后臺(tái),讓后臺(tái)存到數(shù)據(jù)庫(kù)中,這樣7天有效期內(nèi),想怎么用就怎么用了。

所以接下來(lái)要講的就是小程序開發(fā)怎么盡可能多的拿到formid了

5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_java實(shí)現(xiàn)微信推送_08
看下官方提供的,只有在表單提交時(shí)把report-submit設(shè)為true時(shí)才能拿到formid,比如這樣

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

所以我們就要在這里下功夫了,既然只能在form組件獲取,我們能不能把我們小程序里用到最多的地方用form來(lái)偽裝呢。

下面簡(jiǎn)單寫個(gè)獲取formid和openid的完整示例,方便大家學(xué)習(xí)

效果圖
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序_09
我們要做的就是點(diǎn)擊獲取formid按鈕,可以獲取到用戶的formid和openid,正常我們開發(fā)時(shí),是需要把openid和formid傳給后臺(tái)的,這里簡(jiǎn)單起見(jiàn),我們直接用獲取到的formid和openid實(shí)現(xiàn)推送功能

下面來(lái)看小程序端的實(shí)現(xiàn)代碼

1,index.wxml
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_java實(shí)現(xiàn)微信推送_10
2,index.js
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序推送_11

到這里我們小程序端的代碼也實(shí)現(xiàn)了,接下來(lái)測(cè)試下推送。

formid:  6ee9ce80c1ed4a2f887fccddf87686eb
openid o3DoL0Uusu1URBJK0NJ4jD1LrRe0

5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序推送_12
可以看到我們用了上面獲取到的openid和formid做了一次推送,顯示推送成功

5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序_13
5行java代碼實(shí)現(xiàn)微信小程序模版消息推送 (含springboot后臺(tái)和小程序源碼)_小程序推送_14

到這里我們小程序消息推送的后臺(tái)和小程序端都講完了。

這里有兩點(diǎn)需要大家注意

1,推送的openid和formid必須對(duì)應(yīng)。
2,一個(gè)formid只能用一次,多次使用會(huì)報(bào)一下錯(cuò)誤。

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

?

?

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >