uniapp微信小程序訂閱消息發(fā)送服務通知超詳細教程
前言
由于公司需求,剛學完的小程序的我,要求開發(fā)一個直播通知的微信小程序,學了vue的我,選擇還是使用uniapp開發(fā),wx原生語法學完已經快忘了。在利用uniapp寫代碼的過程中,遇到很多問題,通過這篇博客分享一下總體實現(xiàn)思路以及一些小坑。整篇博客以逐步的思路讓你完整的了解整個流程,以及自己該如何編寫屬于自己的請求方式。一步步跟著來一定可以實現(xiàn)最終效果。
實現(xiàn)思路:
首先要實現(xiàn)這個需求,最直接的辦法就是去wx的官方文檔中搜索相關文檔以及API介紹,在wx小程序官方文檔中搜索訂閱消息即可看到小程序訂閱消息的介紹

訂閱消息可以分為以下幾種
1. 一次性訂閱消息
一次性訂閱消息用于解決用戶使用小程序后,后續(xù)服務環(huán)節(jié)的通知問題。用戶自主訂閱后,開發(fā)者可不限時間地下發(fā)一條對應的服務消息;每條消息可單獨訂閱或退訂。
2. 長期訂閱消息
一次性訂閱消息可滿足小程序的大部分服務場景需求,但線下公共服務領域存在一次性訂閱無法滿足的場景,如航班延誤,需根據航班實時動態(tài)來多次發(fā)送消息提醒。為便于服務,我們提供了長期性訂閱消息,用戶訂閱一次后,開發(fā)者可長期下發(fā)多條消息。
目前長期性訂閱消息僅向政務民生、醫(yī)療、交通、金融、教育等線下公共服務開放,后期將逐步支持到其他線下公共服務業(yè)務。
3. 設備訂閱消息
設備訂閱消息是一種特殊類型的訂閱消息,它屬于長期訂閱消息類型,且需要完成「設備接入」才能使用。
設備訂閱消息用于在設備觸發(fā)某些需要人工介入的事件時(例如設備發(fā)生故障、設備耗材不足等),向用戶發(fā)送消息通知。詳見設備訂閱消息文檔。
這里根據自己的需求去選擇就好了,一般都是一次性訂閱消息,根據官網文檔我針對細節(jié)做一個補充
實現(xiàn)步驟:
1.獲取模板id
在微信公眾平臺手動配置獲取模板 ID:
登錄 https://mp.weixin.qq.com,功能模塊,訂閱消息,我的模板中點擊選用去選擇模板
如果沒有合適的模板,可以申請?zhí)砑有履0?,審核通過后可使用
可以選一個基礎的模板使用,申請完之后,可以在我的模板中看到自己申請的模板。點擊詳情即可進入模板詳情查看

點擊選用,進入公共模板庫,搜索模板:活動開始提醒,點擊選用即可進入模板選擇,最多選擇5條通知內容,這里都是非個性化設置,只能按照提供的字段來。如果要個性化設計,可以點那個:點擊申請。去申請。選擇好后點擊提交即可

在我的模板中,點剛剛申請的模板右側的詳情進入配置頁,注意我畫框的這部分,這將是等會設置參數(shù)的重要key

2.獲取下發(fā)權限
在我上面提到的微信官方文檔中,步驟和我是一樣的,在那里可以進入詳情頁進入查看詳細的步驟。以及接口回調參數(shù)對應的信息,示例代碼是wx原生代碼的,這里我用uniapp的舉例。在文檔中,發(fā)起彈窗的請求方法為wx.requestSubscribeMessage(Object object),在uni中搜索此方法為:uni.requestSubscribeMessage(Object object),完全是一樣的,只是調用的頂級對象不一樣。
methods:{
Subscribe(){
uni.requestSubscribeMessage({
//此處填寫剛才申請模板的模板ID
tmplIds: ['ZcsAH2vJKgKocfQw8e2Phhz-8FzPQgfT_5ehxwic4ck'],
success (res) {
console.log(res)
}
})
}
}在methods中定義此方法,可以通過點擊事件綁定方法,作為測試。
在開發(fā)者工具和真機調試的效果是不一樣的,要上真機調試才是實際效果
打印res可以看到,accept表示同意,reject表示拒絕
3. 調用接口發(fā)訂閱消息
第二步為獲取用戶的授權訂閱。才允許你向用戶發(fā)送訂閱消息。第三步就是向微信服務器發(fā)送請求,通過微信發(fā)送服務通知給具體的用戶,詳細請求參數(shù)去看微信官方文檔,我這里利用uniapp舉例
請求地址:POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
通過查看文檔可以知道必須必填為4個參數(shù),這里的四個參數(shù)需要仔細看。文檔只告訴你需要填這四個,具體怎么來就需要自己一步步去得到了。

