00:01
各位同学大家好,刚才呢,咱们完成了生成付费课程订单的接口,那下面呢,咱们完成微信支付的接口,咱们看该怎么去做,首先我们看一下啊,我这里特别提到咱们之前呢,是使用公众号的测试号进行功能实现,但是我说明测试号不支持支付功能,如果说要进行支付需要用到咱们正式的符号,所以一会儿咱通过正式符号进行测试。当然各位同学呢,因为没有正式这个符号,所以这里边一会儿会讲到一种测试方式,那下面咱们开始进行实现,我们看怎么来做。首先第一步啊,你要进行微信支付,那第一步咱们来到我这个正式号里边,大家看里边的这个位置,就是下面这里边叫JS接口安全域名,这里边要写上你的接口那个域名的路径,这是我们那个正式号,这是我们当时那个路径,这是第一个给各位了解一下啊,这一般在公司里边由管理员配置好。
01:10
然后第二部分呢,我们需要到这个就是商户平台,也就是微信支付平台里边来配置一下咱们支付那个路径,也就是你进行支付的页面路径,大家看我图里边啊,我图里边已经配置过了,这是我后来支付的路径,已经完成配置,这是我们那个内网穿透那个地址,也就是这个地址。你看啊,就是这个8080是咱们H5页面项,我们的路径通过域名进行访问,所以这里边已经完成配置,这大家知道一下啊,然后这个之后呢,下面咱们先来编写微信支付的接口,最后咱再说明我们该怎么进行测试,然后整合前端进行实现。那下面我们写一下啊,首先第一个我们现在在咱们这个订单模块中,我们找到service o模块,咱们创建一个controller controller,我起个名字,这个名字。
02:10
微信配controller,就是微信支付controller在上面加上它的路径。我把路径。复制过来第一个注解,第二个rest controller,第三个路径API,微信配现在这个完成,完成之后呢,在里边我们进一步往下实现,然后怎么实现,咱们把service先完成注入。那我写一下啊,注是service,这个是微信配service service呢我在里边应该没有创建,那我下面呢把它创建下,在service里边我们先进行创建。咱们写一下啊,然后给它起个名字,我跟课件中保持一致,微信配service这个经创建。
03:00
小这里,然后创建之后我们再来创建它的实现类,在这里边写一下。让他实现这个。微信配service。然后别忘记在实现类上边我们加上这个service注解,所以现在这个完成完成之后我们完成这个注入。这是咱们写到的,然后下面呢,加上方法,那就是进行微信支付方法,这个方法根据咱们生成订单里面的一个订单ID或者订单号进行支付,那这个路径给各位复制过来。咱们写这里。大家看啊,在里边我想这个方法,然后里边根据订单号完成订单的支付,里边就传入这个O的no就是订单号。然后这个选完之后,咱们下面就来调用service里边的方法完成支付功能,那我们来调一下啊,比如说我还是叫这个名字,然后里边传入订单号,最终呢,我们让他就返回这么一个map集合,因为里边有很多数据,后面咱们需要,所以把一个ma集合返回进行封装。
04:19
加上瑞。加上。最后咱们做一个。点OK,传入map,现在CTRL部分我们就完成,完成之后呢,下面咱们来写下service,在service中把方法先进行创建。微信支付创建之后来到实现类里边,把最终方法咱们给他最终完成。然后这个方法特别说明,在微信官方它有详细的说明,其实这个方法呢,就是调用微信的接口,然后里边传入微信需要一些数据,最终完成这个支付功能,那下面咱们就开始把这个最终功能,我们来做一个最终的实现,咱们进步来写一下。
05:13
然后怎么实现呢?我们强调啊,我先把步骤写一下,然后给各位同学进一步实现,首先第一步怎么做呢?咱们先封装微信支付需要的一些参数,把这个做到这个封装咱们使用一个map集合完成,这是我们的第一步操作。然后这个之后我写一下啊。我们的第二步操作,那咱们就是通过这个HTTP可烂的方式去调用。微信这边一个支付的接口,这接口是由微信约定好一个固定路径,咱们需要把参数传进去进行调用,然后调用之后我们下面这个微信的这个支付接口给咱们会返回一些相关的数据,然后咱们把数据进行封装,最终进行返回就可以了。以上就是一个基本的步骤,那下面再来写一下啊。
06:15
在这过程中呢,因为用T里工具,那我们看一啊,这个工具呢,之该是这个里边复制过,就这个htp client us,咱后面用它发送HTP看通请求,那下面我们来写下啊,首先第一步咱们先创建一个map集合,我做个创建。加上这个string啊,为了方便这个我也加个string,因为它都是这个基本结构,然后加上之后我们起个名字,我就叫这个map。等于new上一个哈希map向里边传入它的参数,这个参数是固定的一些名字我就不写了,因为是固定的,我从课件中直接复制过来,因为文档中约定就这些纸,这各位同学自己写的时候把这些直接复制可以了,那我现在啊,把这些拿过来,咱们来看一下啊,里面这些值。
07:18
咱先拿回来啊,然后咱们一个一个来看啊,首先咱看第一个值,第一个值是什么呢?就是你当前这个公众号里边有几个值,我强调啊,这几个值啊,有一些固定的数据,那咱看一下啊,咱们看一下当前项目的配置文件中。大家注意啊,在配置文件中呢,这里边啊,因为这个值应该没有小这里啊,咱找那个user模块中有这么两个值,你看啊,这是公众号平台的ID,这是它的密钥,但现在呢,咱做支付有另外的这么一套值,那值是什么呢?我强调啊,第一个还是公众号的ID,然后第二个值叫做商户号,另外还一个值叫商户key,就是有三个值啊,不是这个商户key,所以咱们需要有这三个值,这三个值我在资料里边给大家提供出来了,就是商户ID,商户号,还有商户key,这些纸咱们通过公众号是可以看到的。
08:23
比如说咱们看一下啊,这是你的公众号ID,这是商户那个K啊,另外有一个商户号等等值商户号,咱也找一下,在这里边有一个微信支付点开。然后你看里边的这个位置。啊,这这里来看啊,应该就是在这里。商户号里边等它加载出来啊,这里这就是他那个商户号,所以咱们需要这么几个值,而这几个值呢,因为刚才我提到了啊,我们使用过程中,你用测试号并不能做支付,所以咱们现在通过正试号进行测试,那我现在这么来做啊,我在配置文件中呢,复制这两个值,就把值放到配置文件中进行操作,或者说你在里边直接写固定都是可以的,我这里边为了测试方便,我就在里边写固定了,这是我那个正式号的ID,正式号的商户号,我们在里边写固定,或者说你放到配置文件中都可以啊,咱就这么来做了。
09:25
我这里加个注释啊。第一个是你的正式的。这个服务号的ID。然后第二个是你这个正式号的这个符号的这个商户号。写一下啊,服务号的商户号这些值都需要在公众号中能看到,然后大家看第三个值,这个值是什么呢?它就是生成一个随机数,每次你支数都要有一个随机数,而随机数就是每次支付订单都不一样,所以咱用它进行实现。
10:03
那咱们啊,把这个加上,而随机数咱们用的时候,我们需要通过引入一个依赖,用到这个工具类叫微信配U进行生成,那咱们啊把这个依赖给它引入进来,然后咱们往下进一步实现。咱们来到课件里边,大家看啊,这个位置SO的模块,我们引入这个依赖,就是微信配SDK,把它我复制到我项目的po文件中来,那咱们做个复制,在里边把这个直接拿过来,然后里边加上这个一览。等它加载完成。然后加载完成之后,咱们再来到这个实验类中,把这个依赖给它引入,用这个微信提供到工具类,能生成一个随机的字串,这个就可以了,然后下面有个叫包底,包底什么意思呢?我强调啊,它就表示比如说你现在用微信支付,最终肯定会弹够框,然后里面让你支付,就你弹框之后微信中显示那种,咱为了测试我就写个test了。下面一个好理解,就是咱的订单号,然后这里边有一个叫支付金额,这支付金额我这里写到啊,我们这位置是为了测试,所以统一咱们支付都是0.01元。
11:23
这是咱们的约定啊,为了方便,下面是什么呢?当前支付客户端的IP,因为我们是本地这个IP,然后这个是支付之后的跳转,这个咱应该暂时没用到,我也随便加个路径,然后最后一个叫type,是当前你支付这个二维码,或者支付这种类型,咱们支付就是直接弹购框,然后里边直接按照固定的金额进行支付,这是一种支付类型。写下啊支付类型就是按照。这么写,按照生成的固定的这个金额进行支付,这种什么意思呢?说的具体点啊,比如说各位同学在日常生活中,假如说我现在啊,去某个小超市买瓶水,一瓶水可能一块钱,可能两块钱,那这时候拿完水之后,咱们扫那个商家二维码,是不是要输入金额进支付,这是一种形式,还有一种形式是什么?我们扫二维码直接支付,那这个时候不需要你输入金额,直接按照生的金额进行支付,这种类型就是按照生成的固定金额进行支付,这各位知道啊,然后除了这个之外呢,下面还有一个地方。
12:38
这个地方呢,我特别说明啊,给大家把这注释写的详细点,说一下这部分我们要做什么事情。首先我强调啊,下面这里边呢,我们需要设置这个参数值是什么呢?是你当前这个微信用户这个open ID把这得到,而微信的open ID咱们之前在第一次授权的时候,在咱这个user info表中是不是加入了我这个op ID值是不是已经取到了,所以咱们用它可以实现。
13:13
就是这里我写一下啊,就是咱们按照我们目前的实现的逻辑。我写一下什么逻辑呢,你看啊,我当前有一个订单号有这个值。而咱们看啊,找到订单表里边订单表。你看里边啊,有我的订单号,那我订单号根据他是不是能得到你用户ID,然后根据用户ID是不是能得到你的open ID,所以咱们可以这么来得到,我在里边写一下啊,首先第一步。咱们。根据我们的,我这么写啊,就是第一步。根据订单号获取到你的用户ID,然后第二步再根据用户ID获取到我们的open ID,这么做是咱们目前实验逻辑是完全可以做到的,所以这是我们一个过程,但是咱们现在你看我这里边啊,并没有这么写,为什么没有这么写呢?为了咱们测试方便。
14:13
我说一下啊,就是我们最开始说到的,因为咱们为了进行测试,或者说因为咱们当前使用的是测试号,而测试号呢,是不支持这个支付功能的,因为这个真正的服务号里边的值我不能给各位,就是把你加成我们负号的管理员,这不可能,所以这里边各位没法测试,所以咱为了能测试。啊,就是我们为了能使用这个。正式的服务号。进行测试,所以咱们才用下面的方式啊,才使用下面的这个写法。如果真正在写的过程中,就是实际的项目中,那你按照这个第一步,第二步OD可以得到,然后设置就可以了,咱这里为了测试,所以我用下面写法,下面写法就是获取的是你的那个正式服务号里边你微信的那个。
15:15
Open ID注意啊,正式号中的open ID跟测试号中的ID是不一样的,两个ID不同,所以咱们需要用别的方式进行实现,这里边我为了测试我是这么做的,直接手动来设置一下你的open ID啊,这是我们的方式啊,就是咱们一会儿我们会这么做,通过其他的。这些方式。或者其他的做法来获取一下正式服务号的open ID,然后咱直接给它设置进去啊,为了我们进行测试,这是我们目前的做法,为了所有同学都能测试,所以咱直接这么做,但是实际项目中按照第一步第二步实现,因为咱目前第一步第二步做到这个open ID是咱测试号的,不是正式号的,而正式号还不能完全给各位开放,所以咱们用这种方式一会测试啊,把这功能能测出来就可以了,然后这种方式怎么获取,咱们一会儿进行说明。
16:17
这个啊是咱们目前逻辑先放到这里,比如说咱们继续做到这是那个微信的open ID址,咱要得到正式号的open ID才能测试,测试号不支持支付功能,这个各位知道啊,所以以上是咱们设置的这些参数就完成了,这部分各位直接复制就可以了,这些值我们目前都是固定的,就这两个值是固定的,不能改变啊。就是是固定的值,你不能改变,因为我们目前的正式号就是这个值。然后这个之后呢,咱的第一步完成了,第二步就来发送HTP请求进行操作,那我来发送啊,HTTP找到咱们工具的,我起个名字就叫。
17:07
Client等于上一个HTPS,在里边加上请求微信支付那个路径,这个路径我到课件中找一下,就是咱们的这个路径。强调啊,这个路径是微信官方固定的一个路径,用它完成支付,所以咱们直接复制,不要复制错,然后这个之后往下看,下面呢,咱们来设立一下请求的参数,无分。我来设置一下啊,首先第一个可里边加个方法叫set叉什。大家看这方法什么名字,是不是设置参数,什么参数,叉M格式参数,所以咱就需要把这map集合转成叉M格式,并且用里边一个叫商户key进行编码处理,需要做这个事情,那怎么做给大家写一下啊,在微信里边有个工具类微信配。
18:07
然后里边有一个方法,这方法咱们看一下啊,这个方法叫generate。叉L里边传输第一个就是map集合,第二个是你的商户key,商户key就是我们的这个值,也是一个固定值,通过微信符号的正式号能找到这个,我就直接复制过来,然后最终返回的是一个字符串,这个字符串就是叉L格式。我给它起个名字啊,就叫这个,呃,TL。然后把这个叉L格式这个数据传到里面去,就完成了设置,这里边有这个异常,我们用拆开给它捕获一下啊,然后这个结构给它快速调整下。就变成这个样子啊。
19:01
调整一下。我把这部分都放到这个拆开里边来。所以现在啊,咱完成了这个第一个才用设置,然后设置之后第二部分我们继续来实现,在卡里边有一个方法,大家看这个方法HTPS,然后里面加个处表示支持HTPS请求,因为这里边你看啊路径是不是用HTPS协议,加上处表示它会支持这种协议。呃,这行复制错了啊,少写了写到这里,呃,这肯定不能少啊,刚才给他复制漏了啊,然后这个完成之后,最后那咱就发送真正的请求,这个请求用砍出一个方法就要post完成请求,通过以上步骤咱就完成了请求的过程,这做到了,然后做到之后下面呢,微信这个支付接口给咱们会返回数据,咱们根据得到数据做一个处理。
20:02
那我们来写一下啊。可烂的猪有个方法,Get content。我强调啊。这个方法得到的就是微信接口给咱们返回的数据,但是它反应数据还是这个格式。也就说什么特点呢,咱给它传的时候传的是叉,他给咱们返回的还是叉L,那我需要把叉格式转成别的结构进行实现,在微信这个工具类中同样有个方法,这方法很简单。大家看这方法的名字,叉通map,也就是把叉L格式最终转成map集合,就是它最终得到这个参数,那咱起个名字啊,我就叫。Map,这是我们最终找这个结构,然后这个数据为了咱们后面方便,我做个输出,放在咱们后面的测试。啊,咱们是。
21:01
叉llo给他输出一下啊,后面才会看到,然后后面呢,从这个造的map中能得到它的其他的值,那这些数据包括封装,我从课件中就直接复制一下啊,咱们来看一下啊,就是一个简单的封装过程,值里边有些值需要咱们特别说明一下。然后把这个。拿过来啊,咱们最后来看一下这个结构啊。咱们一行看一下啊,首先大家看第一部分啊。Result map,它这个反应值中有一个固定的名字,这个名字叫code,是微信返回的,而code值如果说是success,那就是成功,如果不是的话就失败,这里边我做了判断啊,如果他这里边的值就是。不是success,那咱表就失败了,失败的话我在里边就是给他直接抛出一个自定义异常,然后做个提示。
22:02
20001提示说这个支付失败。就根据它的值是否是success做个判断,如果它的值呢是success,那从里边把值取到啊,大家看啊,这里边做了封装啊,都是里边固定一些名字,比如说里边有一个这个ID啊,有这个随机字符串,包括最后完成,咱们最终这个结果就这些,然后最终结果完成之后,咱们把它最后做个蕊吞就可以了啊,给它最终就返回下。啊,这个里边呢,这位置我就换成跟它类型一致。所以咱们通过以上这些步骤就完成了微信支付接口,咱们这里边为了进行测试,就是我的这位置换成的是微信正式号的ID,我先写这值,因为咱说明正式号的ID该怎么得到,因为每个人都不一样,这个值咱需要用一些方式得到,这个得到过程咱们只是为了测试,在实际逻辑中咱写的是这个过程。
23:06
啊,这单一会儿完善啊,为了明确我先加上一个土度,就是一会儿我们进行完善的这个代码。所以大家看啊,现在这个基本的结构咱就完成了,就是微信支付的接口部分。咱们先写到这里,然后写到这里之后,下面咱就说明这个op派ID,就是怎么得到服务号的op ID,包括最终怎么进行测试啊,那咱们一会来实现目前这个过程,要求各位能给他整合出来。
我来说两句