亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

在小程序中推送模板消息的實現方法

2020-03-21 15:51:08
字體:
來源:轉載
供稿:網友

前段時間剁手了 PS4,在瀏覽商店時,發現官方商店真的不好用,主要是網絡原因,次要是頁面設計。所以就想自己做一個游戲查詢的小程序,可以關注某個游戲,然后在這個游戲打折的時候發送通知給用戶。最后發現有個很大的問題是:小程序沒法直接給用戶推送消息(當時還不知道模板消息),服務號才能。然后就用郵箱實現了通知功能,但是郵箱的局限實在是太大了(各大免費郵箱每天的發件數都很小,自己搭建的郵件服務器雖然沒有發件限制,但是大概率會被放到垃圾箱)。

然后某天在微信小程序的管理后臺發現了模板消息這個東西,查了會資料發現可以通過這個來實現消息推送。要給用戶發送模板消息需要 formId/prepay_id 這樣一個東西,這個東西是怎么來的呢?

  • formId:這個可以通過表單的提交來獲取,需要在組件中設置屬性 report-submit="true" ,這樣每次對這個表單的提交一次就會產生一個 formId.
  • prepay_id:這個是支付動作產生的,具體的我也不太清楚,畢竟個人小程序并不能支付.

下面具體來講講前后臺的實現,前臺使用 mpvue,后臺使用 java

前臺獲取 formId

既然可以通過 form 的 submit 操作來獲取到 formId,那我們稍微拓展一下,將我們的小程序頁面中所有用戶能點擊的部分都用 form,button 來包裹一下,這樣用戶感知不到有表單提交操作,我們也能獲取大量的 formId。

注意不能用疊加的方式來一次點擊獲取多個 formId,這樣方法已經不行了,獲取到的都會是一樣的。

獲取一個模板

要發送模板消息,首先要在小程序的管理后臺上添加模板,步驟如下:

1.在模板庫中選擇一個模板

小程序,推送,模板,消息

2.選擇顯示參數

選擇要顯示在消息中的參數,這里選擇如下兩個參數:

小程序,推送,模板,消息

這樣就有了一個模板可以用來發消息了,在我的模板中可以看到模板 id,和字段 id

小程序,推送,模板,消息

獲取 formId

formId 是通過表單提交來獲取到了,為了獲取足夠多的 formId,可以將能夠點擊的組件(比如按鈕,列表單元..)包裹在 form 中,這樣用戶在日常使用中就能夠收集到足夠多的 formId。下面以包裹一個有贊的按鈕為例。因為小程序的限制,設置 form-type 屬性的按鈕必須為 form 組件的直接子節點,所以并不能夠在 form 中使用自定義組件,并將 form-type='submit' 設置到自定義組件中。

template 部分如下:

<!-- 要獲取formId,需要給form設置report-submit="true"的屬性,然后在form-type="submit"的按鈕上產生點擊動作,才會觸發表單提交的事件--formSubmit,進而獲取到formId --><form @submit="formSubmit" report-submit="true" class="bottom"> <button style="border:0;display:inline-block" plain="true" form-type="submit" @click="back">  <van-button round type="primary" size="small" @click="back">返回</van-button> </button> <button style="border:0;display:inline-block" plain="true" form-type="submit" @click="watchGame">  <van-button round type="danger" size="small">{{watchText}}</van-button> </button> <button style="border:0;display:inline-block" plain="true" form-type="submit" open-type="share">  <van-button round type="info" size="small">分享</van-button> </button></form>

style 目的為了去除原生 button 的背景,邊框啥的,把 button 當一個 div 來使用,然后在 button 中設置 form-type 和 click 屬性,這樣既不影響 formId 的屬性,也對原有邏輯不產生任何影響。之所以將 click 放在 button 上是因為 button 內部的組件沒法獲取到點擊事件。

formSubmit 代碼如下:

formSubmit(e) { let item = {  value: e.mp.detail.formId,  expireTime: Date.now() + 7 * 24 * 60 * 60 * 1000 }; this.globalData.formIdList.push(item);},

該函數是在表單提交時觸發,用于獲取 formId,將 formId 和這個 formId 的過期時間一起存到 globalData 全局數據中。然后找一個時機將這些 formId 發送給服務器保存起來就行了。

