微信公众号对接详细教程,错过了就没了怎么办

1. 准备工作

  • 一个微信公众号,可以在微信公众平台注册。
  • 一个服务器,用于接收和处理微信服务器推送的消息,同时可以响应微信用户的请求。
  • 配置服务器的域名和端口,确保可以通过公网访问。
  • 了解微信公众号开发的基本流程和要求,包括验证服务器、接收消息和响应消息等。

在微信公众平台上,我们需要进行以下配置:

2.1 配置服务器地址

在开发 -> 基本配置 中,将服务器地址设置为我们的服务器地址。在设置之前,需要确保服务器已经可以通过公网访问,并且端口没有被防火墙或路由器等设备阻挡。

2.2 配置开发者模式

在开发 -> 基本配置 中,启用开发者模式,并填写服务器地址。启用开发者模式后,微信服务器会向服务器发送一个 GET 请求,用于验证服务器身份。在服务器收到请求后,需要按照微信要求返回 echostr 参数的值,用于验证服务器身份。

在开发 -> 自定义菜单 中,设置公众号菜单。公众号菜单是用户与公众号交互的主要方式之一,需要根据实际需求设置相应的菜单项和功能。

3.1 集成 Spring Boot

在开发微信公众号之前,我们需要先集成 Spring Boot 框架,用于快速构建和部署应用。在 pom.xml 文件中,添加以下依赖:

xmlCopy code<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

3.2 接收和处理微信服务器推送的消息

在接收和处理微信服务器推送的消息时,我们需要实现一个微信消息处理器,用于接收消息并处理。在 Spring Boot 中,可以使用 @RestController 和 @PostMapping 注解来实现。

