00:00
那前面我们修改好了订单的列表展示页,但现在呢,还有一个问题,就是我们这个订单支付成功以后,比如我们这个订单刚才就是支付成功的,但这个状态什么时候改?假设呢,我们现在是跳回页面的时候改,因为我们这个订单支付成功以后会跳到我们这个页面,其实这个时候呢也可以改,我们可以来看一下我们的效果,就是只要支付成功来看一下,那现在呢,来选择一个商品走,那支付成功呢,它会跳回页面来看一下,我们来去提交,然后呢,把这一块的商品来点一个支付宝,那去来进行一个支付,我们使用沙箱账号CTRLC,好来到我们这一块呢,来尝试支付来登录。我们看我们支付成功跳回页面会有什么变化,我来点下一步。来输入我们的支付密码来确认付款,确认付款以后呢,我们看这这呢,现在就支付成功,那支付成功等一会儿呢,又会跳回我们指定的页面,你再来等一会儿。
01:02
好,他说页面呢,正在跳转。好,现在呢,跳回我们这个member order页了,那我们此时能不能改订单的状态呢?因为现在新创建的订单呢,肯定就是这个我们状态呢,其实可以这么来改,大家注意这个auto trade number里边,你看我们跳到我们这个页面的时候呢,支付宝其实还给我们带了好多参数,其中有就有一个叫autotrat number,这就是我们的订单确认页,这就我们对外的订单号,订单号里边呢,有一个051649,来CF来找一下。那就是我们上边的最新的这个订单,所以如果我们是跳到这一块的时候,我们自己获取到这个订单号,能跳到这一页,那说明支付成功了,那去数据库改一下订单状态也行,但是这个呢比较危险,万一呢,别人给你传来的这个订单号,或者用户现在恶意,他呢创建了一个订单没有支付,他自己呢,把这个订单号给这一填一回车,这样呢是不是不安全,但如果我们想要这样做的话也行,那为了安全起见,大家会看到支付宝给我们传了这一块数据,除了有这一块数据,还有一个签名,所以如果你想在做这个跳到这个页的时候,我们去把订单的状态改,那你就一定可以把这些数据拿到以后去来验证,这个签名就是支付宝拿支付宝的工具来验证他传的这个签名对不对,如果签名对的,跟这些数据对的,那就没问题,你拿着去改,但是呢,我们有一个更好的方式,也是支付宝推荐的方式,我们可以来看一下。
02:38
在我们这个文档这一块,我们来还是找到文档中心,我们电脑网站支付,我们现在来到这个文档中心,电脑网站支付,电脑网站支付呢,我们配过两个回调,第一个回调呢,是我们的阿里支付的这个同步回调,就是我们支付成功以后跳到这个页面,我们说去这个页呢,你可以去改,但是一定要验签名,所以们在这儿来指定一下,们可以在这儿获取到支付宝,支付宝给我们传来的所有请求数据,所以虽然你告诉支付宝成功以后要跳到这儿,但是支付宝呢,跳到这儿会给我们携带超多的数据,我们可以从request原生的request对象里边把数据呢都获取来,主要呢要验证签名,要验证签名,我们一会还要用验证签名方法,方法这一块呢,大家先不用关心,知道一下验证签名如果正确了,如果正确我们可以去修改啊,如果不正确,那就是用户自己乱篡改的。
03:38
当然呢,我们说这个方式我们不推荐也不好,那我们现在呢,还配了另外一个叫异步回调,那如果是我们这个同步回调的方式,我们跳到这儿改,那万一用户浏览器支付成功以后,它的这个浏览器崩溃了,关了,那浏览器呢都没开,想要跳到这儿也跳不了了,所以这一刻呢可能就改不掉了,所以接下来呢,我们就还有一个东西叫异步通知,异步通知呢,这是我们这个支付宝,只要支付成功以后,它呢就会给我们指定的地址去发一个请求,这个请求呢,还会带上之前的支付成功的这些消息数据,然后我们收到这些数据以后,我们再去改我们的订单,这个呢非常可靠,而且大家可以来注意一下,来到我们这个支付宝的文档这一块,我们这一块呢,有一个异步结果通知,就是说我们这个用户支付完了以后,支付宝呢,会根据我们传入的notify UR URL,那就是这个,然后呢,它会以post。
04:38
请求的形式,注意这是POS的请求,将支付结果作为参数通知给我们,然后呢,相当于所有的支付结果,支付宝会给我们发一个POS请求,那假设呢,支付宝就是一个客户端,我们现在成了服务器,他去调我们方法了,但调我们方法呢,他会给我们把这些数据呢通知过来,比如有一些公共参数,有这么多的数据,各种时间等等,还有一些业务参数,比如支付宝的这个交易凭证,每一个支付成功以后都有一个交易凭证,包括呢,支付宝也告诉了你这个我当前呢是哪个单号,支付成功的这个单号呢,就是我们商户自己传给支付宝,他商家的自己的单号,然后呢,还有剩下的所有信息这块呢都有,而且呢,大家注意。
05:27
这一块呢,触发条件,支付宝的这个异步通知什么时候触发这一块呢,有false false false,那接接下来就有一处,就是只有我们这个交易成功,就是我们支付成功以后,支付宝呢,就会触发我们这个异步通知,而且触发的这个时间我们可以往下看一下。支付宝异步通知的这个特性,这个特性里边呢,有这一条,他说我们这个程序执行完以后,需要打印success,这个我们不说,看下边他说呢,如果商户反馈给支付宝不是这个看好啊,支付宝服务器会不断重发通知,也就是说我们的这个异步通知,支付宝宝呢会不断的发送给我们,就是告诉我们支付成功了,而且呢,只要不超过24小时,22分钟一般呢就是25小时,它完成八次通知,间隔频率一般就是我们刚支付成功,给我们通知一下哪个订单成功了,接下来隔四分钟十分钟,然后呢,一小时,两小时,六小时,15小时,他呢会通知我们一次,所以也就是一句话,支付宝呢,只要我们支付成功,就会调用我们异步通知的地址,不断的通知我们这个订单结算成功了,如果我们收到通知以后,我们返回给支付宝。
06:46
Success,那支付宝相当于就知道,诶我们已经把这次交易成功的结果他知道了,支付宝呢就再也给我们不发了,所以呢,支付宝是利用这个异步回调,其实支付宝的这个异步回调其实就是我们说的分布式事务,这个分布式事务就更分布式了,直接是支付宝要跟我们的数据到达状态一致,支付宝说这个订单成了,然后我们要修改成这个订单是成了,那怎么一致呢?支付宝用的是最大努力通知方案,支付宝一会儿告诉我们这个订单成了,一会儿告诉我们这个订单成了,一会儿告诉我们这个订单成了,那只要我们真正处理完了,相当于给支付宝响应一个success,我处理成功了,那支付宝呢就不通知我们了,所以我们接下来就专门来配置一个我们的异步通知,而且呢,因为异步通知支付宝要访问我们的服务器,所以一定得保证我们服务器外网必须访问通的,你再接下来写这个网址,那就完蛋了。因为我们这款。
07:46
二的网址呢,我们现在是模拟古力妙IL商城的网址,我们这个网址呢,是外网不可用的,或者外网可用,这是别的公司的网址,支付宝就通知给别人了,所以我们现在呢,一定是用我们内网穿透的地址,保证支付宝能访问给我们,然后呢,专门我们来指定上一个地址,比如原来呢,它叫notify URL,那我们呢,现在就叫pad,那么支付以后的这个通知,Notify啊这个通知,那么假设呢,就有一个这个能来处理我们支付成功后的请求,那接下来来到我们的订单服务里边。
08:21
好,来到这个订单服务里边呢,那为了这个方便起见,那么这个listener我来专门来写一个叫order paid的listen,那么订单支付成功的这个监听器,那这个监听器呢,又不是监听rabbit MQ的什么消息,它有一大特点就是支付宝要给我们指定的这个地址发请求,所以呢,它其实是一个处理器,我们就来写一个ctrler,然后呢,这个处理器呢,还要响应success数据给支付宝,所以我们来写一个rest ctrl,它能响应我们这个数据,而不是跳转页面,而且呢,支付宝也说了,我们呢,程序执行完以后,不能执行页面跳转,如果跳转呢,支付宝只要不收到success字符,支付宝就认为我们这个结果呢,处理异常了,它就会重发通知,一直呢重发通知,所以我们现在呢,就来写一个支付宝,专门能处理我们的请求string,然后呢,我们就叫handle,那么这个叫阿里pad,那么这个相当于订单支付成功的这个。
09:21
请求return return什么呢?支付宝告诉我们,如果我们处理完了,一定要return success就是这个字符串,别的什么都不行,只要我们知道了,知道了相当于收到了收到了支付宝给我们异步的通知,异步的通知告诉我们这个订单支付成功了,告诉我们订单支付成功,那我们就应该返回success,返回success,支付宝呢,就再也不通知了,然后呢,支付宝就不再通知,支付宝就再也不通知。所以呢,现在就是返回这个,而且呢,支付宝告诉我们这个异步结果通知,它呢是一个POS的形式给我们发请求,所以呢我们来写一个叫post map,保证呢我们能收到支付宝的通知,然后呢,我们处理一个请求,因为我们这配外网呢,穿透到我们的这个请求,叫pad notify穿透到这,所以我们想要能收到支付宝的通知,包括支付宝给我们通知啥数据了么?Http request来我们可以来收一下,怎么说呢,我们直接request get,它呢有一个get request,点一个get request相当于我们这个请求参数get,那我们也不获取某个,我们直接将所有的请求参数这个map我们都来拿过来打印一下,看支付宝支付成功以后都能给我们返回哪些数据,S out,支付宝通知到位了,诶到位了,然后呢,这个。
11:00
数据呢,数据是这个,我们把这个数据呢,打印一下就是它,所以呢,我们现在就专门有一个方法来接收我们这个支付宝的异步通知,那现在我们要做的效果就是必须内网能穿透到这个方法,所以我们来配置我们自己的内网穿透。我来打打开我们这个穿透的这个控制台,好,然后我们来重新登录一下,来配置一下我们的这个穿透地址,我们来写一个编辑以前这个穿透地址呢,直接访问我们本机的八零,八零端口,现当于访问我们这个eclipse开启的这个tomcat,现在不了我们接下来内网主机的这一块地址,他说可以填写内网任何的IP或域名,那我们就来填写order,点鼓励mail,点一个com,相当于呢,我们来访问内网的订单鼓励mail com,那订单鼓励mail com,我们现在呢,已经配了它其实是虚拟主机地址,然后呢,接下来我们访问的是什么端口,我们就直接是八零端口,因为我们这个呢,发送old古ma com请求,我们不用带端口啊,八零端口,然后呢,从这儿它会到达虚拟机,所以呢,我们现在把内网穿透地址配成这个,我点一个保存,保存以后呢,我们现在先自个。
12:20
啊,来测试一下我们访问外网的这个我们说的这个通知,这个notpad notify请求能不能访问通,能访问通我们就配成功了,现在来重新测试,我们将订单服务来重新启动起来,我们使用外网地址来测试一下我们这个请求路径们先来复制一下我们这一块的外网地址,好,我来复制,复制成功,我们接下来就是要访问它下边的,我们现在呢配了一个叫pad notify,这个来看能不能访问得通,好我们来稍等一下,我们这个订单服务启动成功,好这一块呢,现在已经启动成功,接下来我们来访问一下,来访问外网的pad notify,我点一个回车,然后呢,这说404NOTE found,然后我们控制台没打印,那没打印的原因是什么?我们可以来看一下,我们在这呢,其实已经配好了外网的这个什么什么点net,我们虽然呢,这一块没有成功,但如果我们访问它,我们发现呢,访问的其实。
13:20
这恩古丽妙尔想我们这个恩已经访问到了,但为什么没访问到我们这个项目呢?我们就得做一个重新设置来看一下这个图,其实是这样子的,那么现在呢,配了内网穿透,那么确定呢,把这一块的外网的地址映射到我们内网主机的order点鼓励mail.com,当我们无论映射成啥,然后呢访问的时候,那现在呢,默认访问的是N,给我们第一次搭配的这个默认页就是古力麦尔com,相当于我们现在呢,如果我们使使用外网访问这个网址,然后呢,我的电脑因为装了我们这个内网穿透软件,所以访问我们这个网址,我们的内网穿透服务商就会代理给我们电脑,然后呢,我们电脑由于我们说要访问order点古立麦IL,所以呢,我们电脑里边装的这个内网穿透软件,他们就会将这次的所有请求,这个什么点net下边的什么PA pad这个请求,然后呢发给order古Lima。
14:20
然后呢,他发order鼓励mail的时候,问题就来了,因为我们内网传统软件呢,它不是一个浏览器,所以他发请求的时候呢,没有带这个host头,而就算带了也是我们这个外网的host主机地址,所以呢,他把我们这个请求转给虚拟机了,没问题,但是由于请求头的问题,没转给订单服务,所以呢,现在就是这个问题来把这个问题呢,加上现在就是我们这个请求头,请求的host主机头,请求host头不匹配,不匹配呢,导致我们这个没有转过来,所以呢,我们为了让host请求头匹配,那只要是给我们发来的请求,我们来做一个精确映射,只要你叫pad notify,那呢你就是订单服务的,所以我们来到我们的这一块NX配置,那直接CD到my data,我们来到NXCD到N来做一个精确配置,CD到conig。
15:20
然后呢,N里边有非常多的配置文件,但是配置文件呢,他们两个会共同起作用,哪个起作用就是看哪个路径更精确,所以我们直接配到我们这个鼓励mail com里边,我们不用CD,我们使用VI鼓励mail com,好,我们来修改一下这个,我来进入哎输入模式,我们把我们的这一段我来复制一下,复制然后呢,我们。插入到下边来,插入到这来点一个粘贴好,然后呢,接下来我精确模式呢,我指定成你只要访问我的这个pad notify请求,好pad notify走我们这个最精确的请求呢,我们最好放在最上边,我把这一块呢剪切一下。
16:06
好,我来整一个复制,我把这一块呢全部删删掉,如果是我们精确的这个叫pad notify的请求,那我呢就给你转给订单服务,所以呢,我们来在这一粘贴走pad notify这个请求,然后呢给我们转给后台的网关集群,但网关集群呢,我们以前设置是设置好它的host色地址,但是呢,我们现在host地址不能由你的来了,因为有你的来的话,你的这个地址还是外网地址呢,所以我们呢将host地址直接改为order,点古里ma点一个com,那这样我们的整个流程就变成这样,我访问的虽然是外网的网址,然后来到我们的电脑,我们的电脑内网穿透软件,根据我们的配置访问order古mail com,然后呢,这个配置其实相当于去来把这个古力ma com变成了IP,然后呢,访问到NG了没问题,但又由于请求头不匹配访。
17:07
分不到我们这个相关的配置,所以呢,我们现在修改了古力mail这一块的配置,因为这两个配置呢,都是按照精确优先配到谁哪里都一样,你配这里边也一样,所以我们给这里边配了一个精确的pad,然后呢,我们让你转发到网关集群,所以我们现在看到呢,这一块只要是配的这个请求转给网关集群,而且呢,我们还告诉他,我给你指定了一个域名,这个域名呢就是order这个域名,所以你只要发我这个pad notify这个请求是我们这个order这个域名的话,那就来到我们这个网关,由于域名匹配相当于直接交给我们的这个order服务,那来到order服务,那么这个pad呢就能执行了,所以我们就是这么一串逻辑,但你想让以后匹配支付宝,我们以后想要支付宝的所有回调之类的,我们都要整路径的话,那么就可以这么来写pad下边的所有东西啊。
18:01
那我们现在呢,就来这么一配置,配置完了以后来ESC。冒号WQ保存并退出,然后呢,我们来重启一下我们的N瑞斯art n这N重启一下以后,那现在保证访问外网的这个pad要能访问进来,要不然我们这一块的配置就完蛋了,好,那现在呢,要保证外网这一块访问进来,只要是pad notify就应该来到订单服务,订单服务呢给你响应success回撤。N呢说404404,我们把订单服务呢,启动一下,看一下,那订单服务里边呢,确实映射了一个pad notify,对了,因为它呢是post请求,不是get,所以我们还是使用postman来做一个测试,来打开postman,那打开postman来测试,我们来发送。我们呢,给外网来发送我们这个pad notify post类型的请求,然后我们还可以带一个自己的请求数据来测一下,好,我们整个内网穿透的这个环境得慢慢的配好,我们可以来看一下我们最终的效果,我们在这来新建一个请求来进行测试,这个新建请求,请求呢地址是它请求方式是POS方式,然后呢,比如我们带一个属性叫name,等于什么呢?Hello,好,我点一个send。
19:24
来看一下我们整个请求,请求呢,我们还提示是404 404呢是我们N几返回的页面,我们可以看一下N几的访问日志,比如我们直接来到N几的这个日志目录LS,那CD到那这个来看一下CD点点杠来到N几的这个日志目录,我们可以看一下它的这个访问日志,访问日志呢,我们来看它access log,然后呢,我们来找一下GR,来找一下我们这个PA,这个访问日志它是怎么着的?哎,我们发现呢,三个get,一个post,这个post呢,现在是404 404的原因是什么,我们来看一下,比如我们可以来错误日志里边看,有一个呢叫aross log,那同样来grape,我们的paid走,我们来看。
20:10
我们在这呢访问的时候,诶我们这个pad notify访问这个呢,失败了,那失败的这个原因它说no such feel or direct,相当于我们访问这个pad这个目录的时候,它直接去user share inx HTML下边它去找页面了,所以呢在这找页面导致的失败,而且我们这个host色主机地址他也感受到了,是我们外边的域名的这个地址,那说明我们这个内网传统客户端发请求的时候会带上host,但是只是带上的是他自己的,那么来配置一下CD点点杠,我们来到NT的conf f里边LCD到conf d。现在呢,就是他感受到我们这个路径他去这个静态资源里边找了,所以们现在呢,LS我们直接VI我们的鼓励ma这个conflict,那为了不让它在静态资源里找我们这个server name我们都直接可以来加上一个,比如我们来监听的是我们外边这个点net的,只要是我们这个内网穿透地址,它下边的这个配的路径,我们就给它改一下host地址。
21:19
最终的host呢,是我们指定的,然后发给网关,我们再来做一个测试,因为我们我们如果不写域名的话,它默认呢,就去用local host那一块的内容了,好,我们来w q docker restart。In,好,我们来让它重启一下,重启一下一下以后呢,来重新访问CD到my data ls来CD到inx里边来准备看它的这个访问日志,好,那现在呢,重新来访问一个post请求send。好,现在访问成功呢,它提示我们欢迎登录,说明我们访问成功了,只不过我们现在呢要登录,因为我们订单里边所有请求都要登录,所以我们把订单里边的这一块我们也来配一下,来到订单里边找到订单的连拦截器,这个呢,就别让他登录了,那现在是一个异步通知,所以点进来订单的拦截器,你匹配这个或者呢,我们得匹配另外一个,我们再来使用它的这个方法,比如at me,好点一个,我们写一个match,匹配什么呢?就来匹配我们现在新的这个路径,就是如果我们的这个路径叫pad notify,如果你请求的uri路径叫这个,如果你是这个当前的uri路径是这个,我们呢也给你放行,那我们把这个我们就用一个就行了,好,就拿这个路径匹配器,如果呢,你是他。
22:51
或者你是下边的。我们这个来写一个,或者或者我们是下边的,那我们都给它进行一个放行,来重新启动一下订单服务,然大家可以把这一块改造一下,让他呢直接从一个set里边挨个匹配,只要匹配上了呢,我们就可以给他放行,我们现在来测试一下,好,我们这个订单服务呢,现在启动成功,那无需登录呢,应该也能访问,那现在再来测试一下,来发送一个send德请求,好,我们发现呢,返回success,那么整个内网穿透我们就配好了,整个这一块的配置呢,特别重要,来到CT,你这一块配不好,我们这个网关通知不到,能支付宝通知不到,那么这个订单呢,状态就改不了,好我们来到康菲哥D里边,主要呢,就是这一块看特普me康。
23:40
CR,好,我们把这一块的复制过来,来加上这个pad路径以及server,来CTRLC,我来复制一下。给大家把这块的配置呢,也放到我们这个PPT里边。放到下边啊,那这个配置配置呢,就应该是这个样子,只要只有这样的配置呢,才能给他转发到我们这个订单服务指定的功能,那这一块调好,我们下节课就来做支付成功后的回调。
我来说两句