官方文檔:
小程序前端:點擊進入
小程序服務(wù)端:點擊進入
一,代碼實現(xiàn)(后端)
①定義實體類
package com.saic.fin.system.sendInfo;
import lombok.Data;
import java.util.Map;
@Data
public class WxMsgVo {
private String touser;//用戶openId
private String template_id;//模版id
private Map<String , TemplateData> data;//推送文字
private String page="pages/index/index";//跳轉(zhuǎn)路徑 ,默認跳轉(zhuǎn)到小程序首頁
}
package com.saic.fin.system.sendInfo;
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;
}
}
②定義HttpUtil類(Get請求)
package com.saic.fin.system.util;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpUtil {
public static final String APPID = "";//小程序APPID(小程序ID)
public static final String APPSECRET = "";//小程序APPSECRET(小程序秘鑰)
public static JSONObject doGetJson(String URL) throws IOException {
JSONObject jsonObject = null;
HttpURLConnection conn = null;
InputStream is = null;
BufferedReader br = null;
StringBuilder result = new StringBuilder();
try {
//創(chuàng)建遠程url連接對象
URL url = new URL(URL);
//通過遠程url連接對象打開一個連接,強轉(zhuǎn)成HTTPURLConnection類
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
//設(shè)置連接超時時間和讀取超時時間
conn.setConnectTimeout(15000);
conn.setReadTimeout(60000);
conn.setRequestProperty("Accept", "application/json");
//發(fā)送請求
conn.connect();
//通過conn取得輸入流,并使用Reader讀取
if (200 == conn.getResponseCode()) {
is = conn.getInputStream();
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
result.append(line);
System.out.println(line);
}
} else {
System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
if (is != null) {
is.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
conn.disconnect();
}
jsonObject = JSONObject.parseObject(result.toString());
return jsonObject;
}
}
③驗證token過期時間
package com.saic.fin.system.OfficialAccounts;
import lombok.Data;
@Data
public class AccessToken {
private String accessToken;
//過期時間 當(dāng)前系統(tǒng)時間+微信傳來的過期時間
private Long expiresTime;
public AccessToken(String accessToken, String expiresIn) {
this.accessToken = accessToken;
this.expiresTime = System.currentTimeMillis()+Integer.parseInt(expiresIn)*1000;
}
/**
* 判斷token是否過期
* @return
*/
public boolean isExpired(){
return System.currentTimeMillis()>expiresTime;
}
}
④小程序發(fā)送消息文章來源:http://www.zghlxwxcb.cn/news/detail-631046.html
package com.saic.fin.system.sendInfo;
import com.alibaba.fastjson.JSONObject;
import com.saic.fin.system.OfficialAccounts.AccessToken;
import com.saic.fin.system.util.AuthUtil;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
/**
* 發(fā)送小程序訂閱消息
*/
public class SendWxMessage {
public static final String APP_ACCESS_TOKEN_URL= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+HttpUtil.APPID+"&secret="+HttpUtil.APPSECRET;
private static AccessToken at;
public static String push(String openid) {
RestTemplate restTemplate = new RestTemplate();
String accessToken = getToken();
//這里簡單起見我們每次都獲取最新的access_token(時間開發(fā)中,應(yīng)該在access_token快過期時再重新獲取)
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
//拼接推送的模版
WxMsgVo wxMsgVo = new WxMsgVo();
wxMsgVo.setTouser(openid);//用戶的openid(要發(fā)送給那個用戶)
wxMsgVo.setTemplate_id("CFeSWarQLMPyPjwmiy6AV4eB-IZcipu48V8bFLkBzTU");//訂閱消息模板id
wxMsgVo.setPage("pages/index/index");
Map<String, TemplateData> m = new HashMap<>(3);
m.put("thing1", new TemplateData("課程"));
m.put("thing6", new TemplateData("大學(xué)"));
m.put("thing7", new TemplateData("一節(jié)"));
wxMsgVo.setData(m);
ResponseEntity<String> responseEntity =
restTemplate.postForEntity(url, wxMsgVo, String.class);
return responseEntity.getBody();
}
public static String getToken(){
if (at == null || at.isExpired()){
getAccessToken();
}
return at.getAccessToken();
}
/**
* 獲取token
*/
private static void getAccessToken() {
//發(fā)送請求獲取token
JSONObject token = null;
try {
token = AuthUtil.doGetJson(APP_ACCESS_TOKEN_URL);
} catch (Exception e) {
e.printStackTrace();
}
JSONObject jsonObject = token;
String accessToken = (String) jsonObject.get("access_token");
Integer expiresIn = (Integer) jsonObject.get("expires_in");
//創(chuàng)建token對象,并存儲
at = new AccessToken(accessToken,String.valueOf(expiresIn));
}
}
AuthUtil工具類文章來源地址http://www.zghlxwxcb.cn/news/detail-631046.html
package com.saic.fin.system.util;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 微信授權(quán)登錄調(diào)用Util
*/
public class AuthUtil {
public static final String APPID = "xxxxxx";//小程序APPID(小程序ID)
public static final String APPSECRET = "xxxxxxxxxxx";//小程序APPSECRET(小程序秘鑰)
public static JSONObject doGetJson(String URL) throws IOException {
JSONObject jsonObject = null;
HttpURLConnection conn = null;
InputStream is = null;
BufferedReader br = null;
StringBuilder result = new StringBuilder();
try {
//創(chuàng)建遠程url連接對象
URL url = new URL(URL);
//通過遠程url連接對象打開一個連接,強轉(zhuǎn)成HTTPURLConnection類
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
//設(shè)置連接超時時間和讀取超時時間
conn.setConnectTimeout(15000);
conn.setReadTimeout(60000);
conn.setRequestProperty("Accept", "application/json");
//發(fā)送請求
conn.connect();
//通過conn取得輸入流,并使用Reader讀取
if (200 == conn.getResponseCode()) {
is = conn.getInputStream();
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
result.append(line);
System.out.println(line);
}
} else {
System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
if (is != null) {
is.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
conn.disconnect();
}
jsonObject = JSONObject.parseObject(result.toString());
return jsonObject;
}
}
到了這里,關(guān)于微信小程序訂閱消息推送(附帶后臺java代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!