javaCopy code@RestControllerpublic class WeChatController { @PostMapping("/wechat") public String handleRequest(***e to our official account!"); } else { return buildTextResponse(message, "Unknown event: " + event); } } else { return buildTextResponse(message, "Unknown message type: " + msgType); } } // 构造文本消息响应 private String buildTextResponse(Map<String, String> message, String content) { String fromUserName = message.get("ToUserName"); String toUserName = message.get("FromUserName"); String createTime = String.valueOf(System.currentTimeMillis() / 1000); String msgType = "text"; String xml = "<xml>"; xml += "<ToUserName><![CDATA[" + toUserName + "]]></ToUserName>"; xml += "<FromUserName><![CDATA[" + fromUserName + "]]></FromUserName>"; xml += "<CreateTime>" + createTime + "</CreateTime>"; xml += "<MsgType><![CDATA[" + msgType + "]]></MsgType>"; xml += "<Content><![CDATA[" + content + "]]></Content>"; xml += "</xml>"; return xml; }}

上述代码实现了一个简单的微信公众号消息处理器,用于接收和处理微信服务器推送的消息。当微信服务器向我们的服务器推送消息时,我们将通过 @PostMapping 注解定义的 /wechat 路径接收请求,并在 handleRequest 方法中对消息进行解析和处理,最终返回响应给微信服务器。

其中,readRequestBody 方法用于读取请求体,我们将从请求体中读取 XML 格式的消息内容,用于后续的消息解析和处理。

javaCopy code// 读取请求体private String readRequestBody(HttpServletRequest request) { try { BufferedReader reader = request.getReader(); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } return sb.toString(); } catch (Exception e) { throw new RuntimeException("Failed to read request body", e); }}

parseMessage 方法用于解析微信服务器推送的消息,将 XML 格式的消息转换为 Map 对象。

javaCopy code// 解析微信消息private Map<String, String> parseMessage(String xml) { try { Document doc = DocumentHelper.parseText(xml); Element root = doc.getRootElement(); Map<String, String> message = new HashMap<>(); for (Iterator<Element> it = root.elementIterator(); it.hasNext(); ) { Element element = it.next(); message.put(element.getName(), element.getText()); } return message; } catch (Exception e) { throw new RuntimeException("Failed to parse message", e); }}

上述代码使用了 DOM4J 解析 XML,通过解析 XML 根元素,我们将每个子元素的名称和文本内容都存储到 Map 对象中,用于后续的消息处理。

现在,我们已经完成了一个基本的微信公众号消息处理器,可以接收和处理微信服务器推送的消息,并返回响应给微信服务器。接下来,我们将进一步完善这个处理器,添加微信公众号的常用功能。

下面是一些常用的功能,可以根据需求自由添加。

自动回复

javaCopy codeprivate String handleAutoReply(Map<String, String> message) { String cOntent= message.get("Content"); if ("hello".equalsIgnoreCase(content)) { return replyTextMessage(message, "你好,欢迎关注我的公众号!"); } else { return replyTextMessage(message, "我听不懂你在说什么,请输入 hello 来和我打个招呼吧!"); }}

上述代码实现了一个简单的自动回复功能,如果用户发送的是 "hello",则回复 "你好,欢迎关注我的公众号!",否则回复 "我听不懂你在说什么,请输入 hello 来和我打个招呼吧!"。

图文消息

javaCopy codeprivate String handleNewsMessage(Map<String, String> message) { List<Article> articles = new ArrayList<>(); Article article1 = new Article(); article1.setTitle("我是第一篇文章"); article1.setDescription("这是第一篇文章的描述"); article1.setPicUrl("https://picsum.photos/200"); article1.setUrl("https://www.baidu.com"); articles.add(article1); Article article2 = new Article(); article2.setTitle("我是第二篇文章"); article2.setDescription("这是第二篇文章的描述"); article2.setPicUrl("***"); articles.add(article2); return replyNewsMessage(message, articles);}

上述代码实现了一个简单的图文消息功能,发送两篇文章的标题、描述、图片和链接。

菜单

javaCopy codeprivate String handleMenuEvent(Map<String, String> message) { String event = message.get("Event"); if ("CLICK".equals(event)) { String key = message.get("EventKey"); if ("menu1".equals(key)) { return replyTextMessage(message, "你点击了菜单一"); } else if ("menu2".equals(key)) { return replyTextMessage(message, "你点击了菜单二"); } } return "";}

上述代码实现了一个简单的菜单功能,当用户点击菜单一或菜单二时,会回复相应的文本消息。

获取用户信息

首先,需要在微信公众平台中创建一个网页授权获取用户基本信息的应用,获取到 appid 和 appsecret。然后,需要在代码中添加一个获取用户授权的接口,获取用户的 openid。

javaCopy code// 获取用户授权页面@GetMapping("/authorize")public String authorize(@RequestParam("redirect_uri") String redirectUri, @RequestParam("state") String state) { String url = "***/connect/oauth2/authorize" + "?appid=" + APPID + "&redirect_uri=" + URLEncoder.encode(redirectUri) + "&response_type=code" + "&scope=snsapi_base" + "&state=" + state + "#wechat_redirect"; return "redirect:" + url;}// 授权回调页面@GetMapping("/callback")public String callback(@RequestParam("code") String code, @RequestParam("state") String state) { String url = "***/sns/oauth2/access_token" + "?appid=" + APPID + "&secret=" + APPSECRET + "&code=" + code + "&grant_type=authorization_code"; String result = restTemplate.getForObject(url, String.class); Map<String, String> resultMap = JsonUtils.fromJson(result, Map.class); String openid = resultMap.get("openid"); // TODO: 根据 openid 获取用户信息 return "redirect:" + state;}

上述代码中,authorize 方法用于生成用户授权页面的链接,callback 方法用于处理用户授权后的回调页面,获取用户的 openid。

接下来,可以根据用户的 openid 获取用户的基本信息。需要注意的是,需要先通过微信公众平台中的高级接口设置获取用户基本信息的权限。

javaCopy codeprivate String handleUserinfoEvent(Map<String, String> message) { String event = message.get("Event"); if ("CLICK".equals(event)) { String key = message.get("EventKey"); if ("userinfo".equals(key)) { String openid = message.get("FromUserName"); String url = "***/cgi-bin/user/info" + "?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN"; String result = restTemplate.getForObject(url, String.class); // TODO: 处理用户信息 return replyTextMessage(message, result); } } return "";}

上述代码中,handleUserinfoEvent 方法用于处理点击获取用户信息菜单时的逻辑。首先,从消息中获取用户的 openid,然后调用微信公众平台的接口获取用户信息。

以上就是一些常用的微信公众号功能,可以根据需求自由添加。在这个教程中,我们使用了 Spring Boot 来开发微信公众号应用。我们学习了如何与微信服务器建立消息交互,如何对接微信公众号的常用功能,以及如何获取用户授权和用户信息。这个教程只是一个基础入门,实际的微信公众号应用开发中还有很多细节需要考虑。如果您想深入学习微信公众号的开发,可以查阅微信公众平台的开发文档,或者参考一些开源的微信公众号框架。总之,希望这个教程能对您有所帮助,祝您在微信公众号开发中取得成功!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 2月 25日 下午3:35
下一篇 2023年 2月 25日 下午3:54

相关推荐

  • 如何快速批量提取文件名,如何用bat批量提取文件名

    本文转自公号:UX2088|冰枫大叔 大家好,我是冰叔,又有好几个火星时间没见啦!那么冰叔今天给大家带来的是什么呢?带来的是我们日常工作当中经常会使用到的一项任务,那就是|批|量|…

    2023年 10月 9日
  • 云电脑怎么玩手机游戏(云游戏3天云手机体验资格)

    云手机一般是以APP客户端的形式为用户提供服务,一般是手机上用的,支持安卓版和ios版,也有PC上使用的电脑版,但都需要下载APP才能使用,那么云手机有没有网页版呢?云手机怎么玩手…

    2023年 1月 4日
  • qq被大面积盗号,告诉你如何避免被盗号的风险

    就在昨天,我列表里的一位好友私聊了我,让我帮他申诉解封。且让我告诉他我的姓名和sfz,我对此感到很是疑惑就通过找回密码的方式查看了该好友的手机绑定。原来是个虚拟手机号,这样就明了了…

    互联网 2023年 9月 24日
  • 抖音怎么添加查看详情的网站链接呢

    企业号可在主页设置官网链接按钮,可跳转企业官网,为企业提供品牌及产品介绍能力,提高用户对品牌认知度。 对有售卖需求的企业,可设置跳转至企业自营京东店铺或天猫店铺,缩短转化路径,提高…

    2023年 6月 8日
  • 用word给证件照换底色最简单方法

    我们常用的证件照底色有:红底、蓝底、白底,有时候不符合背景要求的证件照,很多人都跑去照相馆重新拍,其实不用那么麻烦。Word就能给证件照换底色,红、蓝、白底任你换。 第一步:删除照…

    2023年 7月 22日
  • 如何压缩证件照大小jpg到200k

    如何快速高效地压缩证件照?无论是办理各类证件还是进行线上身份认证,我们都需要提供高质量的证件照片。然而,原始的证件照往往文件大小较大,不便于传输和存储。本文将为你分享一些快速高效的…

    2023年 8月 5日
  • 是团藏让鼬灭了宇智波一族吗(鼬为什么要听团藏的命令去灭族)

    喜欢看《火影忍者》的朋友应该都知道,宇智波被灭族一事是木叶隐村建村史上是一件骇人听闻的事件,甚至在整个忍界都是非同小可的事件。了解整个剧情发展脉络的朋友应该知道,此事的执行者是宇智…

    2023年 5月 15日
  • 挪车不留电话怎么办(挪车一码通)

    我们在日常开车出行的时候,难免会因为一时找不到正规车位,要找个地方临时停车,如果占用了别人的车位,或者挡住别人的车出入,别人一定会很着急很生气,很多纠纷因此产生。 有些车主,就搞一…

    2023年 7月 12日
  • qq聊天记录删除了怎么恢复手机

    QQ聊天记录删除了怎么恢复?因为内存不足的原因,把QQ的聊天记录及一些文件图片都给清空了,但最重要的是聊天记录给删除了,导致非常的后悔,想把聊天记录找回。那我们应该怎么做才能够把聊…

    2023年 2月 18日
  • 支付宝转账转错了如何把钱追回来

    移动支付为我们的日常生活带来了诸多便利 手指轻轻一点,转账即刻完成 但“手滑”的故事也经常出现 不小心输错号码导致转错了人 对方收了横财后却拒不还钱 甚至拉黑自己…… 碰到这种情况…

    2023年 3月 23日