mall + pay:

1. bar 扫码支付成功后,额外返回 notify
2. notify 在支付回调时,增加幂等处理
This commit is contained in:
YunaiV
2023-07-10 23:06:00 +08:00
parent ca4afc2909
commit cad508def6
8 changed files with 81 additions and 53 deletions

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.framework.pay.core.client.dto.order;
import cn.iocoder.yudao.framework.pay.core.client.dto.notify.PayOrderNotifyRespDTO;
import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderDisplayModeEnum;
import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum;
import lombok.Data;
/**
@ -24,19 +24,15 @@ public class PayOrderUnifiedRespDTO {
private String displayContent;
/**
* 支付状态
* 同步的通知信息
*
* 枚举 {@link PayOrderStatusRespEnum} 类
* 目前只有 bar 条码支付才会出现,它是支付发起时,直接返回是否支付成功的,而其它支付还是异步通知
*/
private Integer status;
private PayOrderNotifyRespDTO notify;
public PayOrderUnifiedRespDTO(String displayMode, String displayContent) {
this(displayMode, displayContent, PayOrderStatusRespEnum.WAITING.getStatus());
}
public PayOrderUnifiedRespDTO(String displayMode, String displayContent, Integer status) {
this.displayMode = displayMode;
this.displayContent = displayContent;
this.status = status;
}
}

View File

@ -5,13 +5,13 @@ import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.pay.core.client.dto.notify.PayOrderNotifyRespDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundUnifiedReqDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundUnifiedRespDTO;
import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderDisplayModeEnum;
import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum;
import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest;
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;
import com.github.binarywang.wxpay.constant.WxPayConstants;
@ -70,9 +70,15 @@ public class WxBarPayClient extends AbstractWxPayClient {
try {
WxPayMicropayResult response = client.micropay(request);
// 支付成功(例如说,用户输入了密码)
PayOrderNotifyRespDTO notify = PayOrderNotifyRespDTO.builder()
.orderExtensionNo(response.getOutTradeNo())
.channelOrderNo(response.getTransactionId())
.channelUserId(response.getOpenid())
.successTime(parseDateV2(response.getTimeEnd()))
.build();
return new PayOrderUnifiedRespDTO(PayOrderDisplayModeEnum.BAR_CODE.getMode(),
JsonUtils.toJsonString(response),
PayOrderStatusRespEnum.SUCCESS.getStatus());
JsonUtils.toJsonString(response))
.setNotify(notify);
} catch (WxPayException ex) {
// 如果不满足这 3 种任一的,则直接抛出 WxPayException 异常,不仅需处理
// 1. SYSTEMERROR接口返回错误请立即调用被扫订单结果查询API查询当前订单状态并根据订单的状态决定下一步的操作。