知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序推送功能最新版本(推送到服務(wù)通知java+微信小程序代碼塊)
發(fā)表時(shí)間:2020-9-29
發(fā)布人:葵宇科技
瀏覽次數(shù):288
微信小程序的消息推送簡(jiǎn)單的說就是發(fā)送一條微信通知給用戶,用戶點(diǎn)開消息可以查看消息內(nèi)容,可以鏈接進(jìn)入到小程序的指定頁(yè)面。
一、準(zhǔn)備工作
首先,在微信公眾平臺(tái)開通消息推送功能,并添加消息模板??梢詮哪0鍘?kù)選擇模板也可以創(chuàng)建一個(gè)模板,模板添加之后,模板ID我們接下來要用的。
然后拿到小程序的APPID和秘鑰
二~打開微信開發(fā)工具
加一個(gè)按鈕就可以,用這個(gè)按鈕去觸發(fā)這個(gè)函數(shù)方法
,//記得添加逗號(hào)哦。
sendDYMsg: function(e) {
wx.requestSubscribeMessage({
tmplIds: ['ooaZWfK6liHpqDAcnR2hgObdQuh2JqQP2Z_UR6vvraU'],
success(res) {
console.log("可以給用戶推送一條中獎(jiǎng)通知了。。。");
}
})
}
tmplIds是你小程序的模板id,觸發(fā)這個(gè)函數(shù)會(huì)彈出下面的方框
三、服務(wù)端(java)代碼開發(fā):
1、老規(guī)矩先查看官網(wǎng)騰訊api文檔:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
2、給大家介紹一個(gè)關(guān)于微信開發(fā)的工具類(個(gè)人感覺非常優(yōu)秀,可以自己去看看。):
git地址:https://github.com/Wechat-Group/WxJava
小程序文檔地址:http://binary.ac.cn/weixin-java-miniapp-javadoc/
3.集成pom文件:
<!-- 小程序開發(fā)包-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.21</version>
</dependency>
4.根據(jù)code獲取openid:
code:(重點(diǎn))只能使用一次,并且只有5分鐘有效期。
/*
獲取openid
*/
private static String getOpenid(String code){
//臨時(shí)登錄憑證
String URL = "https://api.weixin.qq.com/sns/jscode2session?appid="+APPID1+"&secret="+AppSecret1+"&js_code="+code+"&grant_type=authorization_code";
String openId=interfaceUtil(URL, "");
return openId;
};
這個(gè)openid必須是小程序的openid其他的openid不可以
5.最終環(huán)節(jié)進(jìn)行小程序訂閱消息推送
訂閱消息傳參和模板消息是不一樣的,需要根據(jù)人家規(guī)則進(jìn)行填寫,加了正則校驗(yàn)了
推送代碼
/**
* 微信小程序推送訂閱消息
* create By KingYiFan>@GetMapping(value = "/messagePush")
@ResponseBody
public Object sendDYTemplateMessage(String openId) throws Exception {
System.err.println("openId:"+openId);
wxsmallTemplate tem = new wxsmallTemplate();
//跳轉(zhuǎn)小程序頁(yè)面路徑
tem.setPage("pages/index/index");
//模板消息id
tem.setTemplate_id("-UBAuupYlK2RAbxYvhk6UvK48ujQD72RpEOdkF-sJ2s");
//給誰(shuí)推送 用戶的openid (可以調(diào)用根據(jù)code換openid接口)
tem.setToUser(openId);
//==========================================創(chuàng)建一個(gè)參數(shù)集合========================================================
List<wxsmallTemplateParam> paras = new ArrayList<wxsmallTemplateParam>();
//這個(gè)是滿參構(gòu)造 keyword1代表的第一個(gè)提示 紅包已到賬這是提示 #DC143C這是色值不過廢棄了
wxsmallTemplateParam templateParam = new wxsmallTemplateParam(
"thing2", "紅包已到賬", "#DC143C");
paras.add(templateParam);
paras.add(new wxsmallTemplateParam("phrase3", "劉騫", ""));
tem.setData(paras);
//模板需要放大的關(guān)鍵詞,不填則默認(rèn)無(wú)放大
tem.setToken(getAccessToken());
//=========================================封裝參數(shù)集合完畢========================================================
try {
//進(jìn)行推送
//獲取微信小程序配置:
if(sendTemplateMsg1(getAccess_token(APPID1,AppSecret1), tem)){
return "推送成功";
}else{
JSONObject jsonObject = new JSONObject(); //返回JSON格式數(shù)據(jù)
jsonObject.put("buTie",tem);
return jsonObject;
}
} catch (Exception e) {
e.printStackTrace();
}
return "推送失敗";
}
public static boolean sendTemplateMsg1(String token,wxsmallTemplate template) {
System.err.println("token:"+token);
boolean flag = false;
String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN";
// String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
requestUrl = requestUrl.replace("ACCESS_TOKEN", token);
JSONObject jsonResult =JSON.parseObject(post(JSON.parseObject(template.toJSON()) ,requestUrl)) ;
if (jsonResult != null) {
Integer errorCode = jsonResult.getInteger("errcode");
String errorMessage = jsonResult.getString("errmsg");
if (errorCode == 0) {
flag = true;
} else {
System.out.println("模板消息發(fā)送失敗:" + errorCode + "," + errorMessage);
flag = false;
}
}
return flag;
}
public String getAccess_token(String appid, String appsecret) {
String url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appsecret;
// https://api.weixin.qq.com/cgi-bin/token.
JSONObject jsonObject = doGet1(url);
System.out.println(jsonObject.toString());
String errCode = jsonObject.getString("expires_in");
if (!StringUtils.isEmpty(errCode) && !StringUtils.isEmpty(jsonObject.getString("access_token").toString())) {
String token = jsonObject.get("access_token").toString();
return token;
} else {
return null;
}
}
public static JSONObject doGet1(String url) {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
JSONObject jsonObject = null;
try {
HttpResponse httpResponse = client.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
String result = EntityUtils.toString(entity, "UTF-8");
jsonObject = JSONObject.parseObject(result);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 釋放連接
httpGet.releaseConnection();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return jsonObject;
}
//post請(qǐng)求
public static String post(JSONObject json,String URL) {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
post.setHeader("Content-Type", "application/json");
post.addHeader("Authorization", "Basic YWRtaW46");
String result = "";
try {
StringEntity s = new StringEntity(json.toString(), "utf-8");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
post.setEntity(s);
// 發(fā)送請(qǐng)求
HttpResponse httpResponse = client.execute(post);
// 獲取響應(yīng)輸入流
InputStream inStream = httpResponse.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
inStream, "utf-8"));
StringBuilder strber = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
strber.append(line + "\n");
inStream.close();
result = strber.toString();
System.out.println(result);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
System.out.println("請(qǐng)求服務(wù)器成功,做相應(yīng)處理");
} else {
System.out.println("請(qǐng)求服務(wù)端失敗");
}
} catch (Exception e) {
System.out.println("請(qǐng)求異常");
throw new RuntimeException(e);
}
return result;
}
到現(xiàn)在微信小程序訂閱消息推送就到此結(jié)束了,是不是超級(jí)簡(jiǎn)單那種。
給大家分享一個(gè),只給用戶提示一次,下次就不用提示就可以一直發(fā)送通知的方案: 微信設(shè)置了總是保持以上選擇,不在詢問按鈕,只要把這對(duì)勾給點(diǎn)擊上。下次點(diǎn)擊通知函數(shù),就不會(huì)給用戶提示哦。 我給點(diǎn)擊了按鈕,到現(xiàn)在我都沒找到從哪能開啟這個(gè)提示。
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)案例
- 云南建設(shè)廳網(wǎng)站
- 政府網(wǎng)站建設(shè)服務(wù)
- 網(wǎng)站建設(shè)需要多少錢
- 海南小程序制作公司
- 云南網(wǎng)站建設(shè)外包
- 北京小程序開發(fā)
- 小程序開發(fā)聯(lián)系方式
- 網(wǎng)站小程序
- 云南網(wǎng)站優(yōu)化公司
- 小程序技術(shù)
- 網(wǎng)站制作哪家好
- 小程序開發(fā)費(fèi)用
- 云南微信小程序開發(fā)
- 支付寶小程序被騙
- 服務(wù)器
- 小程序被騙退款成功
- 報(bào)廢車拆解回收管理系統(tǒng)
- python開發(fā)小程序
- 小程序模板開發(fā)公司
- 網(wǎng)站建設(shè)開發(fā)
- 云南小程序商城
- 昆明小程序哪家好
- 百度小程序
- 網(wǎng)絡(luò)公司聯(lián)系方式
- 云南etc小程序
- 網(wǎng)站收錄
- 楚雄網(wǎng)站建設(shè)公司
- 網(wǎng)站建設(shè)制作
- 百度小程序公司