CRMEB java电商系统支付相关bug修复

支付取消bug:

当用户支付后,订单处于等待回调状态,且在程序里此时没有任何方法可以判断订单此时的状态,如果此时定时取消任务启动,会认为订单还处于待支付中,就会将订单取消。

订单支付后,显示订单未支付bug:

用户第一次支付,订单此时关联的是第一次生成的外部订单,当用户完成支付后,订单处于等待回调状态,如果此时再次调用支付,订单就会关联第二次支付的外部订单,而用户实际支付的是第一次的外部订单。

以上解决办法就是加一个状态,考虑到多实例部署时的状态共享问题,可以使用redis实现:

多商户代码:

文件 :src/main/java/com/zbkj/service/service/impl/PayServiceImpl.java

    @Resource//引入redis操作工具
    private RedisUtil redisUtil;

  	@Override
    public OrderPayResultResponse payment(OrderPayRequest orderPayRequest) {
   
   
    	//。。。
       	//源代码中的校验。。。
        //改动==================
		String KEY = "ORDER:PAID:" + order.getOrderNo();
        Boolean setIfAbsent = redisUtil.getRedisTemplate().opsForValue().setIfAbsent(KEY, 1, Duration.ofMinutes(3));
        //如果设置成功说明第一次支付,失败则是重复支付
        if (!Boolean.TRUE.equals(setIfAbsent)) {
   
   
            throw new CrmebException(OrderResultCode.ORDER_PAID);
        }
        try {
   
   
           	//支付处理。。。
            return response;
        } catch (Exception e) {
   
   
        	//失败删除	
            redisUtil.getRedisTemplate().delete(KEY);
            throw new RuntimeException(e);
        }
        //改动==================
    }

修改订单取消逻辑
文件:src/main/java/com/zbkj/service/service/impl/OrderTaskServiceImpl.java

    /**
     * 支付订单自动取消
     *
     * @param orderNo 订单编号
     */
    private Boolean orderAutoCancel(String orderNo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值