2018-5-8 微信小程序用户端、支付宝小程序用户端 出现去结算时 响应慢、用户多次点击去结算,后台会出现多个未支付订单的情况
一:业务影响:
用户重复点击去结算,会连续弹出多个支付页面,给用户的体验非常不好,同时会向后台发送多次不必要的请求,用户多的话会给后台服务器产生很大压力
二:原因分析:
用户点击完去结算时,在代码中会处理这样一个流程:
1.首先会处理一下数据
2.去授权获取token(此处也需要向后台发送请求)
3.向后台发起生成订单请求
4.唤起微信支付
由此可见,操作繁多是唤起微信支付慢的一个客观原因
其次去结算点击完之后 并没有限制按钮再次可以点击的条件,所以当用户在未弹起微信支付前如果一直点击,就会出现多个未支付订单
三:解决方案:
方案1:不可行
在调取生成订单接口之前 设置一个loading,并 设置一下mark(遮罩)让按钮不可点击,
不可行原因:由于所有的api请求都已放在request.js里面 在这里设置loaaing ,调取去授权获取token成功之后会把loading给隐藏掉的时候,wx.hideLoading()并不知道你要隐藏的是哪个loading
方案二:可行
具体方案:把去结算 换成一个 button 按钮,在点击一下 之后 设置它的disabled:true,并在接下来的 接口请求失败或者是 支付成功 、取消支付、 支付失败 里都重新设置 它的disabled:false
四:问题扩散:
1.保存用户信息接口并未真正调用
我发现保存用户信息的时候报了403 forbidden 鉴于之前的情况,可能是token 没有传 ,于是调整了一下 保存用户信息接口的调用位置,在存了token之后再调用 保存用户信息接口 问题解决了
2.token接口多次调用
我将代码修改为如果有token、并且token 不过期 就不再请求获取token接口 此时需要结合后台给返回的状态码403 然后清除过期的token 重新发起授权接口问题解决了
五:事件过程:
1. 12:30 提交了 一个体验版, 换成button 按钮, 并在接下来的接口请求失败或者是 支付成功 、取消支付、 支付失败 里都重新设置 它的disabled:false
2.1:20 提交了 一个体验版, 在拒绝授权之后的模态弹窗弹起之前,重新 它的disabled:false
3.6:40 提交了 一个体验版, 解决保存用户信息接口并未真正调用的bug、token接口多次调用的bug
4.7:40 提交了 一个体验版 ,删除无用代码、debug设置为false、更改命名
六:事故总结
1.出现事故,第一点一定要冷静。认真查看自己的代码,去定位出现问题的位置,定位是兼容问题还是自己的写的代码本质上逻辑上就有缺陷。学会复现bug
2.解决问题 一定要学会多途径解决 。方案1不行,我们就及时调整方案2,要学会及时悬崖勒马,千万不可以陷入一个问题思考太久
3.平时自己写代码时就应该留心 自己是不是在某处给自己挖了个坑。自己所担心的问题可能暂时上看不出来什么问题,但用户多了,时间久了,可能就会暴露出来。
4.上传体验版的时候以后一定要注意3点:(1)改成线上环境 (2)把debug 改为 false (3)最好是master分支(提MR 由时哥 合完之后 再切到master分支上 pull 一下 代码 ,上传体验版)
5.如果自己解决不了,请教别人时,一定要描述清楚自己的问题。(首先自己先让自己听明白)不然,信息不对称别人帮你也会浪费不必要的时间