公众号里的h5商城项目,比如买下选择了三个糖果,点立即购买跳到结算页,结算页有个“合计”多少钱,像这种运算都是把商品价格和数量传给后端再从后端拿到,还是前端自己算出来?不过js浮点运算有精度问题,是都交给后端来算吧?
公众号里的h5商城项目,比如买下选择了三个糖果,点立即购买跳到结算页,结算页有个“合计”多少钱,像这种运算都是把商品价格和数量传给后端再从后端拿到,还是前端自己算出来?不过js浮点运算有精度问题,是都交给后端来算吧?
此类业务,一般要求前后端都要进行计算的!
理由:
前端计算价格用于快速显示,提高用户体验,并减少服务端压力。
比如有些需要动态计算价格的业务,此类业务前端一般是onchange事件,根据输入不同,价格不同。如果前端依赖后端计算出来的价格,需要频繁的请求接口,那服务端的压力就会变得很大,同样的页面上价格显示会有短暂延迟!不过您也可以选择将onchange事件改为onblur失去焦点事件,这样确实可以变向的减轻服务端压力,但这样体验又不好!因此前端很有必要计算价格!
后端计算价格用于安全把控
。
如果仅仅前端计算价格,完完全全可以劫持数据请求更改价格,到时候就有可能出现1分钱买100块钱的物品!
展示的价格由前端来算,实际订单价格由后台生成。
因为前端是不安全的,数据是可以被变更的,所以价格必须后台算,也就是说,前端计算的价格,只是给用户看的,实际价格,是后台生成的。所以就产生了另外一个问题,前后端计算价格一致的问题,当然如果后台兄弟够好的话,也可以给前端开一个接口,专门用来给前端计算价格而不生成订单数据,这就要取决于和后台的情感了,毕竟这不是后台必须做的事情。
以前也发生过前端计算价格传给后台,然后数据被有心人拦截,价格全部改为0.01元,而正常的购买商品的案列,为了安全,现在后台是不会使用前端的计算价格的,其他数据也是一样的道理,涉及到安全性的,都应该后台来做。
涉及钱的事情,前后端都要计算
前端计算主要是为了快速响应,提升用户体验
后端计算是为了订单时确定
这就好比JD之类,一般浏览购物车时的计算是客户端计算,但正式订单付钱时是后端计算确认的。
特别有促销行为计算规则,涉及用卷、用折扣卡之类,必须后端确认用户是否有这些东西啊。
涉及钱的话,一般以分为单位,例如5元就是500
,这样不会出现小数,就不会出现浮点误差。
但是后端也要计算价格,前端只是给客户看的,随时都可以直接改请求发个不用钱,所以后端要验证实际的价格。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
其实这个问题根本就不用问,因为必须后端算 。并且过程是这样的 。
1、后台加载订单或者商品,这里订单的总价可以是前端算,但是注意精度。
2、当有代金券或者优惠券等减少金额的也可以在前端算 。但是只是提供展示。
3、订单提交,把订单中的商品信息带过去,包括订单金额、优惠券之类都提交过去。
4、后端接到信息后,应该根据订单中有的商品,重新查数据库得到准确的价格,重新计算然后如果有代金券要校验代金券的真实性和有效性,然后再计算总价。这个总价是有意义的,决定着最后支付的金额多少。
5、有人肯定会问、那前端的总金额提交后台有什么用?可以做一个对比,如果计算的结果和前端的总价有区别,那证明这个订单有问题 。要么是页面没刷新,导致商品价格、代金券之类有偏差,可以直接返回到对应的提示页面,告诉用户刷新重新提交订单。另外有可能信息被篡改,那同样的处理,如果是0.01这种,需要记录日志做对应的处理惩罚或者预防 。
手机打字不容易,有帮助请采纳和点赞。?