Closed AugustTuan closed 2 years ago
老师讲了什么?
这一集老师完成了从点击支付宝按钮,跳转到支付宝收银台的过程
老师先引入阿里支付的sdk
老师将阿里提供的构造支付数据的代码,抽取成了一个配置类,并且用@ConfigurationProperties(prefix="alipay")
和springBoot配置属性绑定,可以动态配置(公钥,私钥,跳转页面)
再将阿里支付需要的信息抽取成一个Vo
(商品订单号,订单标题,付款金额)
老师构造了一个PayController
,用于处理点击支付发送的请求。
老师远程调用订单服务,根据传入的订单号查询订单信息,set
到payVo
,再传给alipayTemplate
,alipayTemplate
结合公钥、私钥这些配置信息,构造支付请求,支付宝会返回一个响应。
支付宝返回的响应是一个表单+脚本,浏览器收到表单内容会自动提交表单,提交给支付宝的网关。来到支付宝的收银台
这一集对 老师的编程习惯更一步深化认识 13:00
老师根据前端页面会发什么请求来创建Controller
先分析这个Controller需要什么数据,以及会返回什么数据。 再去想为了获取这个数据我要远程调用什么方法,注入什么组件
至于返回数据,老师先一般就让其返回一个hello
学习策略:
掌握程度
课程难度
时间花费
课程收获
遗留问题
3:20 整合支付用的阿里的SDK和中间件的区别?
18:00 为什么数量要转换成string?
20:48 这块代码可以细看一下,他是怎么在配置类里面发送请求的?
阿里支付的sdk包含什么功能?
这里涉及三个页面,支付页面,点击支付宝后的“我的收银台”,使用支付宝支付后跳回成功回调页(哪些是我们自己编写的页面,哪些是支付宝提供的页面?)
10:00 这一集就是点击支付宝到来到支付宝收银台的流程
接口文档
老师讲了什么?
这一集老师就是为了让支付成功以后能够跳回订单列表页(这集主要在搭建页面跳转环境和Debug)
老师先搭建会员系统页面访问环境(动静分离,会员服务引入thymeleaf)
在会员服务创建Controller,接收付款完以后的请求,返回订单列表页
除此之外,为了会员服务能够共享订单登录状态,还需要进行如下操作
引入SpringSession
依赖,进行spring-Session
配置
引入LoginInterceptor
和WebMvcConfigure
学习策略:
掌握程度
课程难度
时间花费
课程收获
遗留问题
接口文档
老师讲了什么?
学习策略:
掌握程度
课程难度
时间花费
课程收获
@TableField(exist=fasle)
的注解遗留问题
@TableField(exist=fasle)
的注解。 为什么要加这种字段来着?接口文档
老师讲了什么?
这一集老师通过异步回调,使得订单支付完成以后可以修改订单的状态。同时老师为了让支付宝能够将请求发送给本地项目,用到了内网穿透
老师先提了一个问题,应该在什么时机去修改订单的状态
老师先提了一个通过同步调用(就是转回订单列表页面),支付宝会携带订单数据和签名。 (但是这样比较麻烦,并且如何浏览器此时宕机了,前端无法将订单号和签名给到后端)
老师着重讲解异步通知。(异步通知可以由支付宝直接将请求发送给后端地址)
支付宝的异步通知就是最大努力通知模式,就是当订单支付成功,将支付凭证,订单号等信息,在25个小时内(4min,10min,1h,2h,6h,15h)不断地发送消息通知,直到后端返回“success”
(老师说这也是分布式事务,支付宝和我们项目的数据保持一致)
然后老师修改支付宝的配置,让支付宝异步调用发送给payed/notify路径。 但是老师后面又创建了一个Listner来监听支付宝发送的请求(我没看出来这是消息啊。。。。这还是只是单纯是一个controller????
然后老师又提到了很重要的一个点,就是支付宝访问gulimall的域名是无效的(这个是我们自己在本机改了DNS解析的),所以为了让支付宝能够将请求发送给我们自己的项目,需要用到内网穿透,使用内网穿透的域名。
老师用内网穿透的软件,新建了一个隧道,将本地80端口绑定了一个内网穿透的域名(相当于访问虚拟机的nginx)
由于内网穿透软件,将支付宝响应数据转发给nginx的过程中,不会携带我们项目对应的host请求头(指定哪一个微服务接收)
老师来到nginx配置,其中由default.conf
和gulimall.conf
这两个会共同起作用,主要看谁更加精确。老师重新配置了精确匹配
location /payed/notify{ //请求路径是/payed/notify
proxy_set_header Host order.gulimall.com; //添加上一个自定义的请求头,也就是订单服务
proxy_pass http:gulimall //转发给网关集群
19:39老师测试以后,进入nginx的logs目录,查看pyed相关的访问日志,查看是否出错# cat access.log |grep 'payed'
出错以后查看错误日志,# cat error.log |grep 'payed'
查看错误原因,发现是因为没有监听内网穿透软件携带的地址
最后,因为访问订单服务会被拦截器拦截,导致跳转到登录页面, 所以老师通过路径匹配器对/payed/notify
路径的请求进行放行
学习策略:
掌握程度
课程难度
时间花费
课程收获
遗留问题
3:45 为什么验证签名的方式不好?
因为浏览器支付成功以后,如果浏览器崩了,没有跳回支付成功界面,那么页无法获取浏览器返回的参数,修改状态了
7:50 老师解释了,支付宝回调的这个地址,也就是gulimall这个网址只在本机有效,外网无法访问,所以必须要用到内网穿透
8:55响应数据不是跳转界面,九八@Controller改成了@RestController?
10:50 这里为什么用getParameterMap?
11:40 说访问本机的8080端口就相当于访问eclipse开启的tomcat
12:00 配置内网穿透的时候,内网主机这里也可以填DNS自己定义的域名?
15:00 完了,我忘了host请求头是什么内容来着
hst请求头指明了请求将要发送到的服务器主机名和端口号
请求路径里面只要带了payed/就会触发nginx转发吗????
接口文档
老师讲了什么?
学习策略:
掌握程度
课程难度
时间花费
课程收获
遗留问题
return"error"
这是不是就是返回了一个字符串?接口文档
老师讲了什么?
这一集老师最后针对付款可能存在的问题,讲解了支付宝提供的自动收单,手动收单的对账功能。
订单已经过期关闭,库存解锁了,用户再进行付款,这样即使订单状态变为已经付款,可是库存已经解锁了,买了个寂寞
使用支付宝的功能,在payTemplate增加一个过期时间,超过过期时间付款,支付宝会返回付款失败
用户在快收单的时候付款,结果由于网络时延,订单还是关闭了,支付宝才返回付款成功的信息
在订单关闭之前,手动调用收单代码
其他各种订单支付的争议,可以使用支付宝的对账接口,查看订单的实际支付状态。
学习策略:
掌握程度
课程难度
时间花费
课程收获
遗留问题
接口文档
P304 商城业务-订单服务-整合支付前需要注意的问题
老师讲了什么?
学习策略:
掌握程度
课程难度
时间花费
课程收获
遗留问题
接口文档