当前位置: 首页 > news >正文

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.lryc.cn/news/126816.html

相关文章:

  • MySQL 根据多字段查询重复数据
  • Markdown编辑器 Mac版Typora功能介绍
  • el-form自定义校验规则
  • xml对象与字符串互换
  • 单例模式和多例模式和工厂模式
  • 【网络架构】华为hw交换机网络高可用网络架构拓扑图以及配置
  • 信也科技一面凉经
  • AI商业化如何落地?看设计师如何利用AI细化工作流
  • 论文阅读 - Understanding Diffusion Models: A Unified Perspective
  • [Python进阶] 定制类:模拟篇
  • HTML5 游戏开发实战 | 五子棋
  • rust学习-json的序列化和反序列化
  • 基于MapReduce的Hive数据倾斜场景以及调优方案
  • mysql 02 数据库的约束
  • Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)
  • Unity如何制作声音控制条(控制音量大小)
  • 非计算机科班如何顺利转行计算机领域?
  • Android音视频剪辑器自定义View实战!
  • stm32_ADC电源、通道、工作模式
  • Vue编程式路由导航
  • LVS-DR模式
  • 详细介绍生成对抗网络 (GAN) 的原理和基于Pytorch源码的实现
  • 高性能数据处理选型
  • 【深入理解C语言】-- 关键字2
  • Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和删除数据的问题
  • 若依前端npm run dev启动时报错
  • 实战项目:基于主从Reactor模型实现高并发服务器
  • iTOP-RK3568开发板ubuntu环境下安装Eclipse
  • 大气热力学
  • 【RabbitMQ】消息队列-RabbitMQ篇章