這里放上我的做法以供參考。

我是在每次發送 http 請求前檢查是不是有 formId 需要發送到服務器,如果有就將這些數據 JSON 序列化后放到一個自定義 header 中,發送出去,具體代碼如下(http 請求工具為:flyio):

var Fly = require("flyio/dist/npm/wx");var fly = new Fly();//在請求預處理中fly.interceptors.request.use(request => { request.headers["jwt-token"] = wxUtil.getGlobalData("jwt-token"); //如果有formId就放到header里送過去 let formIdList = getApp().globalData.formIdList; if (formIdList.length > 0) {  request.headers["formIdList"] = JSON.stringify(formIdList);  getApp().globalData.formIdList = []; } if (request.method == "GET") {  request.params["_t"] = new Date().getTime(); } return request;});

下面將后臺的實現,基于 Spring Boot.

后臺處理

搜集 formId

首先需要把 formId 收集起來存到數據庫,那么就需要檢查每個請求,看 header 中有沒有攜帶 formId,如果有就存到數據庫中,注意要和用戶對應起來,某個用戶點擊產生的 formId 只能用于給這個用戶推送消息。

因為要將 formId 和用戶綁定起來,因此我是在身份認證過濾器中進行的 formId 處理,身份認證成功后,處理 formId。代碼如下:

