往小程序能發送消息嗎?答案肯定是能的。
開通消息發送功能進入微信公眾平臺,設置,開通小程序消息發送權限
配置消息發送模板微信公眾平臺有三種消息推送方式
1、 開發者服務器接收消息推送
2、 云函數接收消息推送
3、微信云托管服務接收消息推送。
現在我們要看的是第一種。開發者服務器接收消息推送
開發者服務器接收消息推送消息能力是小程序重要組成部分,我們為開發者提供了訂閱消息的能力,以便實現服務的閉環和更優的體驗。
訂閱消息推送位置: 服務通知
訂閱消息下發條件: 用戶自主訂閱
訂閱消息卡片跳轉能力: 點擊查看詳情或可跳轉到小程序的頁面
1、 先定義一個消息模板。
如下圖,在微信公眾平臺訂閱一個消息模板,用來定義消息的格式。我已經訂閱成功了一個,具體步驟,可自行百度。
圖1
2、獲取小程序用戶的openId
過程略,可百度
3、獲取access_token.
access_token 是小程序全局唯一的后臺接口調用憑據,調用大多數后臺接口時都需使用。開發者可以通過getAccessToken接口獲取并進行妥善保存。
為了access_token的安全性,后端API不能直接在小程序內通過wx.request調用,即api.weixin.qq.com不能被配置為服務器域名。開發者應在后端服務器使用getAccessToken獲取access_token.
過程略
上邊條件具備之后,開始整理發送消息到小程序上的內容
發送消息到小程序下面就要調用小程序官方提供的發送消息的接口了。先看一下官方文檔
圖2
第一步,要引導用戶授權,能夠允許接收消息, 如圖1.
下邊是彈出授權消息的小程序代碼
confirmMsg: function(e){ wx.getSetting({ withSubscriptions: true, // 這里設置為true,下面才會返回mainSwitch success: function(res){ let tmplIds = 'UblTSmgV_clnIbj5JT6tkbkFDCDSWHtX-dGazbtf9DE' // 調起授權界面彈窗 if (res.subscriptionsSetting.mainSwitch) { // 用戶打開了訂閱消息總開關 if (res.subscriptionsSetting.itemSettings != null) { // 用戶同意總是保持是否推送消息的選擇, 這里表示以后不會再拉起推送消息的授權 let moIdState = res.subscriptionsSetting.itemSettings[tmplIds]; // 用戶同意的消息模板id if(moIdState === 'accept'){ console.log('接受了消息推送'); }el if(moIdState === 'reject'){ console.log("拒絕消息推送"); }el if(moIdState === 'ban'){ console.log("已被后臺封禁"); } }el { // 當用戶沒有點擊 ’總是保持以上選擇,不再詢問‘ 按鈕。那每次執到這都會拉起授權彈窗 wx.showModal({ title: '提示', content:'請授權開通服務通知', showCancel: true, success: function (ress) { if (ress.confirm) { wx.requestSubscribeMessage({ // 調起消息訂閱界面 tmplIds: [tmplIds], success (res) { wx.request({ url: 'http://localhost:9090/pro_api/test/ndOneUr/{openId}', method: 'post', data: { } }) }, fail (er){ console.log("訂閱消息 失敗 "); console.log(er); } }) } } }) } }el { console.log('訂閱消息未開啟') } }, fail: function(error){ console.log(error); }, }) },
第二步, 用戶授權允許后,調用后臺java接口,生成消息內容,發送到微信平臺,并通知小程序用戶。
RestTemplate restTemplate = new RestTemplate(); String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/nd?access_token="+getAccesToken(); WxMssVo msgVo = new WxMssVo(); msgVo.tTour(openId); msgVo.tTemplate_id(template_id); msgVo.tPage("pages/index/index"); Map<String, TemplateData> m = new HashMap<>(); m.put("thing1", new TemplateData("title content")); m.put("name4", new TemplateData("杭州")); m.put("date3", new TemplateData("2022年11月22日")); m.put("thing2", new TemplateData("content1")); m.put("thing8", new TemplateData("content2")); msgVo.tData(m); log.debug("msg content: {}", msgVo); ResponEntity<String> responEntity = restTemplate.postForEntity(url, msgVo, String.class); String resMsg = responEntity.getBody(); log.info("get Message Result: {}", resMsg); return resMsg;
只要小程序端允許獲取消息,并調用上邊接口,根據微信用戶的openId,發送到小程序用戶,即可成功。
第三步,展示效果
圖3
大功告成,往小程序上發送消息成功。
注意的問題消息模板定義,除非你是學校等公立的機構主體,才能訂購長期訂閱的模板,其他只能訂購一次性模板。
圖4
第二個問題,在往微信平臺發送消息內容時,需注意發送的內容有限制,否則會被校驗出來,提示各種invalide date, invalide name等,無法發送,需按照下邊注意一下即可。
圖5
好了,基本就這些。
本文發布于:2023-02-28 20:03:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167765278477785.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:微信云托管(微信云托管費用).doc
本文 PDF 下載地址:微信云托管(微信云托管費用).pdf
| 留言與評論(共有 0 條評論) |