in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...
老規矩先看效果圖
至于如何創建模板消息,如果獲取模板id我這節就不再講解,不知道的同學可以查看我上篇文章《借助云開發實現小程序訂閱消息和模板消息的推送功能》里面有詳細的講解。
今天呢就來重點講下如何在Java后臺編寫小程序訂閱消息推送的知識。
其實我很早之前有寫過一篇Java實現模板消息推送的,但是小程序后面用訂閱消息替換了模板推送,所以我也會根據最新的知識點不定期的更新文章的。
發送訂閱消息三步走
- 1,拿到用戶的openid
- 2,獲取access_token
- 3,調用小程序消息推送的接口
一,獲取用戶的openid
關于用戶openid的獲取,我寫過很多篇文章了,也有錄過視頻出來的,還不知道怎么獲取的同學,可以取翻看下我之前的文章,或者看下我錄制的零基礎入門小程序的視頻:《5小時零基礎入門小程序云開發》 所以這一步不是今天的重點。
二,獲取access_token
首先來看下access_token是什么,下圖是官方給出的
其實通俗的講,access_token就是小程序官方給我們提供的一個憑證,你要調用小程序官方的接口,就必須先拿到access_token。所以下面先講下如果獲取access_token
- 看下官方文檔,可以知道我們需要用到下面的幾個參數
grant_type是一個固定的值,只有appid和secret是需要我們填入的,這兩個值在我們的小程序后臺就可以拿到,我也有錄視頻教大家如何拿到,如果不知道怎么獲取的同學可以取看下我的視頻。
下面就是Java代碼的編寫了
我們這里用的是springboot,這里涉及到一個請求小程序官方接口,所以我們這里用了springboot自帶的RestTemplate來做網絡請求。具體代碼如下。
可以看出代碼很簡單,就是用RestTemplate來實現一個get請求,這樣我們就可以輕松的獲取到了access_token。
注意點
關于這個access_token,是存在有效期的,來看下官方給出的提示
所以我要在獲取到access_token的時候,把access_token存到數據庫,或者存到本地緩存,并且還要記錄當前時間,后面再用的時候先判斷這個access_token有沒有超過2個小時,如果超過2個小時的話,就要重新獲取了。由于這里不是本節的重點,我這里只給大家說下原理。
三,發送消息到小程序
我們通過上面第二步,成功的獲取到了access_token。下面就要調用小程序官方為我們提供的發送消息的接口了。先看下官方文檔。
上面的參數都是我們發送消息時需要的。這些參數的定義和設置我在前面的文章里也都講過了,不知道的同學可以去看下我前面寫的這篇文章 《借助云開發實現小程序訂閱消息和模板消息的推送功能》
這里需要注意的一點是,我們要給用戶發送消息,就必須引導用戶授權,就是下面這個圖
因為用戶不點擊允許,你是沒有辦法給用戶推送消息的。每一次授權只允許發送一條消息,所以如果你想盡量多的發送消息,就得盡量多的引導用戶授權。
推送的Java代碼如下
可以看到,我們這里需要定義用戶的openid,模板id,跳轉路徑,模板消息內容。。。
這些都定義好以后,我們就可以提供一個服務給到Java的其他代碼調用,或者提供一個接口供外界傳入openid,然后給對應的用戶推送消息了。
我們在瀏覽器里調用上面接口,可以看到下圖所示,這樣就代表我們消息推送成功了。
下面我把完整的代碼貼出來給到大家。
package com.qcl.demo;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*** 作者:編程小石頭* 發送小程序訂閱消息*/ @RestController public class SendWxMessage {/** 發送訂閱消息* */@GetMapping("/pushOneUser")public String pushOneUser() {return push("o3DoL0WEdzcJ20AVJg1crP96gbjM");}public String push(String openid) {RestTemplate restTemplate = new RestTemplate();//這里簡單起見我們每次都獲取最新的access_token(時間開發中,應該在access_token快過期時再重新獲取)String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken();//拼接推送的模版WxMssVo wxMssVo = new WxMssVo();wxMssVo.setTouser(openid);//用戶的openid(要發送給那個用戶,通常這里應該動態傳進來的)wxMssVo.setTemplate_id("CFeSWarQLMPyPjwmiy6AV4eB-IZcipu48V8bFLkBzTU");//訂閱消息模板idwxMssVo.setPage("pages/index/index");Map<String, TemplateData> m = new HashMap<>(3);m.put("thing1", new TemplateData("小程序入門課程"));m.put("thing6", new TemplateData("杭州浙江大學"));m.put("thing7", new TemplateData("第一章第一節"));wxMssVo.setData(m);ResponseEntity<String> responseEntity =restTemplate.postForEntity(url, wxMssVo, String.class);return responseEntity.getBody();}@GetMapping("/getAccessToken")public String getAccessToken() {RestTemplate restTemplate = new RestTemplate();Map<String, String> params = new HashMap<>();params.put("APPID", "wx7c54942dfc87f4d8"); //params.put("APPSECRET", "5873a729c365b65ab42bb5fc82d2ed49"); //ResponseEntity<String> responseEntity = restTemplate.getForEntity("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params);String body = responseEntity.getBody();JSONObject object = JSON.parseObject(body);String Access_Token = object.getString("access_token");String expires_in = object.getString("expires_in");System.out.println("有效時長expires_in:" + expires_in);return Access_Token;} }對應的兩個數據類如下
WxMssVo用來封裝請求官方接口的參數
TemplateData 用來定義消息的內容
package com.qcl.demo;public class TemplateData {private String value;//public TemplateData(String value) {this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;} }到這里我們就可以完整的實現Java發送小程序消息的功能了。完整代碼也已經貼給大家了。
后面我會寫更多Java和小程序相關的文章出來,敬請期待
總結
以上是生活随笔為你收集整理的in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: csv java web 导入_DAY5
- 下一篇: 非此即彼的逻辑错误_MBA逻辑攻略逻辑知