/** * Description: 從請求頭中獲取formIdList,并插入數據庫 * * @param request 請求頭 * @return void * @author fanxb * @date 2019/5/6 16:39 */private void checkFormId(HttpServletRequest request) {  String str = request.getHeader(Constant.HEADER_FORM_ID);  if (StringUtil.isEmpty(str)) {    return;  }  List<FormKey> formKeyList = JSON.parseArray(str, FormKey.class);  //UserContextHolder用戶將當前線程和用戶綁定起來,方便后面獲取用戶信息  int userId = UserContextHolder.get().getUser().getUserId();  formKeyList.forEach(item -> item.setUserId(userId));  this.formKeyDao.insertMany(formKeyList);}

發送微信提醒

通過官方文檔可以知道發送消息的流程如下:

1 獲取 accessToken,調用微信的大多數接口都需要這個東西,這個通過 appId 和 secret 來獲取。詳情參見: https://developers.weixin.qq.com/miniprogram/dev/api-backend/auth.getAccessToken.html

2 調用微信發送服務通知的接口.這個接口文檔在: 點擊跳轉

最終發送的 http 請求是這樣的:

url: https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=上面獲取的accessToken
method: post

請求體格式為:application/json; charset=utf-8

body:{ "touser": "用戶的openId", "template_id": "模板id", "page": "點擊跳轉的小程序url路徑", "form_id": "收集到的formId", "data": {  "keyword1": {   "value": "您有一個信息的提示消息"  },  "keyword2": {   "value": "這是消息內容"  } }, "emphasis_keyword": "keyword1.DATA"}

data 中的數據的按照順序 keyword1,keyword2 對應于模板中字段的順序。

結束

工程全部源碼在這里:github

總結

以上所述是小編給大家介紹的在小程序中推送模板消息的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美三级免费观看| 国产美女主播一区| 亚洲精品一区二三区不卡| 精品久久久久久电影| 国产一区二区三区在线观看视频| 青青久久av北条麻妃黑人| 日韩专区中文字幕| 亚洲精品在线观看www| 精品久久久久久中文字幕一区奶水| 成人福利在线观看| 色777狠狠综合秋免鲁丝| 国产日韩av高清| 91久久久国产精品| 亚洲视频在线观看视频| 97avcom| 欧美精品在线网站| 欧美激情a∨在线视频播放| 午夜免费在线观看精品视频| 欧美另类老肥妇| 国产精品福利网| 欧美xxxx做受欧美| 久久精品国产亚洲| 久久亚洲春色中文字幕| 中文字幕精品一区久久久久| 国产精品高潮呻吟久久av野狼| 国产成人精品免高潮费视频| 成人在线激情视频| 亚洲精品免费在线视频| 成人啪啪免费看| 丝袜一区二区三区| 亚洲最大的网站| 日韩精品在线观看视频| 日韩欧美在线视频| 日韩视频亚洲视频| 91av在线国产| 欧美插天视频在线播放| 午夜精品99久久免费| 成人精品久久久| 欧美裸体视频网站| 欧美亚洲视频一区二区| 亚洲欧美第一页| 亚洲精品av在线| 亚洲精品乱码久久久久久按摩观| 国模精品系列视频| 精品国产一区二区三区久久| 91av在线播放视频| 精品久久久国产精品999| 久久精品久久精品亚洲人| 91精品国产99| 久久精品青青大伊人av| 8050国产精品久久久久久| 国产美女久久精品| 91精品国产综合久久香蕉| 日韩视频免费观看| 久久精品视频在线| 亚洲国产97在线精品一区| 久久国产精品免费视频| 91亚洲一区精品| 精品久久在线播放| 久久夜精品香蕉| 欧美国产日韩xxxxx| 8050国产精品久久久久久| 国产91精品高潮白浆喷水| 久久夜精品va视频免费观看| 国产不卡一区二区在线播放| 黄色成人在线免费| 欧美国产精品va在线观看| 亚洲成人久久久| 国产成人免费av| 亲子乱一区二区三区电影| 欧美日韩国产精品一区二区不卡中文| 成人在线播放av| 伊人久久五月天| 日韩欧美中文字幕在线观看| 欧美激情网友自拍| 欧美激情网站在线观看| 亚洲美女在线视频| 97av视频在线| 亚洲成人1234| 欧美裸体xxxx极品少妇| 亚洲美女免费精品视频在线观看| 久久久欧美精品| 91久久国产综合久久91精品网站| 久久天天躁夜夜躁狠狠躁2022| 亚洲精品www| 成人黄色免费网站在线观看| 97精品一区二区三区| 久久精品成人欧美大片| 97在线视频观看| 在线观看精品自拍私拍| 亚洲一区美女视频在线观看免费| 国产精品久久不能| 亚洲高清免费观看高清完整版| 欧美精品一区二区三区国产精品| 国产最新精品视频| 亚洲综合精品一区二区| 福利二区91精品bt7086| 最近2019年手机中文字幕| 色中色综合影院手机版在线观看| 日韩精品视频中文在线观看| 国产精品日韩欧美| 日韩av在线影院| 77777少妇光屁股久久一区| 亚州精品天堂中文字幕| 中文字幕国产亚洲2019| 欧美成人亚洲成人| 欧美性xxxxxxx| 韩国三级电影久久久久久| 欧美孕妇孕交黑巨大网站| 中文国产成人精品久久一| 日本成人在线视频网址| 亚洲国产精品小视频| 久久成人一区二区| 久久久久国产精品www| 日韩精品在线视频观看| 91久久久久久久久久| 亚洲男人天堂古典| 欧美日韩亚洲成人| 中文字幕久久久av一区| 91在线直播亚洲| 久久精品一本久久99精品| 青青草原成人在线视频| 日韩欧美一区二区三区久久| 亚洲毛茸茸少妇高潮呻吟| zzjj国产精品一区二区| 国产精品免费久久久| 日韩久久精品电影| 91po在线观看91精品国产性色| 伊人久久综合97精品| 97国产精品视频| 国内精品久久久久久| 午夜精品一区二区三区在线| 富二代精品短视频| 国产精品久久久久7777婷婷| 91精品久久久久久久久久另类| 欧美小视频在线观看| 国产自摸综合网| 欧美日韩免费在线| 亚洲天天在线日亚洲洲精| 国产日韩欧美视频在线| 久久综合电影一区| 欧美大片免费观看| 亚洲欧美精品中文字幕在线| 北条麻妃久久精品| 国产综合色香蕉精品| 国产日韩在线观看av| 亚洲人成电影网站| www.久久久久久.com| 日韩中文字幕网址| 国产久一一精品| 亚洲国产成人91精品| 国产成人avxxxxx在线看| 国产成人免费91av在线| 国产精品一区av| 亚洲国产又黄又爽女人高潮的| 国产精品7m视频| 久久伊人精品一区二区三区| 91在线观看免费高清完整版在线观看| 日韩av在线一区二区| 中文字幕无线精品亚洲乱码一区| 国产精品一区电影| 亚洲国产精品人久久电影| 国产在线精品自拍| 日韩激情视频在线|