uniapp微信小程序消息訂閱快速上手

一、微信公眾平臺小程序開通消息訂閱并設置模板

在這里插入圖片描述

這邊的模板id和詳細內容后續前后端需要使用

二、uniapp前端

需要是一個button觸發
js:

wx.getSetting({success(res){console.log(res)if(res.authSetting['scope.subscribeMessage']){// 業務邏輯}else{uni.requestSubscribeMessage({tmplIds: [_config.TEMPLATE_ID],success (res) {console.log("訂閱成功!")// 業務邏輯},fail(res) {// 即使用戶拒絕訂閱也要繼續原來的業務邏輯}})}}
})

三、java后端

@Component
@Slf4j
public class WxAccessTokenUtil {@Value("${WX_APPID}")String APP_ID;@Value("${WX_SECREAT}")String SECREAT;@Value("${WX_TEMPLATE_ID}")String TEMPLATE_ID;public String getWxAccessToken(){String res = HttpClient.doGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APP_ID+"&secret="+SECREAT);JSONObject jsonObject = JSON.parseObject(res);return jsonObject.getString("access_token");}public void sendReservationSubscribeMsg(String touser,String id,String apparatusName,String state){String token = getWxAccessToken();JSONObject jsonObject2 = new JSONObject();jsonObject2.put("access_token",token);jsonObject2.put("touser",touser);jsonObject2.put("template_id",TEMPLATE_ID);jsonObject2.put("page","/pages/appointment_detail/appointment_detail?id="+id);JSONObject data = new JSONObject();JSONObject thing2 = new JSONObject();thing2.put("value",apparatusName);data.put("thing2",thing2);JSONObject phrase3 = new JSONObject();phrase3.put("value",state);data.put("phrase3",phrase3);jsonObject2.put("data",data);String res = HttpClient.doPost("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+token,jsonObject2.toString());log.warn("微信小程序訂閱消息:{}",res);}
}

其中thing2、phrase3是模板的字段名,根據自己模板去修改即可

HttpClient.java

public class HttpClient {public static void main(String[] args) {String APP_ID = "xxx";String SECREAT = "xxx";String res = HttpClient.doGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APP_ID+"&secret="+SECREAT);com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(res);String token = jsonObject.getString("access_token");JSONObject jsonObject2 = new JSONObject();jsonObject2.put("access_token",token);jsonObject2.put("touser","xxxxx");jsonObject2.put("template_id","xxxx");jsonObject2.put("page","/pages/tabbar/mine/mine");JSONObject data = new JSONObject();JSONObject phrase1 = new JSONObject();phrase1.put("value","待審核");data.put("phrase1",phrase1);JSONObject thing2 = new JSONObject();thing2.put("value","已成功提交預約申請,請耐心等待審核。");data.put("thing2",thing2);jsonObject2.put("data",data);jsonObject2.put("miniprogram_state","trial");System.out.println(HttpClient.doPost("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+token,jsonObject2.toString()));}public static String doGet(String httpurl) {HttpURLConnection connection = null;InputStream is = null;BufferedReader br = null;String result = null;// 返回結果字符串try {// 創建遠程url連接對象URL url = new URL(httpurl);// 通過遠程url連接對象打開一個連接,強轉成httpURLConnection類connection = (HttpURLConnection) url.openConnection();// 設置連接方式:getconnection.setRequestMethod("GET");// 設置連接主機服務器的超時時間:15000毫秒connection.setConnectTimeout(15000);// 設置讀取遠程返回的數據時間:60000毫秒connection.setReadTimeout(60000);// 發送請求connection.connect();// 通過connection連接,獲取輸入流if (connection.getResponseCode() == 200) {is = connection.getInputStream();// 封裝輸入流is,并指定字符集br = new BufferedReader(new InputStreamReader(is, "UTF-8"));// 存放數據StringBuffer sbf = new StringBuffer();String temp = null;while ((temp = br.readLine()) != null) {sbf.append(temp);sbf.append("\r\n");}result = sbf.toString();}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 關閉資源if (null != br) {try {br.close();} catch (IOException e) {e.printStackTrace();}}if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}connection.disconnect();// 關閉遠程連接}return result;}public static String doPost(String httpUrl, String param) {HttpURLConnection connection = null;InputStream is = null;OutputStream os = null;BufferedReader br = null;String result = null;try {URL url = new URL(httpUrl);// 通過遠程url連接對象打開連接connection = (HttpURLConnection) url.openConnection();// 設置連接請求方式connection.setRequestMethod("POST");// 設置連接主機服務器超時時間:15000毫秒connection.setConnectTimeout(15000);// 設置讀取主機服務器返回數據超時時間:60000毫秒connection.setReadTimeout(60000);// 默認值為:false,當向遠程服務器傳送數據/寫數據時,需要設置為trueconnection.setDoOutput(true);// 默認值為:true,當前向遠程服務讀取數據時,設置為true,該參數可有可無connection.setDoInput(true);// 設置傳入參數的格式:請求參數應該是 name1=value1&name2=value2 的形式。connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 設置鑒權信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");// 通過連接對象獲取一個輸出流os = connection.getOutputStream();// 通過輸出流對象將參數寫出去/傳輸出去,它是通過字節數組寫出的os.write(param.getBytes());// 通過連接對象獲取一個輸入流,向遠程讀取if (connection.getResponseCode() == 200) {is = connection.getInputStream();// 對輸入流對象進行包裝:charset根據工作項目組的要求來設置br = new BufferedReader(new InputStreamReader(is, "UTF-8"));StringBuffer sbf = new StringBuffer();String temp = null;// 循環遍歷一行一行讀取數據while ((temp = br.readLine()) != null) {sbf.append(temp);sbf.append("\r\n");}result = sbf.toString();}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 關閉資源if (null != br) {try {br.close();} catch (IOException e) {e.printStackTrace();}}if (null != os) {try {os.close();} catch (IOException e) {e.printStackTrace();}}if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}// 斷開與遠程地址url的連接connection.disconnect();}return result;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39738.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智安網絡|深入比較:Sass系統與源碼系統的差異及選擇指南

隨著前端開發的快速發展,開發人員需要使用更高效和靈活的工具來處理樣式表。在這個領域,Sass系統和源碼系統是兩個備受關注的選項。 Sass系統 Sass(Syntactically Awesome Style Sheets)是一種CSS預處理器,它擴展了CS…

CSS常見單位匯總

像素(px): 絕對單位,以屏幕上的實際像素為基準,最常用于具體的尺寸和位置表示。 百分比(%): 相對單位,基于父元素的屬性計算大小,如寬度、高度、邊距等。 自適…

@Param詳解

文章目錄 背景什么是ParamParam的使用方法使用方法:遇到的問題及因Param解決了什么問題使用與不使用對比 Param是如何進行映射的總結 背景 最近在開發過程中,在寫mapper接口是在參數前加了Param注解,但是在運行的時候就會報錯,說…

關于游戲盾

游戲盾(Game Shield)是一種針對游戲行業特點的網絡安全解決方案,主要針對游戲平臺面臨的各種網絡攻擊和安全威脅。以下是一些原因,說明為什么游戲平臺需要加游戲盾: 1. DDoS攻擊:游戲平臺通常容易受到分布式…

深入理解多態:面向對象編程中的靈活性與擴展性

文章目錄 代碼學習-多態什么是多態?多態在代碼中的體現多態的優勢 代碼學習-多態 什么是多態? 多態是面向對象編程中的重要概念之一,它指的是為不同的數據類型的實體提供統一的接口。簡而言之,就是同一個命令在不同的對象上會產…

更多openEuler鏡像加入AWS Marketplace!

自2023年7月openEuler 22.03 LTS SP1正式登陸AWS Marketplace后,openEuler社區一直持續于在AWS上提供更多版本。 目前,openEuler22.03 LTS SP1 ,SP2兩個版本及 x86 arm64兩種架構的四個鏡像均可通過AWS對外提供,且在亞太及歐洲15個Region開放…

wkhtmltopdf 與 .Net Core

wkhtmltopdf 是使用webkit引擎轉化為pdf的開源小插件. 其有.NET CORE版本的組件,DinkToPdf,但該控件對跨平臺支持有限。 故打算在Linux上安裝相關插件直接調用. 準備工作 虛擬機:Linux version 3.10.0-1160.el7.x86_64 wkhtmltox開發包:wkhtmltox_0.12…

Caused by: java.lang.ClassNotFoundException: net.sf.cglib.proxy.MethodProxy

1. 異常信息 2023-08-16 14:17:14.817 INFO 14304 [ restartedMain] io.seata.config.ConfigurationFactory : load Configuration:FileConfiguration$$EnhancerByCGLIB$$862af1eb 2023-08-16 14:17:15.006 ERROR 14304 [ restartedMain] g.springframework.boot.Sprin…

大數據Flink(六十):Flink 數據流和分層 API介紹

文章目錄 Flink 數據流和分層 API介紹 一、??????????????Flink 數據流

ZooKeeper的應用場景(命名服務、分布式協調通知)

3 命名服務 命名服務(NameService)也是分布式系統中比較常見的一類場景,在《Java網絡高級編程》一書中提到,命名服務是分布式系統最基本的公共服務之一。在分布式系統中,被命名的實體通常可以是集群中的機器、提供的服務地址或遠程對象等一這…

iOS申請證書(.p12)和描述文件(.mobileprovision)

打包app時,經常會用到ios證書,但很多人都苦于沒有蘋果電腦,即使有蘋果電腦的,也會覺得蘋果電腦操作也很麻煩,這里記錄一下,用香蕉云編,申請證書及描述文件的過程。 香蕉云編的地址:…

【C語言】每日一題(多數元素)

多數元素,鏈接奉上 方法 1.摩爾投票2.合理但錯誤的方法2.1暴力循環2.2排序求出中間元素中間元素 1.摩爾投票 先來簡單的介紹摩爾投票: 摩爾投票是一種用來解決絕對眾數問題的算法。 什么是絕對眾數呢? 在一個集合中,如果一個元素…

[國產MCU]-BL602開發實例-SPI與WS2812B驅動

SPI與WS2812B驅動 文章目錄 SPI與WS2812B驅動1、BL602的SPI介紹2、SPI驅動API介紹3、WS2812B介紹4、WS2812B的SPI驅動實現串行外設接口(Serial Peripheral Interface Bus,SPI)是一種用于短程通信的同步串行通信接口規范,設備之間使用全雙工模式通信,是一個主機和一個或多個…

每天一練:SpringBoot連接mq

目錄 每天一練:Springboot連接rabbitmq 每天一練:Springboot連接rabbitmq 目錄一、部署Rabbitmq?二、增加maven依賴三、連接RabbitMq四、發布和訂閱消息總結 一、部署Rabbitmq? 這里rabbitmq采用docker安裝部署。 拉取docker鏡像 [root192 ~]# docker…

【ChatGLM】ChatGLM-6B模型Win+4GB顯卡本地部署筆記

ChatGLM-6B是清華大學知識工程和數據挖掘小組發布的一個類似ChatGPT的開源對話機器人,由于該模型是經過約1T標識符的中英文訓練,且大部分都是中文,因此十分適合國內使用。 預期環境 本機電腦備注: Win10專業版 32G內存256固態系統…

ChatGPT 調教日記(二):程序員轉量化的背景知識

程序員如何學習量化金融 作為一個程序員學習量化金融(quant)是一個不錯的選擇。以下是一些建議: 學習金融基礎知識:了解金融市場、投資策略和金融產品。這將幫助你理解量化金融的背景和應用場景。 學習統計學和數學:…

FlutterBoost 實現Flutter頁面內嵌iOS view

在使用Flutter混合開發中會遇到一些原生比Flutter優秀的控件,不想使用Flutter的控件,想在Flutter中使用原生控件。這時就會用到 Flutter頁面中內嵌 原生view,這里簡單介紹一個 內嵌 iOS 的view。 注:這里使用了 FlutterBoost。網…

SAP動態安全庫存簡介

動態安全庫存:跑需求計劃時,ERP系統按設置的庫存方式自動計算出滿足一定時間內可保障生產的庫存數量 SAP動態安全庫存的計算公式:動態安全庫存=平均日需求*覆蓋范圍。 平均日需求=特定時期內的總需求/特定時期內的工作天數 覆蓋范圍指在沒又貨物供應的情況下,庫存可以維…

稀疏感知圖像和體數據恢復的系統對象研究(Matlab代碼實現)

💥💥💞💞歡迎來到本博客????💥💥 🏆博主優勢:🌞🌞🌞博客內容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ??座右銘&a…

STM32 F103C8T6學習筆記6:IIC通信__驅動MPU6050 6軸運動處理組件—一階互補濾波

今日主要學習一款傾角傳感器——MPU6050,往后對單片機原理基礎講的會比較少,更傾向于簡單粗暴地貼代碼,因為經過前些日子對MSP432的學習,對原理方面也有些熟絡了,除了在新接觸它時會對其引腳、時鐘、總線等進行仔細一些的研究之外…