实现消息自动回复
那么按照上面的逻辑,我们就已经大概知道微信给我们发送的到底是什么样子的数据了,那么我们只要按照微信官方定义的,在post方法里面把请求返回回去即可,我们先来看一下官方文档
这里需要主要,此时的ToUserName和FromUserName就得改变了。
因为上面的xml中,ToUserName就是我们自己,FromUserName就是用户,而此时我们要做的是给用户返回数据,所以此时ToUserName是用户,FromUserName是我们自己。
所以先修改一下代码
然后我们来使用一个main函数来做一下测试
public static void main(String[] args) { try { // 创建document对象 Document document = DocumentHelper.createDocument(); // 创建根节点bookRoot Element xml = document.addElement("xml"); // 向根节点中添加第一个节点 Element toUserName = xml.addElement("ToUserName"); // 向子节点中添加属性 toUserName.addCDATA("oy__X6JbTiLxEVG85ABtAawsc_qw"); Element fromUserName = xml.addElement("FromUserName"); fromUserName.addCDATA("gh_71a0837d69a6"); Element createTime = xml.addElement("CreateTime"); createTime.addCDATA(String.valueOf(System.currentTimeMillis())); Element msgType = xml.addElement("MsgType"); msgType.addCDATA("text"); Element content = xml.addElement("Content"); content.addCDATA("hello呀,我是张锦标"); System.out.println(document.getRootElement().asXML()); // 设置生成xml的格式 OutputFormat of = OutputFormat.createPrettyPrint(); // 设置编码格式 of.setEncoding("UTF-8"); // 生成xml文件 File file = new File("D:\\desktop\\student.xml"); if (file.exists()){ file.delete(); } //创建一个xml文档编辑器 XMLWriter writer = new XMLWriter(new FileOutputStream(file), of); //把刚刚创建的document放到文档编辑器中 writer.write(document); writer.close(); } catch (Exception e) { e.printStackTrace(); } }
最终的格式如下
既然可以了,那么我们开始修改post里面的代码
所以post请求体中的代码修改如下
@PostMapping("/") public String chatGPTproxy( HttpServletResponse response, HttpServletRequest request, @RequestBody String requestBody, @RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce, @RequestParam(name = "encrypt_type", required = false) String encType, @RequestParam(name = "msg_signature", required = false) String msgSignature) { System.out.println("requestbody:----"+requestBody); ReceiveMessage receiveMessage = XMLUtil.XMLTOModel(requestBody); return parseMsgToXML(receiveMessage); }
最终结果如下
对了,特别注意,如果你的消息回复的时间会超过5s,那么这次的自动回复会失败,所以如果说你的消息查询特别久,那么就需要用客服回复,之后我会继续完成这个功能的。
实测
上面的测试功能已经成功了,那么我们把项目的端口换为80,然后在试一下
记住项目要放到云服务器上哦