公众号merlinsea
支付的过程中需要注意的地方:
1、用户可能存在重复下单的问题,即多次点击提交订单
2、前端提交的订单后台需要查询数据库最新价格
3、用户前端传来的收货人信息还需要和用户的token校验,防止水平越权攻击
4、用户下单以后如果迟迟没有支付金额,应该定时关单的功能
5、用户下单以后,即到图中第5步时,后台应该锁定库存(比如优惠券B),比如用户在电脑端用了优惠券B,然后在手机端也下单也尝试用优惠券就应该拒绝。
提交订单的伪代码
@ApiOperation("提交订单") @PostMapping("confirm") public void confirmOrder(@ApiParam("订单对象") @RequestBody ConfirmOrderRequest orderRequest, HttpServletResponse response){ JsonData jsonData = orderService.confirmOrder(orderRequest); if(jsonData.getCode() == 0){ String client = orderRequest.getClientType(); String payType = orderRequest.getPayType(); //如果是支付宝网页支付,都是跳转网页,APP除外 if(payType.equalsIgnoreCase(ProductOrderPayTypeEnum.ALIPAY.name())){ log.info("创建支付宝订单成功:{}",orderRequest.toString()); if(client.equalsIgnoreCase(ClientType.H5.name())){ writeData(response,jsonData); }else if(client.equalsIgnoreCase(ClientType.APP.name())){ //APP SDK支付 TODO } } else if(payType.equalsIgnoreCase(ProductOrderPayTypeEnum.WECHAT.name())){ //微信支付 TODO } } else { log.error("创建订单失败{}",jsonData.toString()); } } private void writeData(HttpServletResponse response, JsonData jsonData) { try { response.setContentType("text/html;charset=UTF8"); response.getWriter().write(jsonData.getData().toString()); response.getWriter().flush(); response.getWriter().close(); }catch (IOException e){ log.error("写出Html异常:{}",e); } }