微信小程序发送消息推送

article/2025/8/15 4:18:41

在小程序开发中,如果想实现:用户发给小程序的消息以及开发者需要的事件推送,在小程序项目中,我们想要实现这样一个功能,

比如我们小程序中的客服功能,我不想要使用小程序后台的在线客服功能,但我又想实现客服功能,这个时候微信提供了消息推送功能,在小程序后台的设置,开发设置中,消息推送功能:

点击开启消息推送功能,认证成功进入到消息推送配置界面:

这里配置几个参数注意一下:

URL(服务器地址):这里要填我们要认证token的接口地址,并且是在线上的接口,才能认证成功

比如我的消息推送认证接口的地址是:http://xxxxxxx/xxxxxx/getProcessRequest.do,下面会编写这个接口认证的代码

Token(令牌):这个是用户自己添加,不过在小程序后台添加的Token必须与认证接口中的是一致的,这个才能认证成功

下面是Spring mvc 编写的接口代码:

因为这个接口是GET认证,POST是发送信息所以才会这么编写:

/** * GET:验证token * OST:发送数据 * @param request 作用域 * @param response 作用域 * @return String */ @RequestMapping(value= {“/getProcessRequest”},method= {RequestMethod.GET, RequestMethod.POST}) @ResponseBody public String getProcessRequest(HttpServletRequest request,HttpServletResponse response) { boolean isGet=request.getMethod().toLowerCase().equals(“get”); LOGGER.info(isGet+”—————“); System.out.println(isGet); System.out.println(“方法是——-“+isGet); if(isGet){//首次验证token // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 String signature = request.getParameter(“signature”); // 时间戳 String timestamp = request.getParameter(“timestamp”); // 随机数 String nonce = request.getParameter(“nonce”); // 随机字符串 String echostr = request.getParameter(“echostr”);

PrintWriter out = null; try { out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败 if (DateUtil.checkSignature(signature, timestamp, nonce)) { System.out.println(“成功”); out.print(echostr); out.flush(); //必须刷新 } System.out.println(“失败”); } catch (IOException e) { e.printStackTrace(); } finally { out.close(); out = null; } }else{// 进入POST聊天处理 System.out.println(“进入了聊天界面”); LOGGER.info(“进入了聊天界面”); // 接收消息并返回消息 try { System.out.println(“进入这个方法中了:”); acceptMessage(request,response); } catch (Exception e) { e.printStackTrace(); } } return null;

}

acceptMessage方法: 这个方法是认证成功后也就是POST方法操作能够接收到小程序发来的信息,也可以回信息:

这里根据小程序信息的格式可以去看小程序API文档,文档地址:

https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/receive.html#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF

acceptMessage:

/** * 聊天处理方法 发送数据 * @param request 作用域 * @param response 作用域 * @see Exception */ public void acceptMessage(HttpServletRequest request,HttpServletResponse response) throws Exception{ BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), “UTF-8”)); StringBuilder responseStrBuilder = new StringBuilder(); String inputStr; while ((inputStr = streamReader.readLine()) != null) responseStrBuilder.append(inputStr); /*BufferedReader readers = new BufferedReader(new InputStreamReader(request.getInputStream()));*/ JSONObject jsonObject = JSONObject.fromObject(responseStrBuilder.toString()); String param= jsonObject.toString(); System.out.println(“转出来的数据:”+param); String attribute = jsonObject.get(“FromUserName”).toString();//发送的openid // String ToUserName = jsonObject.get(“ToUserName”).toString();//小程序原始id String MsgType = jsonObject.get(“MsgType”).toString(); //用户发送客服信息的类型 System.out.println(“发送数据的类型:”+MsgType); System.out.println(MsgType); if(MsgType.equals(“event”)) { Map<String,Object> text = new HashMap<String, Object>(); Feedbacktxt feedbacktxt = new Feedbacktxt(); feedbacktxt.setTouser(attribute); feedbacktxt.setMsgtype(“text”); text.put(“content”, “你好,欢迎来到这里”); feedbacktxt.setText(text); String token = feedbackService.access_token(); //这里是获取接口凭证的接口 String url=”https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=”+token; JSONObject jsonStrs = JSONObject.fromObject(feedbacktxt); HttpUtils.httpPost(url, jsonStrs.toString());

获取access_token,接口凭证的api接口文档:微信开放文档

DateUtil.java:

/** * 验证签名 * @param signature 验证签名的数据 * @param timestamp 参数 * @param nonce 参数 * @return boolean */ public static boolean checkSignature(String signature, String timestamp, String nonce) { //TOKEN //与token 比较 String[] arr = new String[] { qurenneng1796789910, timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典排序 Arrays.sort(arr); StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance(“SHA-1”); // 将三个参数字符串拼接成一个字符串进行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; // 将sha1加密后的字符串可与signature对比 return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } /** * 将字节数组转换为十六进制字符串 * * @param byteArray * @return String */ private static String byteToStr(byte[] byteArray) { String strDigest = “”; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; }

/** * 将字节转换为十六进制字符串 * * @param mByte * @return String */ private static String byteToHexStr(byte mByte) { char[] Digit = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’ }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; }

这样就可以实现动态的去发送客服信息,也可以去用代码去实现想要实现的功能,好了微信小程序接口认证就到这里了


http://chatgpt.dhexx.cn/article/NTqeBhqH.shtml

相关文章

微信小程序订阅消息通过服务通知发送

第一步&#xff1a;申请模板获取模板ID&#xff1a; 登录微信公众平台 -> 功能 -> 订阅消息 -> 对里面的模板进行选用或者自定义 公共模板库里面的模板分为一次性订阅 和永久订阅&#xff0c;这个是根据你创建小程序时选择的行业进行区分的。 https://developers.we…

给微信小程序发送消息

给微信小程序发送消息 所用技术&#xff1a;后台&#xff1a;jeecgboot 数据库&#xff1a;oracle 前台&#xff1a;vue2.0 首先登陆微信公众平台 链接: https://mp.weixin.qq.com/ 1.登陆之后每个公司 都会有自己得相关参数例如 appid之类得 后面代码里时要用到的 2.然后先…

微信小程序通过公众号服务号发送消息

一、基础概念: 准备条件&#xff1a; 1、公众号和小程序必须在同一个公司主体下。 2、在公众号后台需要对小程序进程绑定操作。 公众号提供了两种消息&#xff0c;一种是订阅消息&#xff0c;一种是模板消息。 订阅消息需要用户主动订阅&#xff0c;然后才能接收消息&#x…

六、微信小程序发布流程

目录 1、上传2、提交审核 1、上传 当我们写完代码后 点击微信开发者工具的上传 要么是体验版 要么是1.0.1最新版 直接点击确定或上传即可 【前提是你本人必须是小程序的管理员或项目成员】 上传成功会有提示弹窗 2、提交审核 在版本管理中我们能看到上传的小程序版本 在这里我…

微信小程序发布全流程

1.在微信公众平台注册 我选的是用QQ邮箱注册的&#xff0c;因为我的163邮箱和微信绑定的&#xff0c;不能使用注册。 登陆进来就是这个页面啦。 2.npm打包&#xff08;假设您的电脑已经安装了nodeJS&#xff09; 选中您的项目&#xff0c;然后到项目的根目录下 执行npm ins…

微信小程序申请+开发+发布流程

框架用的Taro&#xff0c;开发工具用的是VSCode微信开发者工具&#xff0c;VSCode主要用来编码&#xff0c;微信开发者工具主要用来看和最后上传那么一下&#xff0c;其他没什么好说的。放张图&#xff0c;大家自行体会&#xff1a; 利用taro发布web程序如下&#xff1a; 过程整…

微信小程序发布流程

1.授权 登录微信公众平台微信公众平台&#xff0c;给相应人员授权&#xff1b;最好同时添加体验成员&#xff08;用于验证测试&#xff09;。 2.开发工具及代码 下载官方的微信开发者工具&#xff0c;使用微信扫一扫登录&#xff1b;同时下载最新的项目代码&#xff0c;导入…

信号与系统(四)

注&#xff1a;本博客是基于奥本海姆的《信号与系统》第二版编写&#xff0c;主要是为了自己考研&#xff0c;准备专业课。 (转载&#xff1a;https://blog.csdn.net/Explorer_day/article/details/77177542) 一、基本系统性质 1、记忆系统与无记忆系统 ①无记忆系统 如果对…

信号与系统 | 信号与系统概述 | 信号的基本概念和分类

文章目录 常见的概念信号的描述信号的分类确定信号和随机信号连续信号和离散信号周期信号和非周期信号能量信号和功率信号一维信号和多维信号因果信号和非因果信号 信号的matlab表示与绘图 常见的概念 消息&#xff0c;来自外界的各种报道统称为消息信息&#xff0c;消息中有意…

城市轨道交通信号系统学习笔记(四)信号机

信号机 <font face"楷体" size5>一、地面信号机的设置</font><font face"楷体" size5>二、信号显示</font> 城市轨道交通采用与铁路相同的色灯信号机&#xff0c;但设置位置和信号显示不同于铁路&#xff0c;信号显示距离也有自己…

信号与系统(一)

注&#xff1a;本博客是基于奥本海姆的《信号与系统》第二版编写&#xff0c;主要是为了自己考研&#xff0c;准备专业课。 (转载&#xff1a;https://blog.csdn.net/Explorer_day/article/details/76910002) 一、连续时间和离散时间信号 1、信号的定义 ①在物理上&#xf…

操作系统:信号

文章目录 一 信号概念1. 信号简介2. 信号/事件 产生方式3. 信号处理方式 二 信号实现1. 不可靠信号2. 可靠与不可靠信号类型3. 被中断的系统调用4. 信号函数4.1 信号发送函数 kill/raise4.2 定时发送信号函数 alarm4.3 信号捕获等待函数 pause 5. 信号集5.1 信号集来由5.2 信号…

信号与系统—信号的描述与分类

信号的描述和分类 信号的描述 函数表示 信号通常是时间变量t的函数&#xff0c;所以对于某一类信号可以用时间函数来表示&#xff0c;如 c ( u ) { 0 &#xff0c; t < 0 e − t τ &#xff0c; t ≥ 0 c(u)\begin{cases} 0&#xff0c;t<0\\ e^{-\frac{t}{\tau}}&…

操作系统——信号

信号的概念 信号的产生 信号的注册 信号的注销 自定义信号处理方式 信号的捕捉流程 信号阻塞 信号的概念&#xff1a; 1.信号是一个软件中断 2.信号的种类&#xff1a; kill -l命令的时候&#xff0c;我们会看到62种信号 1~31 &#xff1a; 非可靠信号&#xff0c; 信号有可能…

信号与系统(典型信号)

1.信号的描述与信号的分类 1.1基于信号维度分类 一维信号&#xff08;声音&#xff09;、二维信号&#xff08;图像&#xff09;、三维信号&#xff08;视频&#xff09;、四维信号&#xff08;VR中看到的信号&#xff09;、…N维。 信号与系统中只讨论一维信号 1.2一维信号…

信号与系统1-概述

目录&#xff1a; 一、概述 1、信号与系统概念 1&#xff09;信号 2&#xff09;系统 2、信号的描述、分类与典型信号 1&#xff09;描述方式 2&#xff09;信号的分类 &#xff08;1&#xff09;确定信号/随机信号 &#xff08;2&#xff09;周期信号/非周期信号 &#xff0…

【信号与系统】(四)信号与系统概述——系统的概念及分类

文章目录 第一章 信号与系统概述1.4 系统的概念及分类1.4.1 系统定义与典型系统举例1.4.1.1 系统定义1.4.1.2 系统模型1.4.1.3 系统的状态1.4.1.4 典型系统举例 1.4.2 系统分类1.4.2.1 连续系统与离散系统1.4.2.2 动态系统与即时系统1.4.2.3 单输入单输出系统与多输入多输出系统…

信号系统 | 信号的概念与常用信号

信号的本质是函数&#xff0c;因此信号处理方法具有普适性&#xff0c;应用领域非常广泛。本篇介绍信号的基本概念以及一些典型的信号&#xff0c;主要参考奥本海姆的经典教材《信号与系统》&#xff0c;微信搜索公众号PurePlay&#xff0c;后台回复Oppenheim即可获取中文PDF。…

【信号与系统】(二)信号与系统概述——基本信号

文章目录 第一章 信号与系统概述1.2基本信号1.2.1 阶跃函数1.2.2 冲激函数1.2.3 冲激函数的广义函数定义1.2.4 冲激函数的取样性质1.2.4.1 f ( t ) f(t) f(t)乘以 δ ( t ) δ(t) δ(t)1.2.4.2 f ( t ) f(t) f(t)乘以 δ ( t − a ) δ(t-a) δ(t−a) 1.2.5 冲激函数的导数1.…

【信号与系统|吴大正】1:信号与系统概述

信号与系统概述 写在前面&#xff1a; 自己也感觉最近基础类课程开了好多坑…因为发现未来研究领域跟数字信号处理也脱离不了关系&#xff0c;打算从《信号系统与线性分析》开始慢慢往后补&#xff1b;大二下期的时候学习过了这门课&#xff0c;但其实现在回过头来知识也不剩多…