微信扫码支付5-支付状态查询

一、查询支付状态

1、service层

接口:OrderService

boolean queryPayStatus(String orderNo);

实现:OrderServiceImpl

@Override
public boolean queryPayStatus(String orderNo) {
    QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("order_no", orderNo);
    Order order = baseMapper.selectOne(queryWrapper);
    return order.getStatus() == 1;
}

2、controller层

ApiOrderController:queryPayStatus

@GetMapping("/query-pay-status/{orderNo}")
public R queryPayStatus(@PathVariable String orderNo) {
    boolean result = orderService.queryPayStatus(orderNo);
    if (result) {//支付成功
        return R.ok().message("支付成功");
    }
    return R.setResult(ResultCodeEnum.PAY_RUN);//支付中
}

二、前端整合

1、api

api/order.js

queryPayStatus(orderNo) {
    return request({
        baseURL: 'http://localhost:8170',
        url: `/api/trade/order/query-pay-status/${orderNo}`,
        method: 'get'
    })
}

2、axios响应拦截

utils/request.js中的response响应拦截器

else if (res.code === 25000) { // 支付中
  return response.data // 不显示错误信息
}

3、支付页面

pages/pay/_id.vue

import orderApi from '~/api/order'
data() {
    return {
      timer: null // 定时器
    }
},

// created的时候就查询支付状态,没有必要,因为二维码页面尚未渲染,不可能支付成功
mounted() {
    // 启动定时器
    this.timer = setInterval(() => {
      this.queryPayStatus()
    }, 3000)
},

methods: {
    // 查询订单状态
    queryPayStatus() {
      orderApi.queryPayStatus(this.payObj.out_trade_no).then(response => {
        console.log('查询订单状态:' + response.code)
    
        // 支付成功后的页面跳转
        if (response.success) {
          this.$message.success(response.message)
          console.log('清除定时器')
          clearInterval(this.timer)
          // 三秒后跳转到课程详情页面观看视频
          setTimeout(() => {
            this.$router.push({ path: '/course/' + this.payObj.course_id })
          }, 3000)
        }
      })
    }
}
posted @ 2020-11-01 15:39  碧水云天4  阅读(699)  评论(0编辑  收藏  举报