up:: SpringBoot电商项目订单模块前台生成支付二维码接口
说明:
(1) 本篇博客的主要内容是开发【前台:支付订单】接口;
(2) 本篇博客需要注意的点:本篇博客仅仅演示了支付的逻辑,在其中并没有调用支付宝微信等支付接口;
一:【前台:支付订单】接口说明;
1.支付接口,逻辑说明;
2.【前台:支付订单】接口,接口文档;
● 支付接口不需要登录,这仅仅是在本项目的中,是这样规定的;其实,稍微思考一下也可以理解,比如,我在淘宝上下单后,可以把付款码发给我姐让她帮我支付;但需要明确的是,不排除有的项目、有的具体业务,需要登录校验(也就是,需要有权限才能够支付);
二:正式开发;
1.在OrderController中,创建处理【前台:支付订单】接口的方法:pay();
/**
* 【前台:支付订单】接口;
* @param orderNo
* @return
*/
@ApiOperation("支付订单")
@GetMapping("/pay")
public ApiRestResponse pay(@RequestParam("orderNo") String orderNo)
{
orderService.pay(orderNo);
return ApiRestResponse.success();
}
说明:
(1) 请求方式,url,参数要符合接口文档的要求;
(2) 我们在Service层编写了支付的逻辑方法,pay()方法;这将在下一部分介绍;
2.在OrderServiceImpl中,创建支付的逻辑方法:pay()方法;
/**
* 支付订单
* @param orderNo
*/
@Override
public void pay(String orderNo) {
//先根据传入的orderNo,去尝试查询order
Order order = orderMapper.selectByOrderNo(orderNo);
//如果没有找到对应的订单,就抛出“订单不存在异常”
if (order == null) {
throw new ImoocMallException(ImoocMallExceptionEnum.NO_ORDER);
}
//如果订单存在,就进行接下来的操作;
//如果,订单状态还是未付款状态;那么我们就把其设为已付款状态;(其实,这一步就是付款操作);
//在实际开发中,这儿其实要调用支付宝或者微信等支付接口的;之后调用微信等支付接口成功后,才能够去修改订单的order_status字段;
if (order.getOrderStatus() == Constant.OrderStatusEnum.NOT_PAY.getCode()) {
order.setOrderStatus(Constant.OrderStatusEnum.PAID.getCode());//更改订单状态为已支付;
order.setPayTime(new Date());//设置一下支付时间;
orderMapper.updateByPrimaryKeySelective(order);
} else {
//如果,当前订单状态不是未付款,就抛出“当前订单状态错误”异常;
throw new ImoocMallException(ImoocMallExceptionEnum.WRONG_ORDER_STATUS);
}
}
说明:
(1) 首先,要检查下订单是否存在;
(2) 然后,如果订单存在的话:就检查该订单是否是未支付订单:
● 如果该订单是未支付就去调用对一个的支付宝或者微信或者其他方式的支付接口(PS:这儿没有),然后如果调用微信等支付接口OK的话,就去修改订单的状态;
● 如果该订单不是未支付状态,就抛出对应的异常;
(3) 声明:这儿并没有真实调用支付宝、微信或者其他支付方式;这是个必须要了解的东西;此处暂时搁置;
3.在OrderService中,反向生成pay()方法的声明;
三:测试;
通过这个接口的url,可以看到这个接口是不会进行用户登录校验,所以这个接口是不需要登录的;