3.1、access_token:
這里需要向wx的一個接口發(fā)送請求,需要傳入appid和secret,此步用來獲取access_token,有效期為2小時
get_wx_access_token() {
return uni.request({
method: 'get',
// appip和secret需要去小程序管理界面查看
url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`,
dataType: 'json',
timeout: 30000
}).then(res => {
let [err, success] = res
if (success.statusCode == 200) {
return success.data.access_token
}
})
}如果忘記了小程序密鑰,點擊重置就行,然后記得保存

PS:此處的獲取token請求,建議是放到后端去做,否則secret定在前端,上線提交會被標注風險駁回
3.2 touser
touser參數(shù)就是需要接收訂閱消息的用戶id,獲取用戶id首先需要登錄獲取用戶的code,再利用code去獲取用戶id
// 先讓用戶登錄,此user_login方法可以放到onLoad()生命周期中去執(zhí)行
// 此處async和await異步操作不懂可以先百度,問題不大
async user_login() {
let self = this
await uni.login({
success(res) {
if (res.code) {
self.code = res.code
} else {
console.log('獲取失敗!' + res.errMsg)
}
}
})
},獲取到用戶登錄的信息后,res.code就是用戶的code。然后再向微信后端發(fā)請求獲取openid,此處獲取openid的請求也需要用到secret,因此建議這個請求也放到后端去做。貼上使用uni獲取的代碼
// wxappid wxsecret為小程序的appId和secretKey,登錄小程序后臺可查看,code就是user_login的那個code
uni.request({
url: `https://api.weixin.qq.com/sns/jscode2session?appid=${wxappid}&secret=${wxsecret}&js_code=$[code]&grant_type=authorization_code`,
success(data) {
self.useropenId = data.data.openid
}
})文檔:

這時候就已經獲取到useropenId了,這個值需要傳入到touser
3.3、template_id
這個值就是模板ID,直接傳字符串就像,下面再寫傳值代碼
3.4、data
data的傳值需要用到最開始申請模板時候我畫框的那一部分,如果你是自己申請的其他模板,需要注意,傳入Key的順序也要一致,傳入的是Json格式的數(shù)據,每一條Json的Key就是模板中的Key。
最后就是發(fā)送訂閱消息
notice() {
let self = this
//下方的thing1,thing2和其他,對應的是你選取模板的模板詳情中的字段名稱(可在小程序后臺模板查看對應的字段,要和上面的字段一樣),需要更改成你自己的
const pushmsg = {
"touser": self.useropenId,
"template_id": "ZcsAH2vJKgKocfQw8e2Phhz-8FzPQgfT_5ehxwic4ck",
"data": {
"thing1": {
"value": "今天記得寫代碼"
},
"date2": {
"value": "19:00"
},
"time3": {
"value": "20:00"
},
"thing4": {
"value": "今天寫堆排序把"
},
"time7": {
"value": "18:50"
}
}
}
uni.request({
// 此處的mytoken
url: 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' + this.get_wx_access_token(),
data: JSON.stringify(pushmsg),
method: 'POST',
success: function(res) {
// console.log('success');
}
})
},以上就是微信小程序發(fā)送服務通知的全部流程,最后附上:方法是死的,人是活的,其實主要步驟就3步,就是微信官方文檔上提到的三步,只是每一個步驟都需要有其他的知識點,但是文檔沒有告訴你,需要你自己去發(fā)掘,或許你有其他經驗的基礎上,去查文檔實現(xiàn)此需求還是會非常容易的,此博客對小白或許會友好很多。每一個單獨的步驟和請求,都可以單獨拆出來自己去定義方法,就像積木一樣,每個核心組件我都告訴你了,最后怎么拼都看你,但是前提是得先獲得openid,然后用戶點擊彈窗授權統(tǒng)一,然后獲得一個token,最后再把東西結合發(fā)送求前實現(xiàn)模板的訂閱。因為這東西實現(xiàn),完全是很多知識點湊在一起的,所以可以每一個都測試一遍,clog一下返回值,你就能明白每個操作的意義,最后自己把關鍵部分放后端就行
我的實現(xiàn)思路是:
前端:
onLoad( )階段 執(zhí)行 user_login 獲得 user的code
點擊預約按鈕 進行彈窗uni.requestSubscribeMessage
彈窗成功后判斷返回值,如果為accept則表示同意則發(fā)請求給后端,附帶user的code
后端:
發(fā)送請求獲取openid
發(fā)送請求獲取token
最后利用openid、token和寫死的template_id和data進行發(fā)送服務通知
總結
到此這篇關于uniapp微信小程序訂閱消息發(fā)送服務通知的文章就介紹到這了,更多相關uniapp小程序訂閱消息發(fā)送服務通知內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- UNIAPP實現(xiàn)微信小程序登錄授權和手機號授權功能(uniapp做微信小程序)
- 前端uniapp微信小程序跨域問題的解決方法
- uniapp實現(xiàn)微信小程序支付(前端)詳細代碼
- uniapp微信小程序支付前端生成簽名并調起微信支付全部代碼
- uniapp微信小程序使用webview嵌套uniappH5并實現(xiàn)通信詳細步驟
- uniapp開發(fā)微信小程序主包太大和vendor.js過大無法打包問題解決
- uniapp微信小程序axios庫的封裝及使用詳細教程
- uniapp微信小程序授權登錄并獲取手機號的方法
- uniapp微信小程序多環(huán)境配置以及使用教程
- uniapp 微信小程序之金額展示套餐
相關文章
JavaScrip實現(xiàn)一個有時間限制的緩存類的方式
本文將探索 JavaScript 中一種基于自動過期機制的時間限制緩存實現(xiàn)方式,提高數(shù)據緩存策略的靈活性和效率,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-01-01
JavaScript監(jiān)測ActiveX控件是否已經安裝過的代碼
這是通用的方法,只需要把唯一的Activex的clsid和任意一個屬性或方法名傳進來就可以判斷了。(找了兩個小時才找到 -_-!)2008-09-09
手把手教會你用Javascript實現(xiàn)放大鏡效果(詳細注釋+完整代碼)
放大鏡可以說是前端人必須學會的程序之一,下面這篇文章主要給大家介紹了關于手把手教會你用Javascript實現(xiàn)放大鏡效果的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-03-03
JavaScript省市區(qū)三級聯(lián)動菜單效果
這篇文章主要為大家詳細介紹了JavaScript省市區(qū)三級聯(lián)動菜單效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09

