00:00
各位同学大家好,前面的内容中呢,咱们完成了公众号菜单的增加、修改、删除以及查询力保功能,那下面呢,咱们来完成下一个接口,公众号菜单同步的功能,也就是说这个功能实现之后,咱们在公众号上能看到我们生成这个菜单,那下面咱们开始实现这个功能,那功能怎么做?我在图上给大家分一下它的过程,然后咱们用代码实现它的接口,我这里写一下。同步公众号菜单同步之后再。我们之前关注的微信公众号里边,能看到咱们菜单的这个列表信息,那下面我们开始做这实线怎么做我们写下啊,首先第一步操作。咱们需要调用微信提供的一个接口,获取到当前我们进行操作的一个内容,这个内容叫做a set token,然后大家看一下文档里边,我们把这个文档打开,是微信官方文档,这里写到a set token是公众号的一个全局唯一接口调用凭证,公众号里边调用各种接口都需要用到token,而token有效期目前是两个小时,超过两个小时它就失效了。
01:32
咱们需要定时刷新,你重新获取会导致上次的token失效,所以我们目前进行这个公众号菜单同步,需要用到这个token,所以里边第一步就是获取里边这个access token这个值,这是咱的第一步操作,然后这个怎么获取,咱们看一下它文档中的说明,咱往下来看啊,其实做法很简单。通过发送HTP请求,通过get请求,请求微信这个固定的一个接口路径,然后在里边呢,咱们传入主要是这两值,大家看啊,它这个参数第一个是固定的,就是它一个类型填写这个值,第二个是你公众号这个ID,第三个是公众号的密钥,这两呢,之前我们让各位就是关注过我这里边这个测试账号,我的测试账号中呢,有他的ID和密钥,所以咱们一会儿通过这两只来获取,我在偷开,所以各位关注我的公众号进行测试。
02:36
啊,当然你也可以自己申请测试号,你自己申请的话有个问题啊,如果说你没有企业这种营业执照,就没有企业,那你申请那个测试账号不能完成支付,测试号不能做支付,只有真正的号码就真正的公众号才能做支付,所以各位关注我这个后面能进行支付的测试。那这个说完之后,这是我们的第一步,咱们就说到这里,通过调用微信的接口传入参数,最终返回这各位知道一会儿咱们起代码,然后这个之后呢,我们里边的第二步操作。
03:15
给大家写一下啊,第二步呢,咱们就是拿着这个token这个值,再去调用微信的一个接口,最终完成公众号菜单的同步,这是里边的第二步操作,然后这步操作咱们也看一下它的官方的文档。咱们找到啊。就是里边的这个地方同步菜单,咱们找到文档。大家看啊,文档里面说明我们的公众号菜单有一个固定的格式,咱们直接看示例,就是类似于这种格式,首先是一个Jason的对象,里边有它的Jason的数组,包括里边有第一层,第二层这个内容,比如说咱们就给它变成这个格式,变成这个格式之后,最后咱们去调用微信的一个接口,最终实现这个同步,在里边传入和to。
04:12
这是他官方的说明,而现在呢,在微信的官方给我们写好了一个工具的这么一个工具的包,咱用它可以更方便实现,大家看啊,咱们之前项目中引入过一个依赖,这个依赖微信Java MP,咱们用里边封装好的一些方法就能实现公众号菜单同步,一会儿我们进行实现,所以以上是咱们分析的进行公众号菜单同步的一个步骤,下面按照步骤咱把这个接口做一个就能实现。那下面啊,咱就开始写下这个具体接口。首先我们先写第一个接口,获取access to,咱们开始做一下啊,展开怎么做,首先第一步啊,在我之前的配置文件中,我已经写好了两个固定值,一个值是它这个公众号的ID,一个是这个密钥,这两只是固定的,在里边已经写好了,然后写好之后下面呢,咱们继续往下来做,下面我们写上一个工具类,这个归类的写法之前咱们写过,就是通过读取配置文件,把两只取到最终,最后赋值,为了后面使用。另外咱们要请求微信的接口用到HTP可的技术。
05:32
所以这里边呢,我有两个工具类,这个我在我的资料中给大家提供出来了,我把工具类直接复制过来,目前用到是这两个,一个是这个获取配置文件中的内容,一个是HTP可的供应类,目前用到这两个,我先把这些都复制过来,因为后面我们都需要用到。现在我把工具类复制到这个里面来。咱们做个复制。
06:00
等他先拿过来,然后拿回来之后,下面呢,在里边我们先来完成第一个接口。括S里面就是发送get或者post请求,咱们一会儿会用到,所以现在工具类都有了,那下面呢,咱们就开始写下它的具体接口。那我们来写一下啊。首先我在里边写第一个接口,就是获取咱们进行公众号菜单同步,用到这个access token。我写一下啊。把这个写一下,咱们发送一个get请求,然后在里边加上它的路径,这个路径呢,我就跟课件中保持一致,Get a set token。把这个拿过来,下面加上方法。
07:01
帕利考。接口就可以了,那我们来请求一下啊,因为这个过程中呢,是一个固定的路径,包括固定的参数,所以这个步骤我从课件中复制一下。大家看一下啊,我里边的这个地方。注意啊,这个代码各位应该能看懂啊,我用了一个叫损buffer,然后像里面的拼接了我们的地址,这是一个固定的地址,后面三个参数,第一个固定的,第二个ID,第三个密钥。百分号S表示占位符里边需要传参数,然后咱下面给它设置一下路径中的参数。也就是把里边这个ID和的值给它传进去,那怎么做我写一下啊,在里边有个方法叫做form,然后里边呢,咱加上这个叫buffer.to string,向里边传递你的参数,咱目前有两个参数,一个ID,一个密钥,所以按照顺序咱们传一下,那我来写一下啊。
08:17
个I,咱们传。第二个值是里边那个密钥,咱把这两个参数值都传进去,现在就可以了,最终它返回的是拼接好,包括有参数的一个地址,就这个U。所以现在这步骤就完成了,就是咱们拼接了一个地址,刚才咱也看到文档里写到的,它发送的就是在我们的这个位置啊,咱们看一下发送的是一个get请求里边传入参数,就是拼接地址咱们就可以了,可以之后呢,下面咱们开始进行请求,我们发送一个。
09:05
Get请求用刚才的工具类HTTPS。呃,注意啊,别导错包是咱们这个包里面的us里边的方法get方法传入URL,最终返回咱们这个结果。这个结果起个名字,比如就叫这个token,把这个得到,所以现在这个完成,完成之后里面有异常,我们用拆开给它捕获一下,现在这步做到了啊,做到之后呢,我们从里边把它的直取到。那怎么取,我说一下啊,咱们看一下我的课件中,因为它里边这返回的是一个字符串,字符串中呢,有个固定的名字叫里边就是咱们的值,然后把这段代码咱们直接过来,我们看一下啊。
10:00
首先大家看啊。我用到了一个Jason的工具,这个工具呢,我用的叫fast Jason就是阿里巴巴中的Jason,当然你可以用别的工具,然后它就解析字符串,变成Jason的一个object,从里边根据名字把它只取到这个值,就是a set。然后最后我们做一个返回,我们加上退。result.ok传入set,所以现在这步就完成了,然后这里边如果它有异常,那咱给他就是一个fair,或者说抛出一个自定异常之前咱们写那个硅谷课堂。Exception。两零一,然后我加上一个提示,获取这个失败。给他做一个提示就可以了。所以现在啊,我们就是把进行公众号同步的第一个接口完成了获取请求,微信的一个固定地址传入参数,然后把这值取到,所以现在这步就完成了。
11:12
比如说咱们现在啊,完成了同步中的第一步,这各位应该能快速做到,然后做到之后咱们再做第二步,第二步呢,拿着这个菜的to去请求微信的另外一个接口进行同步,这是我们的第二部分,而这步怎么做呢?第一种方式咱们还可以这么做,去拼参数,然后发送个POS请求,这么做是可以的,但是现在这个过程呢,不需要这么复杂,微信里边呢,给咱们封装好了一个工具类的这么一个方法,我们可以直接实现。那怎么做,我写一下啊。首先第一步咱们建个配置类,在配置类中呢,我们NEW2个对象,一个叫微信MP service,一个叫微信MP conf,这两里边传送需要的这些值,然后最终用它工具类中的方法进行实现,那咱们来写一下啊,首先按照课件中的步骤,咱们先建个配置类。
12:13
我在这里边建个包。这个包就叫config。Config里边我来建一个类。咱们就叫。Wecht m,然后在里边把这个内容给它直接复制过来。咱们看一下啊,这个内容呢,都是咱们后面做图目中需要的一些值,咱们看下这个值啊,首先我把这工艺类注入,因为了用到里面那个ID和密。然后往下看,第一个上一个就这个叫做微信service。这是由微信里边给咱们封装好一个内容,包括你看里边啊,有各种的值,然后在里边我们给他。传入咱们下面的这个方法,就是微信MP con这个方法,然后在里边传入咱们需要的值,一个是ID,一个是密钥,用它为了后面使用,这是由微信官方预定好的一个配置类,然后这个选完之后,下面呢,咱们用它的工具类中的方法进行实现。
13:18
那咱来写一下啊,我来做个实践。首先咱们先写这个,然后再写service,把这个最终写出来。那我们来实现一下啊。首先在CTRL里边我们来创建这个方法。同步。菜单的方法,然后在里加上它的提交方式,我就加一个get提交,Get提交里边加上接口路径,路径我跟课件中保持一致,就是sync menu。进行菜单同步,下面加上方法public。造的。然后我起个名字啊,就叫这个,比如就叫。
14:05
Menu,这是我们写的一个方法,然后写完之后在里边加上内容,这个内容呢,我们就调用service中的方法进行菜单的同步,这咱们就叫sync menu进行同步,最后我给它尖锐的一个值,咱们把核心代码都写到。里边,所以现在control完成,下面呢,咱们重点写service service里边把方法我们先进行创建。创建之后来到它的实现类种,核心代码也都在实现类中进行实现。那这实验类为了看到明确啊,我写到上边,方便咱们来查看。我写到这里进行同步,那咱们看啊,这个到底该怎么去做。首先做的第一步,我们在里边呢,给他注入一个对象。
15:00
那咱做个注入啊,说一下注入什么对象,我写一下。加上一个叫。里面加上一个private,这个对象名字叫做service,把这个咱们进行注入。包括大家看啊,刚才在配置类中是不是有这么一个对象,是不是研究出来了,并且里边是不是设置值啊,它就为了得到里边的你的这个对象,就是微信MV service,因为它的封装在里面进行封装,咱们只需要把它的值传进来可以了,我写配类的目的,或者用到这个对象,咱们把它加给他B,然后在里边注入进行使用,这是第一部分,然后写完之后在这里边我们写一下它的具体代码。那我说一下怎么做啊。首先我强调啊,这个做法呢,其实就是啊,调用这个微信MP里边有个方法这个方法这个名字我写一下叫get这个。
16:02
小这里啊。微信service里边它有这么一个方法,给他具体实验一下啊。这个名字啊,它叫get,这个啊get menu service,然后在里边呢,还有一个方法,这个方法我写一下啊,叫menu create,然后各位看啊,里边有多种参数,咱传这个是一个死人字符串,就是把我们需要同步那个菜单,那个格式,那个结构传过来,也就是传承我们看到啊它官方文档中的。这段结构就这段这份结构传过来,他就可以把这菜单同步到你的微信公众号中,我先写个结构,咱一会儿做个具体实现,然后在里边我们看啊,这里边这个方法咱们打开看一下,看它的实现。这是他的官方写到的啊。它里边呢,就是用到这个service,然后service里边用到它的实验类,然后它里边用到我们句子方法,最终进行菜单的一个同步,啊,这是由他给咱们封装好的方法,而咱们需要做什么呢?就是构建成需要同步的菜单的一个格式,也就是同步成这种格式。
17:16
把咱菜单格式变成这个样子,给他传过来就能进行菜单的同步,那咱下面就重点来做这个过程啊,这是由他的工具类的方法给咱都封装好了,咱们直接做个实现就可以了。那咱下面啊,开始进步实现。啊,当然这个过程中呢,有同学可能不理解啊,刚才我们提到其实它的底层呢,是发送一个POS请求,请求微信一个固定地址进行同步,包括咱可以把源码再看一下啊,这位是得到我们这个对象,这对象刚才配置类中,我们项里面传入它需要的值,就是你那个微信公众号的ID和密钥,然后最后他就用这个方法叫menu create,咱们看一下这个方法啊,把源码再看一下。
18:02
大家看里边啊,主要咱看这行代码说的很明确,它怎么样,是不是发送了一个POS请求,请求它的一个地址,然后地址注意是一个固定的地址,你看啊,就这个地址是微信固定地址,然后在地址里边,它就把这个地址请求,包括传入了参数,这次这个结构最终进行才能同步它的底层把这影做到了,而咱们做的就是满足微信同步那个菜单的那个结构的数据给他传过来就可以了,下面咱们开始写这过程。咱们看怎么来做啊。首先大家看它文档中啊,它的结构中呢,第一部分固定的是一个Jason的对象格式,然后里边有一个叫巴屯,这一段结构是固定的,八屯里边是一个什么,是不是数组,然后数组里边你看啊,有它的第一层这个菜单,然后下面叫sub,八屯是它的下一层菜单,在下一层菜单中有很多的type类型,第一个类型叫we。
19:06
是不是就视图说的通俗点就是跳转到某个径中去,另外还有别的类型,比如说可等等啊,那咱根据这个结构来做一个数据的封装,就是把它的一层和二层的菜单做这么一个结构,那咱来写一下啊,最终变成这种形式,它的文档中都写好了,咱就想办法做个封装可以了,那我这里写一下啊。这个过程中呢,咱就借助那个Jason的那个工具实现,这个工具呢,我们刚才提到我用的是一个fast Jason,所以目前我还是用这个工具,当然你可以用别的工具,总之一个目的,把你的数据变成微信官方要求的格式就可以了,不管你怎么变,最终能变成这个样子就足够了,那我现在按照我希望的方式给大家写一下啊,那我看怎么来做啊。
20:00
首先第一个大家看啊,咱们之前呢,有这么两个方法,这是得到所有一级菜单,这是得到所有的就是一级二级菜单封装,大家能把数据得到,然后最终就实现,我来写一下啊第一步。先获取所有的菜单数据,咱们调方法,这次点find menu info,把所有菜单数据我们先得到,然后给它起个名字,就叫这个,呃,Me list啊,咱就叫这个名。这里我来写一下啊,这个名字,这是得到所有菜单的数据,然后得到所有数据之后,咱们往下来看啊,大家看啊,因为咱们最终的目的是变成这个格式,而在这个格式里边,我们清楚的看到啊,这个格式中有这么一个特点,它的八寸的名字就这个名字。是不是固定的,另外在里边啊,下面是一个数组格式,在数组就是八寸下面,数组中有它的一级菜单,一级下边有个内幕叫菜单,下面还有它的二级菜单,所以咱们先把就是button里边的部分先封装,最后再来编外部分,因为外边简单,主要是里边,里边是一个数组格式,那咱们开始做一下啊,看怎么做。
21:25
我想这里啊,先封装八寸它的里边的结构。这个结构看到是一个数组的格式,比如咱们刚才说到的。这个部分button里边是不是个数组,那怎么做我写一下啊,在里边我先用个对象啊,这个名字叫Jason瑞,就是数组格式。里巴巴son中的Jason先变成数组,我给它起个名字啊,比如叫这个,呃,就叫等于上一个叫这,这是我们的第一个,先new个数组,向里边先放数据,然后这个完成之后,咱们下面的把这个list集合做一个便历。
22:11
那我们来遍历一下啊。然后加上一个叫me。Me,不?写下,然后便利的是这个一级二级菜单,这个历史集合,把它做个便利,便利之后呢,在里边我们要进行封装,它的封装里边再来看,包括它的。第一层包括它的第二层,那咱们依次来给他做一下啊,我们来写一下,包括第一层第二层这个数据都做一下,那下面进一步实践,首先它的下面部分我们清楚看到啊。这是不是对象形式啊,这是这是第一层,这是第二层,但是它是对象格式,所以咱们下面有一个对象的结构,我写一下。是一个Jason的对象,咱们叫Jason object这个对象,那我起个名字,这是我们的第一层,就叫这个等于上一个这个Jason object,把这个先创建一个对象,然后创建对象之后向里边来放它的数据,咱们one里边put第一个名字,我们叫这个name,而name中加上它的名字。
23:25
用里面这个叫。就是这个啊。Menu view。点上get name是它的一个名字,这是咱们封装的第一部分,然后封装之后呢,我们继续再往下封装,其实你可以理解为啊,这份封装呢,就是你的一级菜单。咱为了明确把名字写的更完整点,我就叫这个,呃。Menu view啊,咱写的更明确点,你可以理解为这一部分封装的是你里边那个一级菜单。
24:00
啊,当然我要特别说明啊,我这么写呢,只是一种封装方式,你可能还有别的方式,总之一个目的,最终能把这数据封装出来就可以了,这是我们最终的目的。那这里边啊,我们现在把这一级完成了,下面咱就开始封上他的二级菜单,咱们进一步往下来实现。
我来说两句