小程式怎麼給使用者推送訊息

往小程式能傳送訊息嗎?答案肯定是能的。

開通訊息傳送功能

進入微信公眾平臺,設定,開通小程式訊息傳送許可權

配置訊息傳送模板

微信公眾平臺有三種訊息推送方式

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('接受了訊息推送');            }else if(moIdState === 'reject'){              console.log("拒絕訊息推送");            }else if(moIdState === 'ban'){              console.log("已被後臺封禁");            }          }else {            // 當使用者沒有點選 ’總是保持以上選擇,不再詢問‘  按鈕。那每次執到這都會拉起授權彈窗            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/sendOneUser/{openId}',                        method: 'post',                        data: {                                                  }                      })                    },                    fail (er){                      console.log("訂閱訊息 失敗 ");                      console.log(er);                    }                  })                                             }              }            })          }        }else {          console.log('訂閱訊息未開啟')        }            },      fail: function(error){        console.log(error);      },    })  },

第二步, 使用者授權允許後,呼叫後臺java介面,生成訊息內容,傳送到微信平臺,並通知小程式使用者。

    RestTemplate restTemplate = new RestTemplate();        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" getAccesToken();        WxMssVo msgVo = new WxMssVo();        msgVo.setTouser(openId);        msgVo.setTemplate_id(template_id);        msgVo.setPage("pages/index/index");        Mapm = 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.setData(m);        log.debug("msg content: {}", msgVo);        ResponseEntityresponseEntity = restTemplate.postForEntity(url, msgVo, String.class);        String resMsg = responseEntity.getBody();        log.info("get Message Result:  {}", resMsg);        return resMsg;

只要小程式端允許獲取訊息,並呼叫上邊介面,根據微信使用者的openId,傳送到小程式使用者,即可成功。

第三步,展示效果

   

圖3

大功告成,往小程式上傳送訊息成功。

注意的問題

訊息模板定義,除非你是學校等公立的機構主體,才能訂購長期訂閱的模板,其他只能訂購一次性模板。

   

圖4

第二個問題,在往微信平臺傳送訊息內容時,需注意傳送的內容有限制,否則會被校驗出來,提示各種invalide date, invalide name等,無法傳送,需按照下邊注意一下即可。

   

圖5

好了,基本就這些。