概要
微信公众号最新讲解包含自动回复,以及菜单自定义创建等等
前提条件
那么开发微信公众号前,你需要百度搜素微信公众平台创建一个微信公众号,先做好一切的基础资料操作,那我们直接开始!
在线接口调试工具
打开微信公众号的后台管理界面,有一个开发者工具,点击在线调试工具进入本地开发调试界面!
在这里你可以看到所有支持调试的接口,意思就是你对微信公众号发起的请求或者是回调是否成功。
待会会以一个demo介绍它的用法,现在先简单介绍一下。
公众平台测试账号
这个账号呢就是你本地开发连接你的微信测试公众号测试相关功能的一个工具,模拟实际的一个微信公众号的一个功能!
在这里先放一张图给大家看看我们开发公众号需要的主体!
那么这里根据微信公主号的官方文档进行开发介绍!
这里是公众号的接入指南:
是不是和我上述的图片一模一样的!
那么根据开放文档描述,我们可以得知
- 我们需要提供一个接口给微信并且是以GET请求的方式提供回去
- 我们需要接收四个参数,分别为signature,timestamp,nonce,echostr
- 接受到参数以后我们需要接下来的步骤
-
将token、timestamp、nonce三个参数进行字典序排序
-
将三个参数字符串拼接成一个字符串进行sha1加密
-
开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
-
首先呢,我们需要自定义一个token填上上述的图片token中,其次我们需要一个能够被外网访问的url供给微信平台进行请求和回调!那么我们本地跑起来的项目都属于本地服务,不支持外部访问,这里需要涉及到一个技术叫内网穿透,有各种工具可以使用,且都是免费的,请自行百度!
上代码:
创建接口:
排序-->加密-->对比
请注意我的token是在我的properties里边,你们可以自定义方式进行填写,按照上述过程结束后,如果比较相同将echostr返回给微信,如此你和微信就已经建立好连接了!
消息回调:
此时我们与微信建立好连接了,如何获取微信公众号的消息呢!首先我们申请一个测试公众号!
其次如果我们需要获取用户信息呢,则需要下划此界面在这里填入你的回调接口地址:
然后我们首先需要知道一件事情就是,你接收公众号消息的地址也就是你的回调地址!也就是你填入上述图片里的url地址!但是不同的是,请求接口的方法为Post,请求接口需要的参数类型为xml,以及请求体的数据为xml组成的相关数据,具体请看:
消息接受
那么在这里,inMessage是我们接收到的微信公众号传过来的消息,outMessage是我们需要发送出去的消息,此时这里需要用到四个依赖,是用来帮我们处理xml数据转换为实体类的。
在这里我们只介绍文本消息
那么以此我们可以建立以此参数为属性的实体类
消息回复
具体的逻辑呢也就是:
根据自己收到的消息进行处理吧!很简单的判断逻辑了!
菜单开发
开发菜单之前,我们先看一下官方对开发菜单所需要准备那些东西
创建菜单的过程:
我们需要请求微信公众号的链接地址,带上我们所需要创建菜单的json数据去请求
http请求方式:POST(请使用https协议) 菜单
那么问题来了,这里的ACCESS_TOKEN是哪里来的呢?
请看VCR:微信开放文档
https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
我们需要请求此地址获取最新的access_token,那么这里的appid以及secret也就是文章最顶部所出现的两个值,是不是一下子就明白了!
当然这里有一个问题是,官方明确指出
access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效
所以我们在获取token时可以设置一个2小时的定时任务,在服务启动时进行token初始化,每两小时获取一次最新的token。
创建菜单的代码:
@Override
public void createMenu(String accesstoken) {
String body = "{\n" +
" \"button\": [\n" +
" {\n" +
" \"type\": \"click\",\n" +
" \"name\": \"视频演示\",\n" +
" \"key\": \"bilibli\"\n" +
" },\n" +
" {\n" +
" \"name\": \"开源\",\n" +
" \"sub_button\": [\n" +
" {\n" +
" \"type\": \"click\",\n" +
" \"name\": \"gitee\",\n" +
" \"key\": \"gitee\"\n" +
" },\n" +
" {\n" +
" \"type\": \"click\",\n" +
" \"name\": \"github\",\n" +
" \"key\": \"github\"\n" +
" }\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"name\": \"其它\",\n" +
" \"sub_button\": [\n" +
" {\n" +
" \"type\": \"click\",\n" +
" \"name\": \"联系我\",\n" +
" \"key\": \"contactMe\"\n" +
" },\n" +
" {\n" +
" \"type\": \"click\",\n" +
" \"name\": \"每日古诗\",\n" +
" \"key\": \"poem\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}\n";
try {
String url = MENU_URL + accesstoken;
// 创建菜单的请求体
String post = HttpUtil.post(url, body);
log.info("创建菜单结果:{}", post);
} catch (Exception e) {
log.error("获取token失败:{}", e);
}
}
当然后续我们可以通过微信云托管的springboot模板配置将代码上传至git仓库,让微信云托管进行测试!就像这样:
联系我
@一字先生个人所有
需要源码请联系!
联系方式CSDN:Xsed
掘金:MrOne
公众号:javaPark
哔哩哔哩:一字先生
gitee:https://gitee.com/catchforyou
github: https://github.com/CaseOfShe/
网易邮箱:mr_onei@163.com