【学习打卡】第13天 多端全栈项目实战
课程名称:SpringBoot+Vue3 项目实战,打造企业级在线办公系统
课程章节:第三章
主讲老师:神思者
课程学习:
1.微信支付
课程内容:
1. 微信支付 版本 v2
2.创建支付订单
1.本地创建罚款单,用户进行交付罚款
2.支付订单时微信服务器生成,调用api 传入参数就能创建支付订单
每一笔支付订单 都有自己得唯一id , 将来查询这笔订单是否支付成功,就会使用到这个id另外, 商品订单id在我们得项目中也必须要唯一。
例如 我们使用某个商品订单id创建支付订单,第一次创建成功, 但是如果使用重复得商品id,微信服务器就会报错,因为商品订单id 已经用过一次。
3.付款
用户拿微信扫码网站生成得二维码。并不是直接扣款,因为用户信不过卖家,加入商品订单金额100元,但是卖家得系统调用微信平台接口,创建了100得支付订单,如果用户再微信上不核实付款金额得内容,就被骗走了900.
所以当用户拿手机扫码二维码后,自动访问微信平台,然后查询订单得详情,(收款方,支付金额,订单备注)如果用户确认没问题,就可以再手机上输入支付密码了。这个付款请求不是发给卖家(防止串改)而是直接发送给微信平台,微信平台先核对请求内容,然后执行扣款,最后把付款结果发送到商家得后端系统和付款人。
4.确认付款结果
创建支付订单的时候,其中的参数就包含了商户系统的接收付款结果的URL地址,微信服务器会向这个URL地址发送付款结果。但是万事万物总有个特殊情况,万一微信服务器的消息队列宕机了,没能向商家的系统发送付款结果,那么商家系统中的订单状态就依然是未付款的状态。当然了,商家系统没能接收到付款通知的原因有很多,例如短暂的网络故障,程序错误等原因。
与其被动等待付款结果的通知,不如让商家系统主动去查询付款结果。当用户手机微信显示付款成功,但是商户页面上没有出现付款成功的提示,这时候用户可以点击页面上的“已经付款成功”按钮。前端页面会向商户系统发送Ajax请求,商户系统会主动想微信服务器发起查询请求,核对该笔支付是否成功付款。如果付款成功,就修改商品订单为已付款状态。
5. 推送结果到前端
因为接收到付款结果的是商户系统,并不是前端页面,那么前端页面怎么显示付款成功的提示信息呢?第一种办法是前端页面弹出支付二维码以后,就创建一个定时器,每隔几秒向商户系统发出轮询请求,查询商品订单是否为已付款状态。这种做法的优点是简单,不需要复杂的技术就能实现。但是缺点也很明显,那就是增大了网络开销,面对轮询请求,后端项目和服务器负载都增加了。
另一种做法是用WebSocket向前端页面推送结果。传统的HTTP协议是短连接,请求响应结束之后,HTTP连接就断开了。服务器想推送数据给前端都不行,因为连接已经切断了。WebSocket是一种长连接技术,所以前端和后端可以使用某个连接反复发送和接收数据,这效率可比HTTP协议快多了,省去了频繁创建连接和协议握手的时间。你可能有个疑惑,如果客户端和服务器之间不怎么发送数据,维护一个长连接还有必要么?毕竟服务器的网络带宽也是宝贵的。这个尽可放心,我们可以给WebSocket连接设置超时时间,超过这个间隔时间不发送数据,连接就自动切断。
服务器把每个WebSocket连接都缓存起来,然后想要推送数据给前端的时候,就从缓存中找到与之对应的连接即可。你仔细观察,前端和服务端都没有使用定时器,所以CPU的开销是很小的。WebSocket技术要比前端JS定时轮询方案好多了
共同学习,写下你的评论
评论加载中...
作者其他优质文章