微信小程序+springboot實(shí)習(xí)訂閱消息

d906b927dd997144f36441cbacccccb.png

在我們開發(fā)微信小程序中經(jīng)常會(huì)用到訂閱消息提醒趣钱,如商城系統(tǒng)中,用戶購買商品支付之后渔隶,可以發(fā)送提醒訂單支付成功羔挡;在我們的拼團(tuán)功能中,當(dāng)拼團(tuán)成功或失敗時(shí)间唉,可以推送訂閱消息提醒用戶绞灼;

一、訂閱消息分為長期訂閱和一次性訂閱呈野;

長期訂閱消息:就是在用戶授權(quán)之后低矮,可以推送多次消息給用戶;

一次性訂閱消息:就是用戶授權(quán)后只能推送一次消息給用戶被冒,如果還需要推送消息的話军掂,就必須讓用戶再授權(quán)一次了;

兩者比較起來的話肯定長期訂閱消息用起來比較舒服的昨悼;但是它不是所有開發(fā)者都可以申請(qǐng)蝗锥,一般是需要有一定的資質(zhì)才行,如媒體類率触;具體的話终议,大家可以看官方文檔的解釋更為詳細(xì);

二葱蝗、訂閱消息模板

2.1穴张、訂閱消息模板申請(qǐng)

我們平時(shí)在微信的通知服務(wù)中可以看到一些別的小程序的通知,它提示的字段都是需要先去小程序后臺(tái)中申請(qǐng)模板的两曼;

在這里插入圖片描述

2.2皂甘、根據(jù)自己的需要挑選模板,并選擇所需字段

這里我選擇了支付成功后的訂閱消息模板

在這里插入圖片描述

好了悼凑,挑選完模板后偿枕,我們開始進(jìn)行開發(fā);

三户辫、小程序代碼編寫

3.1益老、小程序中創(chuàng)建一個(gè)頁面,放入一個(gè)按鈕寸莫,并綁定一個(gè)點(diǎn)擊函數(shù)

xml:


<view class="intro">訂閱功能Demo</view>

<view>

<button type="info" bindtap="submit">提交訂單</button>

</view>

3.2捺萌、獲取訂閱權(quán)限,這里需要調(diào)用官方提供的API


wx.requestSubscribeMessage({

  tmplIds: [''],  //你的模板ID

  success (res) { }

})

3.3、js代碼如下


const app = getApp()

Page({

  data: {

  },

  onLoad: function () {

  },

  submit(){

    wx.requestSubscribeMessage({

      tmplIds: ['你的模板Id'],

      success (res) {

        //發(fā)送請(qǐng)求到后端桃纯,后端接收到請(qǐng)求后調(diào)用訂閱消息接口進(jìn)行推送

      }

    })

  }

}) 

到這里我們可以測試效果了酷誓,點(diǎn)擊按鈕后會(huì)彈出授權(quán)框;要用真機(jī)調(diào)試才可以看到效果哦~
1dbfce765bcf52a0a5d803441cb51ab.png

四态坦、編寫后端代碼

4.1盐数、實(shí)現(xiàn)邏輯

4.1.1.前期需要有推送用戶的openid

openId是用戶在小程序中的唯一標(biāo)識(shí),也就是我們要推送給誰

4.1.2.我們需要先獲取access_token伞梯;

access_token就類似一個(gè)臨時(shí)身份證玫氢;我們需要傳遞appId和appSecret去官方提供的接口進(jìn)行身份驗(yàn)證,如果你的appId和appSecret正確谜诫,就會(huì)傳遞一個(gè)access_token給你漾峡;這個(gè)token是有時(shí)效性的(7200s),也就是說7200s之后這個(gè)token就失效了喻旷,后面如果需要使用就需要重新獲取

4.1.3.封裝訂閱消息模板內(nèi)容

這里的封裝格式需要注意一下生逸;

例如,模板的內(nèi)容為


姓名: {{name01.DATA}}

金額: {{amount01.DATA}}

行程: {{thing01.DATA}}

日期: {{date01.DATA}}

則我們要封裝的數(shù)據(jù)格式應(yīng)為


{

  "touser": "OPENID",

  "template_id": "TEMPLATE_ID",

  "page": "index",

  "data": {

      "name01": {

          "value": "某某"

      },

      "amount01": {

          "value": "¥100"

      },

      "thing01": {

          "value": "廣州至北京"

      } ,

      "date01": {

          "value": "2018-01-01"

      }

  }

}

4.1.4.調(diào)用接口推送訂閱消息

POST請(qǐng)求地址


https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN

4.2且预、開發(fā)代碼

4.2.1.導(dǎo)入HTTP請(qǐng)求工具槽袄,這里使用Hutool非常好用的Java開發(fā)SDK

官方文檔地址:

https://www.hutool.cn/docs/#/

