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

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

相关推荐

  • ps制作金属流体字

    1.首先我们用PS新建一个空白文档,快捷键ctrl+n(新建),尺寸由自己决定,在其上方新建一个空白文档,选择文字工具,快捷键T,这里我输入PS,回车确定。 2.单击菜单栏上的3D…

    2023年 10月 21日
  • 免费!半价!武汉多个景区宣布关闭

    武汉景区 五月最新优惠政策来了! 其中 武汉欢乐谷、木兰天池、 凤娃古寨、武汉植物园等景区 针对部分人群免票 赶紧走出家门 去感受夏日的美好吧~ 武汉欢乐谷极速世界新区。 「武汉欢…

    互联网 2023年 11月 7日
  • 百度贴吧转型合伙人,找到变现金矿的人

    不久前,百度贴吧举办了一个贴吧合伙人沙龙,邀请了最具代表性和知名度的各个垂类企业,如包括汽车、旅游、教育、婚嫁、餐饮等各个行业领导者成为首批贴吧合伙人,授予各战略合作伙伴管理行业贴…

    2023年 9月 10日
  • 如何查看已删除微信好友聊天记录

    微信已成为人们生活的重要部分,所以微信聊天记录不小心误删还真是个麻烦事,小编这里不仅有玩转微信的小技巧,另外教你恢复与导出微信记录与好友等数据! 微信小技巧:教你拒绝朋友圈消息推送…

    2023年 4月 13日
  • 广州1855万元得主透露中奖秘笈

    广州体彩复市后首个超级大奖得主来啦!近日,大乐透第20023期1800万元追加头奖得主现身广州市体彩中心领奖,幸运儿老魏凭借一张189元“7+3”复式追加投注票,总计中得奖金185…

    互联网 2023年 7月 9日
  • 学完java能干什么,java学完感觉什么都忘了

    如果问你,哪个编程语言发展最稳定,最值得学习? Java一定排在首位! 2020年TIOBE发布的编程语言排行榜中,12个月中Java有4次排行第一,7次排行第二。可见Java的地…

    2023年 4月 29日
  • 微信聊天腾讯工作人员能看到吗?

    在不知不觉中,我们每天都使用的微信和QQ已经陪伴我们十几年了,微信的用户量也突破了10亿大关。随着使用率的增长,可能越来越多的用户开始会担心自己的聊天记录是否安全。那么作为用户的我…

    2023年 9月 19日
  • 看完这6款浏览器的对比,你还使用国产浏览器吗英文

    市面上的国产浏览器实在是太多了,曾几时,我也曾因为选择使用哪款浏览器而纠结过。是用搜狗浏览器好,还是360极速浏览器好,或者是多御浏览器?直到我学习了计算机,慢慢地开始使用国外浏览…

    2023年 5月 4日
  • 为什么微信发图原图模糊,p50 pro用微信拍照或模糊

    日常生活或工作中,我们常常会通过微信给朋友、客户发送照片,比如: 跟朋友出去看花展,想分享下美美的照片[鼓掌],我原以为朋友看到的是这样子的, 我发的图 然而,亲爱的看到的是这样子…

    2023年 4月 22日
  • 模拟手写生成器入口,手写模拟神器

    本期内容,网创智慧库给大家分享一款可以在安卓手机上使用的手写模拟器,软件内置了23种纸张模板和20种字体可随意选择使用,而且还可以根据需求设置页面和文本,一键无水印保存模拟手写稿到…

    2023年 1月 18日