uniapp微信小程序訂閱消息發(fā)送服務(wù)通知超詳細(xì)教程
前言
由于公司需求,剛學(xué)完的小程序的我,要求開發(fā)一個直播通知的微信小程序,學(xué)了vue的我,選擇還是使用uniapp開發(fā),wx原生語法學(xué)完已經(jīng)快忘了。在利用uniapp寫代碼的過程中,遇到很多問題,通過這篇博客分享一下總體實(shí)現(xiàn)思路以及一些小坑。整篇博客以逐步的思路讓你完整的了解整個流程,以及自己該如何編寫屬于自己的請求方式。一步步跟著來一定可以實(shí)現(xiàn)最終效果。
實(shí)現(xiàn)思路:
首先要實(shí)現(xiàn)這個需求,最直接的辦法就是去wx的官方文檔中搜索相關(guān)文檔以及API介紹,在wx小程序官方文檔中搜索訂閱消息即可看到小程序訂閱消息的介紹
訂閱消息可以分為以下幾種
1. 一次性訂閱消息
一次性訂閱消息用于解決用戶使用小程序后,后續(xù)服務(wù)環(huán)節(jié)的通知問題。用戶自主訂閱后,開發(fā)者可不限時間地下發(fā)一條對應(yīng)的服務(wù)消息;每條消息可單獨(dú)訂閱或退訂。
2. 長期訂閱消息
一次性訂閱消息可滿足小程序的大部分服務(wù)場景需求,但線下公共服務(wù)領(lǐng)域存在一次性訂閱無法滿足的場景,如航班延誤,需根據(jù)航班實(shí)時動態(tài)來多次發(fā)送消息提醒。為便于服務(wù),我們提供了長期性訂閱消息,用戶訂閱一次后,開發(fā)者可長期下發(fā)多條消息。
目前長期性訂閱消息僅向政務(wù)民生、醫(yī)療、交通、金融、教育等線下公共服務(wù)開放,后期將逐步支持到其他線下公共服務(wù)業(yè)務(wù)。
3. 設(shè)備訂閱消息
設(shè)備訂閱消息是一種特殊類型的訂閱消息,它屬于長期訂閱消息類型,且需要完成「設(shè)備接入」才能使用。
設(shè)備訂閱消息用于在設(shè)備觸發(fā)某些需要人工介入的事件時(例如設(shè)備發(fā)生故障、設(shè)備耗材不足等),向用戶發(fā)送消息通知。詳見設(shè)備訂閱消息文檔。
這里根據(jù)自己的需求去選擇就好了,一般都是一次性訂閱消息,根據(jù)官網(wǎng)文檔我針對細(xì)節(jié)做一個補(bǔ)充
實(shí)現(xiàn)步驟:
1.獲取模板id
在微信公眾平臺手動配置獲取模板 ID:
登錄 https://mp.weixin.qq.com,功能模塊,訂閱消息,我的模板中點(diǎn)擊選用去選擇模板
如果沒有合適的模板,可以申請?zhí)砑有履0?,審核通過后可使用
可以選一個基礎(chǔ)的模板使用,申請完之后,可以在我的模板中看到自己申請的模板。點(diǎn)擊詳情即可進(jìn)入模板詳情查看
點(diǎn)擊選用,進(jìn)入公共模板庫,搜索模板:活動開始提醒,點(diǎn)擊選用即可進(jìn)入模板選擇,最多選擇5條通知內(nèi)容,這里都是非個性化設(shè)置,只能按照提供的字段來。如果要個性化設(shè)計(jì),可以點(diǎn)那個:點(diǎn)擊申請。去申請。選擇好后點(diǎn)擊提交即可
在我的模板中,點(diǎn)剛剛申請的模板右側(cè)的詳情進(jìn)入配置頁,注意我畫框的這部分,這將是等會設(shè)置參數(shù)的重要key
2.獲取下發(fā)權(quán)限
在我上面提到的微信官方文檔中,步驟和我是一樣的,在那里可以進(jìn)入詳情頁進(jìn)入查看詳細(xì)的步驟。以及接口回調(diào)參數(shù)對應(yīng)的信息,示例代碼是wx原生代碼的,這里我用uniapp的舉例。在文檔中,發(fā)起彈窗的請求方法為wx.requestSubscribeMessage(Object object)
,在uni中搜索此方法為:uni.requestSubscribeMessage(Object object)
,完全是一樣的,只是調(diào)用的頂級對象不一樣。
methods:{ Subscribe(){ uni.requestSubscribeMessage({ //此處填寫剛才申請模板的模板ID tmplIds: ['ZcsAH2vJKgKocfQw8e2Phhz-8FzPQgfT_5ehxwic4ck'], success (res) { console.log(res) } }) } }
在methods中定義此方法,可以通過點(diǎn)擊事件綁定方法,作為測試。
在開發(fā)者工具和真機(jī)調(diào)試的效果是不一樣的,要上真機(jī)調(diào)試才是實(shí)際效果
打印res可以看到,accept表示同意,reject表示拒絕
3. 調(diào)用接口發(fā)訂閱消息
第二步為獲取用戶的授權(quán)訂閱。才允許你向用戶發(fā)送訂閱消息。第三步就是向微信服務(wù)器發(fā)送請求,通過微信發(fā)送服務(wù)通知給具體的用戶,詳細(xì)請求參數(shù)去看微信官方文檔,我這里利用uniapp舉例
請求地址:POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
通過查看文檔可以知道必須必填為4個參數(shù),這里的四個參數(shù)需要仔細(xì)看。文檔只告訴你需要填這四個,具體怎么來就需要自己一步步去得到了。
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 } }) }
如果忘記了小程序密鑰,點(diǎn)擊重置就行,然后記得保存
PS:此處的獲取token請求,建議是放到后端去做,否則secret定在前端,上線提交會被標(biāo)注風(fēng)險(xiǎn)駁回
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 } })
文檔:
這時候就已經(jīng)獲取到useropenId了,這個值需要傳入到touser
3.3、template_id
這個值就是模板ID,直接傳字符串就像,下面再寫傳值代碼
3.4、data
data的傳值需要用到最開始申請模板時候我畫框的那一部分,如果你是自己申請的其他模板,需要注意,傳入Key的順序也要一致,傳入的是Json格式的數(shù)據(jù),每一條Json的Key就是模板中的Key。
最后就是發(fā)送訂閱消息
notice() { let self = this //下方的thing1,thing2和其他,對應(yīng)的是你選取模板的模板詳情中的字段名稱(可在小程序后臺模板查看對應(yīng)的字段,要和上面的字段一樣),需要更改成你自己的 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ā)送服務(wù)通知的全部流程,最后附上:方法是死的,人是活的,其實(shí)主要步驟就3步,就是微信官方文檔上提到的三步,只是每一個步驟都需要有其他的知識點(diǎn),但是文檔沒有告訴你,需要你自己去發(fā)掘,或許你有其他經(jīng)驗(yàn)的基礎(chǔ)上,去查文檔實(shí)現(xiàn)此需求還是會非常容易的,此博客對小白或許會友好很多。每一個單獨(dú)的步驟和請求,都可以單獨(dú)拆出來自己去定義方法,就像積木一樣,每個核心組件我都告訴你了,最后怎么拼都看你,但是前提是得先獲得openid,然后用戶點(diǎn)擊彈窗授權(quán)統(tǒng)一,然后獲得一個token,最后再把東西結(jié)合發(fā)送求前實(shí)現(xiàn)模板的訂閱。因?yàn)檫@東西實(shí)現(xiàn),完全是很多知識點(diǎn)湊在一起的,所以可以每一個都測試一遍,clog一下返回值,你就能明白每個操作的意義,最后自己把關(guān)鍵部分放后端就行
我的實(shí)現(xiàn)思路是:
前端:
onLoad( )階段 執(zhí)行 user_login 獲得 user的code
點(diǎn)擊預(yù)約按鈕 進(jìn)行彈窗uni.requestSubscribeMessage
彈窗成功后判斷返回值,如果為accept則表示同意則發(fā)請求給后端,附帶user的code
后端:
發(fā)送請求獲取openid
發(fā)送請求獲取token
最后利用openid、token和寫死的template_id和data進(jìn)行發(fā)送服務(wù)通知
總結(jié)
到此這篇關(guān)于uniapp微信小程序訂閱消息發(fā)送服務(wù)通知的文章就介紹到這了,更多相關(guān)uniapp小程序訂閱消息發(fā)送服務(wù)通知內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- UNIAPP實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號授權(quán)功能(uniapp做微信小程序)
- 前端uniapp微信小程序跨域問題的解決方法
- uniapp實(shí)現(xiàn)微信小程序支付(前端)詳細(xì)代碼
- uniapp微信小程序支付前端生成簽名并調(diào)起微信支付全部代碼
- uniapp微信小程序使用webview嵌套u(yù)niappH5并實(shí)現(xiàn)通信詳細(xì)步驟
- uniapp開發(fā)微信小程序主包太大和vendor.js過大無法打包問題解決
- uniapp微信小程序axios庫的封裝及使用詳細(xì)教程
- uniapp微信小程序授權(quán)登錄并獲取手機(jī)號的方法
- uniapp微信小程序多環(huán)境配置以及使用教程
- uniapp 微信小程序之金額展示套餐
相關(guān)文章
JavaScript中通用的jquery動畫滾屏實(shí)例
這篇文章主要介紹了JavaScript中通用的jquery動畫滾屏實(shí)例,本文通過實(shí)際代碼來詳解實(shí)現(xiàn)方法,需要的朋友可以參考一下2022-07-07JavaScrip實(shí)現(xiàn)一個有時間限制的緩存類的方式
本文將探索 JavaScript 中一種基于自動過期機(jī)制的時間限制緩存實(shí)現(xiàn)方式,提高數(shù)據(jù)緩存策略的靈活性和效率,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01js動態(tài)設(shè)置select下拉菜單的默認(rèn)選中項(xiàng)實(shí)例
今天小編就為大家分享一篇js動態(tài)設(shè)置select下拉菜單的默認(rèn)選中項(xiàng)實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08JavaScript監(jiān)測ActiveX控件是否已經(jīng)安裝過的代碼
這是通用的方法,只需要把唯一的Activex的clsid和任意一個屬性或方法名傳進(jìn)來就可以判斷了。(找了兩個小時才找到 -_-!)2008-09-09JavaScript獲得當(dāng)前網(wǎng)頁來源頁面(即上一頁)的方法
這篇文章主要介紹了JavaScript獲得當(dāng)前網(wǎng)頁來源頁面(即上一頁)的方法,涉及javascript中document.referrer方法的使用技巧,需要的朋友可以參考下2015-04-04JavaScript時間與時間戳的轉(zhuǎn)換操作實(shí)例分析
這篇文章主要介紹了JavaScript時間與時間戳的轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了javascript日期與時間戳轉(zhuǎn)換相關(guān)函數(shù)與操作技巧,需要的朋友可以參考下2018-12-12JavaScript實(shí)現(xiàn)頁面截圖3種解決方案
網(wǎng)頁截圖是指將網(wǎng)頁上的內(nèi)容截取下來,并保存為圖片的過程,下面這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)頁面截圖的3種解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06手把手教會你用Javascript實(shí)現(xiàn)放大鏡效果(詳細(xì)注釋+完整代碼)
放大鏡可以說是前端人必須學(xué)會的程序之一,下面這篇文章主要給大家介紹了關(guān)于手把手教會你用Javascript實(shí)現(xiàn)放大鏡效果的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03JavaScript省市區(qū)三級聯(lián)動菜單效果
這篇文章主要為大家詳細(xì)介紹了JavaScript省市區(qū)三級聯(lián)動菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09