微信公众号开发—自定义菜单、被动回复消息

自定义菜单

自定义菜单需要我们以POST的方式去请求接口,并且需要携带按钮信息(格式为json)。
由于自定义菜单较为简单,这里使用微信官方提供的接口测试工具对按钮增加接口进行测试:

  1. 通过appid和secret获取access_token。
  2. 生成按钮数据(JSON)。
  3. 进行测试。
    在这里插入图片描述
    测试成功响应状态应为:
    在这里插入图片描述
    最终,公众号上呈现的效果为:
    在这里插入图片描述

被动回复消息

我们为微信消息的回复制定以下规则:
在这里插入图片描述
即当用户输入关键字"这是为什么呢",即可回复"咱也不知道,咱也不敢问"。这个过程需要进行微信接入,步骤是:

  1. 进行微信接入。
  2. 获取用户发送信息(XML格式)
  3. 解析XML中的关键字,并使用关键字查询数据库中所对应的回复消息。
  4. 重新封装XML,进行响应。
代码如下:

1. 微信接入:要求我们提供接入URL以及token,微信会自动请求我们的服务,并携带参数(signature,timestaml,nonce,echostr)如果请求成功,我们原样回复echostr。至此我们就接入成功。这里,我们在微信端配置好的url为(http://0.0.0.0/verify),token为(evan)。[0.0.0.0替换为自己服务器IP)。
参数说明: signature - 微信将配置好的token以及生成的timestamp,nonce进行SHA1HEX加密,最终用于我们要验证微信提供的数据的完整性和正确性。

   @GetMapping("/verify")private void verify (HttpServletRequest request, HttpServletResponse response){log.info("微信接入服务器");String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String token = "evan";String echostr = request.getParameter("echostr");if (wxService.verifyInfo(signature,timestamp,nonce,token)){log.info("参数为:{}",echostr);if (!StringUtils.isEmpty(echostr)){try {response.getWriter().write(echostr);} catch (IOException e) {e.printStackTrace();}}else{log.info("signature为:{}", signature);log.info("timestamp为:{}", timestamp);log.info("nonce为:{}", nonce);log.info("token为:{}", token);}}}
   /*** 判断签名是否一致* @param signature* @param timestamp* @param nonce* @param token* @return*/public boolean verifyInfo(String signature, String timestamp, String nonce, String token) {TreeSet<String> set = new TreeSet<String>();set.add(token);set.add(timestamp);set.add(nonce);StringBuilder sb = new StringBuilder();for (String item : set) {sb.append(item);}String sign = DigestUtils.sha1Hex(sb.toString());return signature.equalsIgnoreCase(sign);}
  1. 获取用户发送信息并对信息进行解析。
@PostMapping("/verify")
private String sendMessage(HttpServletRequest request, HttpServletResponse response){BufferedReader reader = null;String message = "";try{reader = request.getReader();String str = "";while((str=reader.readLine()) != null) {message += str;}}catch (Exception e){e.printStackTrace();}return wxService.replyMessage(message);
}
public static Map<String, String> xmlParser(String str){
Map<String, String> map = new HashMap<>();
try {Document document = DocumentHelper.parseText(str);Element e = document.getRootElement();map.put("ToUserName",e.elementText("ToUserName"));map.put("FromUserName",e.elementText("FromUserName"));map.put("Content", e.elementText("Content"));
}catch (Exception e) {e.printStackTrace();
}
return map;
}
  1. 数据库中查找回复信息,并封装成XML。
public String replyMessage(String str){Map<String, String> map = XMLUtils.xmlParser(str);Date date = new Date();String content =  "";try {content = replyDao.selectByKeyword(map.get("Content"));}catch (Exception e) {e.printStackTrace();}log.info("返回内容是" + content);String message = "<xml>\n" +"  <ToUserName><![CDATA["+ map.get("FromUserName")+"]]></ToUserName>\n" +"  <FromUserName><![CDATA["+ map.get("ToUserName")+"]]></FromUserName>\n" +"  <CreateTime>"+ date.toString() +"</CreateTime>\n" +"  <MsgType><![CDATA[text]]></MsgType>\n" +"  <Content><![CDATA[" +content+ "]]></Content>\n" +"</xml>";return message;
}
  1. 最后对消息进行返回,最终,我们的效果如图所示:
    在这里插入图片描述
代码补充:这里对持久层代码进行补充
@Mapper
public interface ReplyDao extends BaseDao<Reply> {String selectByKeyword(String keyword) throws Exception;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lanou.wechat.dao.ReplyDao"><select id="selectByKeyword" parameterType="java.lang.String"  resultType="java.lang.String">select reply from tb_reply where keyword=#{keyword}</select></mapper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62898.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

msg文件自定义消息话题

以LVI-SAM为例&#xff0c;cloud_info.msg就是LVI-SAM自定义的消息类型&#xff1b;通常&#xff0c;都是利用msg文件&#xff0c;生成.h文件&#xff0c;然后cpp文件添加.h就可以正常使用自定义消息了&#xff1b; 自定义msg消息步骤 Step1&#xff1a;创建并编写msg文件&am…

微信公众号自定义回复(关键词回复:文本消息、图文消息)

要回复客户发到微信公共号的消息&#xff0c;首先要获取用户发来的消息&#xff0c; 接收地址就是微信公众号基本配置里写的服务器地址所在的文件地址&#xff1b; $postStr $GLOBALS["HTTP_RAW_POST_DATA"]; //微信返回的信息。包含用户所发的消息 $postObj si…

微信开发 (自动回复图片,自定义菜单)

微信是一个高大上的东西&#xff0c;恩&#xff0c;没错 首先输入网址mp.weixin.qq.com进入微信公众平台 注册账号和密码&#xff08;注意的是这里的账号和密码不是微信的账号密码&#xff09; 进入之后点击左侧开发/开发者工具 在右侧点击进入公众平台测试账号&#xff08…

大众CEO提前“毕业”,马斯克:软件是通向未来的关键

过去&#xff0c;软件是汽车的一部分&#xff0c;而如今&#xff0c;软件决定了汽车的价值。 近日&#xff0c;知名传统汽车厂商大众CEO赫伯特迪斯 (Herbert Diess) 提前卸任新闻引发人们热议&#xff0c;其好友特斯拉CEO马斯克发推表示&#xff1a;“软件是通向未来的关键。”…

“AI 不会取代程序员,而是其增长的加速器!”

ChatGPT 热潮下&#xff0c;关于 AI 是否会取代程序员的讨论不绝于耳&#xff0c;而本文作者认为&#xff1a;AI 反而会推动更多开发者的出现。 原文链接&#xff1a;https://interconnect.substack.com/p/ai-will-create-more-developers-not 未经允许&#xff0c;禁止转载&am…

谷歌终于也坐不住了 。。。

来源于51CTO技术栈 整理 | 言征 刚过去的一周&#xff0c;我们刚经历了三场对话式AI的大事&#xff1a;OpenAI的GPT-4&#xff0c;微软Office 365“核弹式”升级&#xff0c;百度的中文语言大模型“文心一言”&#xff0c;谷歌终于坐不住了&#xff0c;21日&#xff0c;谷歌首席…

我对 ChatGPT 进行多方位了解后的报告,超级全面,建议想了解的朋友看看(截至 2023.5.17)

优质介绍视频&#xff1a; GPT4前端【AI编程新纪元】 【渐构】万字科普GPT4为何会颠覆现有工作流&#xff1b;为何你要关注微软Copilot、文心一言等大模型 此文章不定期更新&#xff08;一周应该会更新一次&#xff09; 最近一次更新&#xff1a;2023.5.17 23:00&#xff08;…

获取钉钉企业部门用户信息

获取钉钉企业用户信息 有一个需求,需要获取本公司钉钉里面所有部门的员工信息,查阅钉钉官方文档后整理出了以下步骤: 1.登录钉钉企业管理员账号,创建一个应用 因为是公司内部使用区别第三方,所以选择企业内部开发 点击创建应用,填写基本信息 服务器IP写公网IP(可直接百度本机…

企业数字化转型|钉钉小程序开发权威指南

书籍发布&#xff1a;《钉钉小程序开发权威指南》书籍正式预售 钉钉技术团队聚力撰写&#xff0c;本书细致全面地介绍钉钉小程序技术原理及开发要点&#xff0c; 详细介绍从成为一名钉钉开发者到小程序应用上架的每一步流程。助力企业实现组织数字化和业务数字化。 购买渠道 …

钉钉E应用架构详解

&#xff25;应用框架详解&#xff1a; App:指的是E应用。 Page&#xff1a;页面&#xff0c;一个app有多个page。 App的生命周期&#xff1a; 当用户点击应用&#xff0c;进去onLaunch(启动应用)->onShow,当用户点返回按钮时&#xff0c;不会销毁当前页面(保活状态)&…

Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现

最近全球股市开始回暖&#xff0c;之前清仓的股民现在又陆续开始建仓。股市交易时间&#xff0c;一般也是上班时间&#xff0c;频繁的查看股票软件不仅会影响工作效率&#xff0c;也容易被老板以为工作不饱和。所以&#xff0c;我们就借助python的强大功能&#xff0c;把提前设…

【钉钉-场景化能力包】应用内发DING消息

客户痛点 面对不同类型的中小型企业&#xff0c;人员较多&#xff0c;找人非常困难&#xff0c;管理子公司的时候&#xff0c;协调的问题就更多&#xff0c;企业使用常规的个人聊天软件&#xff0c;消息发送后&#xff0c;不能准确判断消息是否已读&#xff0c;导致沟通管理效…

DingTalk「开发者说」如何开发钉钉高价值应用三部曲

一、钉钉是什么&#xff1f; 钉钉是企业应用数字化的操作系统 简单来说&#xff0c;钉钉是企业应用数字化的操作系统&#xff0c;就如同PC上的windows操作系统一样&#xff0c;我们可以在上面安装各种应用比如office、WPS&#xff0c;用于企业的各种实际应用。 钉钉自带原生…

数据分析:扩展企业微信、钉钉、飞书等告警通知渠道

本章节主要讲述如何扩展告警的通知渠道&#xff0c;以便将告警发送到第三方应用中 企业微信 实现目标 ●在鸿鹄中创建的告警被触发后&#xff0c;将告警通知发送至指定的企业微信群聊 配置步骤 1、打开“企业微信”&#xff0c;点击告警群右上角的“...”按钮 2、点击“群机器人…

Meta 开源 ImageBind 新模型,超越 GPT-4,对齐文本、音频等 6 种模态!

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 据外媒报道&#xff0c;上周四&#xff0c;Google、微软、OpenAI 几家公司的 CEO 受邀去白宫&#xff0c;共论关于人工智能发展的一些重要问题。然而&#xff0c;让人有些想不通的是&#xff0c;深耕 A…

刷屏的Llama 2性能究竟如何?

Datawhale干货 大模型&#xff1a;Llama 2&#xff0c; 来源&#xff1a;机器之心 虽然性能仍不及ChatGPT 3.5&#xff0c;但开源的力量是无法估量的。 相信很多人都被 Meta 发布的 Llama 2 刷了屏。OpenAI 研究科学家 Andrej Karpathy 在推特上表示&#xff0c;「对于人工智能…

ESP8266用点灯app接入小爱同学

ESP8266接入小爱同学—智能LED台灯或风扇 首先用的是arduino IDE对esp8266进行的编译&#xff0c;arduino对8266编译环境的具体配置可参考 1.利用WiFiManager库实现自动配网&#xff0c;亦能够满足在不同WiFi下可以不用更改程序即可链接不同的WiFi 2.利用esp8266 OTA功能实现应…

2023年,TO B投资巨轮驶向何处?

冰点市场中&#xff0c;危与机也往往同在&#xff0c;能够在这次疫情长跑竞赛中抓得住火花的企业&#xff0c;也一定将会在接下来的2023年走出庭院、走向更多产业场景&#xff0c;和更大的世界。 作者|斗斗 编辑|皮爷 出品|产业家 融资事件减少58%、融资金额减少37%、平…

使用CSS提高网站性能的30种方法

根据httparchive.org的页面重量报告&#xff0c;CSS在平均70个请求和2MB的网页上占7个HTTP请求和70Kb的代码。这并不是网站性能糟糕的最坏原因&#xff08;我正看着你呢&#xff0c;JavaScript&#xff09;&#xff0c;但CSS面临着特定的挑战&#xff1a; CSS会阻止渲染&#x…

都抢发AI大模型,谁关注模型安全?

如果要给4月定一个主题&#xff0c;“大模型”应该当仁不让。 从4月7日阿里突然放出“通义千问”内测开始&#xff1b;8日&#xff0c;华为放出盘古大模型&#xff1b;10日&#xff0c;商汤推出类ChatGPT产品“商量SenseChat”&#xff1b;之后&#xff0c;11日的阿里云峰会&am…