在pom.xml文件中引入maven包


        <dependency>

            <groupId>cn.hutool</groupId>

            <artifactId>hutool-all</artifactId>

            <version>5.4.0</version>

        </dependency>

4.2.2.獲取access_token

    public String getAccessToken() {

        String appId = "你的openId";

        String appSecret = "你的小程序密鑰";

        String result = cn.hutool.http.HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret);

        JSONObject jsonObject = JSONUtil.parseObj(result);

        return jsonObject.getStr("access_token");

    }

4.2.3.發(fā)送訂閱消息

  @RequestMapping("/send")

    public String send(){

        JSONObject body=new JSONObject();

        body.set("touser","用戶的openId");

        body.set("template_id","你的模板Id");

        JSONObject json=new JSONObject();

        json.set("thing6",new JSONObject().set("value","20200820757539"));

        json.set("date4",new JSONObject().set("value", LocalDateTime.now()));

        json.set("amount3",new JSONObject().set("value","多功能等一件商品"));

        json.set("character_string2",new JSONObject().set("value", DateUtil.now()));

        json.set("thing5",new JSONObject().set("value","拼團(tuán)"));

        body.set("data",json);

        //發(fā)送

        String accessToken= getAccessToken();

        String post =  cn.hutool.http.HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken, body.toString());

        return "ok";

    }

4.2.4.整合代碼

package com.maomao.demo.controller;

import cn.hutool.core.date.DateUtil;

import cn.hutool.json.JSONObject;

import cn.hutool.json.JSONUtil;

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

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

import java.time.LocalDateTime;

@RestController

@RequestMapping("/msg")

public class MessageController {

    public String getAccessToken() {

        String appId = "你的openId";

        String appSecret = "你的小程序密鑰";

        String result = cn.hutool.http.HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret);

        JSONObject jsonObject = JSONUtil.parseObj(result);

        return jsonObject.getStr("access_token");

    }

    @RequestMapping("/send")

    public String send(){

        JSONObject body=new JSONObject();

        body.set("touser","用戶的openId");

        body.set("template_id","你的模板Id");

        JSONObject json=new JSONObject();

        json.set("thing6",new JSONObject().set("value","20200820757539"));

        json.set("date4",new JSONObject().set("value", LocalDateTime.now()));

        json.set("amount3",new JSONObject().set("value","多功能等一件商品"));

        json.set("character_string2",new JSONObject().set("value", DateUtil.now()));

        json.set("thing5",new JSONObject().set("value","拼團(tuán)"));

        body.set("data",json);

        //發(fā)送

        String accessToken= getAccessToken();

        String post =  cn.hutool.http.HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken, body.toString());

        return "ok";

    }

}

五、小程序端調(diào)用

5.1锋谐、調(diào)用后端API接口


const app = getApp()

Page({

  data: {

  },

  onLoad: function () {

  },

  submit(){

    wx.requestSubscribeMessage({

      tmplIds: ['你的模板Id'],

      success (res) {

        //發(fā)送請(qǐng)求到后端遍尺,后端接收到請(qǐng)求后調(diào)用訂閱消息接口進(jìn)行推送

        wx.request({

          url: '你后端編寫的推送api地址',

          method:"GET",

          data:{},

          success (res) {

            console.log(res.data)

          }

        })

      }

    })

  }

})

5.2、微信接收到訂閱消息

d906b927dd997144f36441cbacccccb.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涮拗,一起剝皮案震驚了整個(gè)濱河市乾戏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌多搀,老刑警劉巖歧蕉,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾部,死亡現(xiàn)場離奇詭異康铭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赌髓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門从藤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锁蠕,你說我怎么就攤上這事夷野。” “怎么了荣倾?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵悯搔,是天一觀的道長。 經(jīng)常有香客問我舌仍,道長妒貌,這世上最難降的妖魔是什么通危? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮灌曙,結(jié)果婚禮上菊碟,老公的妹妹穿的比我還像新娘。我一直安慰自己在刺,他們只是感情好逆害,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚣驼,像睡著了一般魄幕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隙姿,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天梅垄,我揣著相機(jī)與錄音,去河邊找鬼输玷。 笑死队丝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欲鹏。 我是一名探鬼主播机久,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼赔嚎!你這毒婦竟也來了膘盖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤尤误,失蹤者是張志新(化名)和其女友劉穎侠畔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體损晤,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡软棺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尤勋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喘落。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖最冰,靈堂內(nèi)的尸體忽然破棺而出瘦棋,到底是詐尸還是另有隱情,我是刑警寧澤暖哨,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布赌朋,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沛慢。R本人自食惡果不足惜服球,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颠焦。 院中可真熱鬧斩熊,春花似錦、人聲如沸伐庭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圾另。三九已至霸株,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間集乔,已是汗流浹背去件。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扰路,地道東北人尤溜。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像汗唱,于是被迫代替她去往敵國和親宫莱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355