小程式訂閱訊息推送(含原始碼)java實現小程式推送,springboo
前面寫過一篇雲開發實現小程式訂閱訊息(模板訊息)推送的文章,是有好多同學用的是Java寫後臺,所以今天就再來寫一篇Java後臺實現小程式訂閱訊息推送的文章。
老規矩先看效果圖
至於如何建立模板訊息,如果獲取模板id我這節就不再講解,不知道的同學可以檢視我上篇文章裡面有詳細的講解。
今天呢就來重點講下如何在Java後臺編寫小程式訂閱訊息推送的知識。
其實我很早之前有寫過一篇Java實現模板訊息推送的,但是小程式後面用訂閱訊息替換了模板推送,所以我也會根據最新的知識點不定期的更新文章的。
傳送訂閱訊息三步走
- 1,拿到使用者的openid
- 2,獲取access_token
- 3,呼叫小程式訊息推送的介面
一,獲取使用者的openid
關於使用者openid的獲取,我寫過很多篇文章了,也有錄過影片出來的,還不知道怎麼獲取的同學,可以取翻看下我之前的文章,或者看下我錄製的零基礎入門小程式的影片: 所以這一步不是今天的重點。
二,獲取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");//訂閱訊息模板id
wxMssVo.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用來封裝請求官方介面的引數
package com.qcl.demo;
import java.util.Map;
/*
* 小程式推送所需資料
* 程式設計小石頭
* */
public class WxMssVo {
private String touser;//使用者openid
private String template_id;//訂閱訊息模版id
private String page = "pages/index/index";//預設跳到小程式首頁
private Map<String, TemplateData> data;//推送文字
public String getTouser() {
return touser;
}
public void setTouser(String touser) {
this.touser = touser;
}
public String getTemplate_id() {
return template_id;
}
public void setTemplate_id(String template_id) {
this.template_id = template_id;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public Map<String, TemplateData> getData() {
return data;
}
public void setData(Map<String, TemplateData> data) {
this.data = data;
}
}
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和小程式相關的文章出來,敬請期待
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2558/viewspace-2824687/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 小程式訊息推送訂閱
- 5行程式碼實現微信小程式模版訊息推送 (含推送後臺和小程式原始碼)行程微信小程式原始碼
- 使用Java接入小程式訂閱訊息!Java
- uni-app小程式訊息推送APP
- 小程式傳送訂閱訊息
- 訊息推送介面設計(內含原始碼)原始碼
- 用 Laravel 自帶訊息模組搭建小程式實時推送訊息Laravel
- 你知道如何在小程式中推送模板訊息?
- APP訊息推送 極光推送 示例程式碼APP
- 想要更精準的小程式模版訊息推送?我們來幫你實現
- 小程式長期訂閱訊息的支援問題
- 手把手帶你接入小程式訂閱訊息
- workerman 實現訊息推送
- 微信小程式模板訊息還能群發?無限制推送?微信小程式
- Flutter websocket 實現訊息推送FlutterWeb
- 微信小程式服務推送微信小程式
- 乾貨:如何藉助小程式雲開發實現小程式支付功能(含原始碼)原始碼
- PHP與反ajax推送,實現的訊息實時推送功能PHP
- 微信小程式訂閱微信小程式
- 個推支援小程式訊息推送,助力開發者實現使用者高觸達、高轉化
- [填坑手冊]小程式新版訂閱訊息+雲開發實戰與跳坑
- 實時訊息推送整理
- 未讀訊息(小紅點),前端與 RabbitMQ實時訊息推送實踐,賊簡單~前端MQ
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- Knative 實戰:基於 Kafka 實現訊息推送Kafka
- 小程式客服訊息
- 小程式 模版訊息
- gitlab 推送程式碼Gitlab
- Redis 訂閱 + swoole_websocket 推送RedisWeb
- 實時訊息推送方案-SSE
- 如何用 Redis 做實時訂閱推送的?Redis
- Redis實現訊息釋出訂閱Redis
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- java實現 微信公眾號推送訊息 ,cv 就可執行!!!Java
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 微信小程式+mqtt.js實現實時接收訊息微信小程式MQQTJS
- WebSocket 實現伺服器訊息推送客戶端Web伺服器客戶端
- 微信小程式 傳送模板訊息的功能實現微信小程式