fix: 商城支付相关
parent
d14191e8dc
commit
fe3648013c
|
@ -33,7 +33,7 @@ public class OrderPayRequest {
|
|||
@NotNull(message = "订单编号不能为空")
|
||||
private String orderNo;
|
||||
|
||||
@Schema(description = "支付类型:weixin-微信支付,yue-余额支付,offline-线下支付,alipay-支付包支付")
|
||||
@Schema(description = "支付类型 支付宝ALIPAY 微信WXPAY")
|
||||
@NotNull(message = "支付类型不能为空")
|
||||
private String payType;
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ public class OrderInfoResponse implements Serializable {
|
|||
// private StoreCartResponse info;
|
||||
|
||||
@Schema(description = "商品数量")
|
||||
private Integer cartNum;
|
||||
private Integer payNum;
|
||||
|
||||
// @Schema(description = "唯一id")
|
||||
// @TableField(value = "`unique`")
|
||||
|
|
|
@ -40,6 +40,9 @@ public class OrderPayResultResponse {
|
|||
|
||||
@Schema(description = "订单支付宝支付")
|
||||
private String alipayRequest;
|
||||
|
||||
@Schema(description ="支付宝返回参数")
|
||||
private String body;
|
||||
//
|
||||
// @Schema(description = "支付宝调起支付参数对象(app支付专用)")
|
||||
// private AliPayJsResultVo aliPayConfig;
|
||||
|
|
|
@ -205,6 +205,8 @@ public class StoreOrderDetailInfoResponse implements Serializable {
|
|||
@Schema(description = "订单详情")
|
||||
private List<OrderInfoResponse> orderInfoList;
|
||||
|
||||
private String endTime;
|
||||
|
||||
// @Schema(description = "订单ID")
|
||||
// private Integer id;
|
||||
//
|
||||
|
|
|
@ -16,6 +16,8 @@ public class PayConstants {
|
|||
|
||||
//支付方式
|
||||
public static final String PAY_TYPE_WE_CHAT = "weixin"; //微信支付
|
||||
public static final String PAY_TYPE_WE_CHAT_WXPAY = "WXPAY"; //微信支付
|
||||
public static final String PAY_TYPE_WE_CHAT_ALIPAY = "ALIPAY"; //支付宝
|
||||
public static final String PAY_TYPE_YUE = "yue"; //余额支付
|
||||
public static final String PAY_TYPE_OFFLINE = "offline"; //线下支付
|
||||
public static final String PAY_TYPE_ALI_PAY = "alipay"; //支付宝
|
||||
|
|
|
@ -4,7 +4,9 @@ package cn.iocoder.yudao.module.shop.controller.admin.notify;
|
|||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.order.StoreOrder;
|
||||
import cn.iocoder.yudao.module.shop.dal.dataobject.recharge.RechargeOrderDO;
|
||||
import cn.iocoder.yudao.module.shop.dal.mysql.order.StoreOrderMapper;
|
||||
import cn.iocoder.yudao.module.shop.dal.mysql.recharge.RechargeOrderMapper;
|
||||
import cn.iocoder.yudao.module.shop.service.order.StoreOrderService;
|
||||
import cn.iocoder.yudao.module.shop.service.recharge.PhoneRecordService;
|
||||
|
@ -49,7 +51,8 @@ public class WxPayNotifyController {
|
|||
private RechargeOrderMapper rechargeOrderMapper;
|
||||
@Autowired
|
||||
private PhoneRecordService phoneRecordService;
|
||||
|
||||
@Autowired
|
||||
private StoreOrderMapper storeOrderMapper;
|
||||
|
||||
/**
|
||||
* Description: 微信支付回调接口
|
||||
|
@ -130,28 +133,42 @@ public class WxPayNotifyController {
|
|||
log.info("退款通知=" + JSONUtil.toJsonPrettyStr(result));
|
||||
//退款状态
|
||||
if (StringUtils.equals("SUCCESS", result.getRefundStatus())) {
|
||||
log.info("微信退款回调成功");
|
||||
String outTradeNo = result.getOutTradeNo();
|
||||
// 验证相关参数-金额
|
||||
// 用户支付金额
|
||||
BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2);
|
||||
// 处理相关逻辑
|
||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, result.getOutTradeNo()));
|
||||
if(orderDO!=null){
|
||||
if (payerTotal.compareTo(orderDO.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", orderDO.getPayPrice(), payerTotal);
|
||||
return "failure";
|
||||
if (outTradeNo.contains("MEMBER_")) {
|
||||
log.info("-----------------微信会员退款回调成功----------------------");
|
||||
// 处理相关逻辑
|
||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, outTradeNo));
|
||||
if (orderDO != null) {
|
||||
if (payerTotal.compareTo(orderDO.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", orderDO.getPayPrice(), payerTotal);
|
||||
return "failure";
|
||||
}
|
||||
orderDO.setRefundStatus(2);
|
||||
orderDO.setPaid(2);
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
//删除提报记录
|
||||
phoneRecordService.deletePhoneGear(orderDO.getOrderId());
|
||||
//删除本地提报记录
|
||||
phoneRecordService.deletePhoneGearByOrderId(orderDO.getId());
|
||||
// 修改订单状态
|
||||
// 写入
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
}
|
||||
} else {
|
||||
log.info("-----------------微信会员退款回调成功----------------------");
|
||||
StoreOrder storeOrder = storeOrderMapper.selectOne(Wrappers.<StoreOrder>lambdaQuery().eq(StoreOrder::getOrderId, outTradeNo));
|
||||
if (storeOrder != null) {
|
||||
if (payerTotal.compareTo(storeOrder.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", storeOrder.getPayPrice(), payerTotal);
|
||||
return "failure";
|
||||
}
|
||||
}
|
||||
orderDO.setRefundStatus(2);
|
||||
orderDO.setPaid(2);
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
//删除提报记录
|
||||
phoneRecordService.deletePhoneGear(orderDO.getOrderId());
|
||||
//删除本地提报记录
|
||||
phoneRecordService.deletePhoneGearByOrderId(orderDO.getId());
|
||||
// 修改订单状态
|
||||
// 写入
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
}
|
||||
|
||||
|
||||
return "success";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
|
|||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,7 +5,9 @@ import cn.hutool.core.util.ObjectUtil;
|
|||
import cn.iocoder.yudao.framework.common.enums.Constants;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import cn.iocoder.yudao.framework.pay.config.AliPayConfig;
|
||||
import cn.iocoder.yudao.framework.pay.config.WxPayOneAutoConfiguration;
|
||||
import cn.iocoder.yudao.framework.pay.properties.AliPayProperties;
|
||||
import cn.iocoder.yudao.framework.pay.properties.WxPayProperties;
|
||||
import cn.iocoder.yudao.module.infra.api.config.ApiConfigApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
|
@ -24,6 +26,12 @@ import cn.iocoder.yudao.module.shop.service.product.StoreProductService;
|
|||
import cn.iocoder.yudao.module.shop.utils.OrderUtil;
|
||||
import cn.iocoder.yudao.module.shop.utils.RedisUtil;
|
||||
import cn.iocoder.yudao.module.shop.vo.order.WxPayJsResultVo;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.request.AlipayTradeWapPayRequest;
|
||||
import com.alipay.api.response.AlipayTradeWapPayResponse;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
|
||||
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
|
||||
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
|
||||
|
@ -38,6 +46,7 @@ import org.springframework.util.Assert;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -100,7 +109,10 @@ public class OrderPayServiceImpl implements OrderPayService {
|
|||
|
||||
@Autowired
|
||||
private WxPayProperties payProperties;
|
||||
|
||||
@Autowired
|
||||
private AliPayConfig aliPayConfig;
|
||||
@Autowired
|
||||
private AliPayProperties aliPayProperties;
|
||||
|
||||
/**
|
||||
* 支付成功处理
|
||||
|
@ -218,6 +230,8 @@ public class OrderPayServiceImpl implements OrderPayService {
|
|||
storeOrder.setIsChannel(1);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
storeOrder.setIsChannel(7); // 支付宝支付
|
||||
}
|
||||
|
||||
boolean changePayType = storeOrderService.updateById(storeOrder);
|
||||
|
@ -243,7 +257,7 @@ public class OrderPayServiceImpl implements OrderPayService {
|
|||
}
|
||||
|
||||
// 微信支付,调用微信预下单,返回拉起微信支付需要的信息
|
||||
if (storeOrder.getPayType().equals(PayConstants.PAY_TYPE_WE_CHAT)) {
|
||||
if (storeOrder.getPayType().equals(PayConstants.PAY_TYPE_WE_CHAT_WXPAY)) {
|
||||
// 预下单
|
||||
WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = unifiedorder(storeOrder, ip, orderPayRequest.getOpenid());
|
||||
WxPayService wxPayService = wxPayOneAutoConfiguration.wxPayOneService();
|
||||
|
@ -270,6 +284,31 @@ public class OrderPayServiceImpl implements OrderPayService {
|
|||
// storeOrderService.updateById(storeOrder);
|
||||
response.setJsConfig(vo);
|
||||
return response;
|
||||
} else if (storeOrder.getPayType().equals(PayConstants.PAY_TYPE_WE_CHAT_ALIPAY)) {
|
||||
AlipayClient alipayClient = aliPayConfig.alipayClient();
|
||||
Assert.notNull(alipayClient, "获取支付宝支付配置失败!");
|
||||
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
|
||||
//异步接收地址,仅支持http/https,公网可访问
|
||||
request.setNotifyUrl(aliPayProperties.getNotifyUrl());
|
||||
//同步跳转地址,仅支持http/https
|
||||
request.setReturnUrl("");
|
||||
/******必传参数******/
|
||||
JSONObject bizContent = new JSONObject();
|
||||
//商户订单号,商家自定义,保持唯一性
|
||||
bizContent.put("out_trade_no", storeOrder.getOrderId());
|
||||
//支付金额,最小值0.01元
|
||||
bizContent.put("total_amount", storeOrder.getPayPrice());
|
||||
//订单标题,不可使用特殊符号
|
||||
bizContent.put("subject", "商品购买");
|
||||
bizContent.put("product_code", "QUICK_WAP_WAY");
|
||||
request.setBizContent(bizContent.toString());
|
||||
try {
|
||||
AlipayTradeWapPayResponse response1 = alipayClient.pageExecute(request,"get");
|
||||
response.setBody(response1.getBody());
|
||||
return response;
|
||||
} catch (AlipayApiException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// 余额支付
|
||||
if (storeOrder.getPayType().equals(PayConstants.PAY_TYPE_YUE)) {
|
||||
|
@ -349,7 +388,10 @@ public class OrderPayServiceImpl implements OrderPayService {
|
|||
wxPayRequest.setSceneInfo(new WxPayUnifiedOrderV3Request.SceneInfo().setPayerClientIp(ip));
|
||||
wxPayRequest.setAppid(payProperties.getAppId());
|
||||
wxPayRequest.setMchid(payProperties.getMchId());
|
||||
wxPayRequest.setTimeExpire(formatLocalDateTime(LocalDateTime.now().plusMinutes(30), "yyyyMMddHHmmss"));
|
||||
StoreOrder one = storeOrderService.getOne(Wrappers.<StoreOrder>lambdaQuery().eq(StoreOrder::getOrderId, storeOrder.getOrderId()));
|
||||
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(one.getCreateTime().toInstant(), ZoneId.systemDefault());
|
||||
|
||||
wxPayRequest.setTimeExpire(formatLocalDateTime(localDateTime1.plusMinutes(30), "yyyyMMddHHmmss"));
|
||||
try {
|
||||
WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.unifiedOrderV3(TradeTypeEnum.JSAPI, wxPayRequest);
|
||||
// map.put("mweb_url",wxPayUnifiedOrderV3Result.getH5Url());
|
||||
|
|
|
@ -68,6 +68,9 @@ import org.springframework.util.CollectionUtils;
|
|||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -196,7 +199,10 @@ public class OrderServiceImpl implements OrderService {
|
|||
});
|
||||
convert.setOrderInfoList(orderInfoList);
|
||||
}
|
||||
long time = 30*60*1000;//30分钟
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
convert.setEndTime(sdf.format(storeOrder.getCreateTime().getTime()+time));
|
||||
return convert;
|
||||
}
|
||||
|
||||
|
@ -624,7 +630,7 @@ public class OrderServiceImpl implements OrderService {
|
|||
OrderInfoResponse orderInfoResponse = new OrderInfoResponse();
|
||||
orderInfoResponse.setStoreName(e.getInfo().getProductName());
|
||||
orderInfoResponse.setImage(e.getInfo().getImage());
|
||||
orderInfoResponse.setCartNum(e.getInfo().getPayNum());
|
||||
orderInfoResponse.setPayNum(e.getInfo().getPayNum());
|
||||
orderInfoResponse.setPrice(e.getInfo().getPrice());
|
||||
orderInfoResponse.setProductId(e.getProductId());
|
||||
infoResponseList.add(orderInfoResponse);
|
||||
|
@ -1106,7 +1112,7 @@ public class OrderServiceImpl implements OrderService {
|
|||
// } else {
|
||||
// priceResponse.setCouponFee(storeCouponUser.getMoney());
|
||||
// }
|
||||
|
||||
priceResponse.setPayFee(priceResponse.getFreightFee().add(orderInfoVo.getPayFee()));
|
||||
priceResponse.setProTotalFee(orderInfoVo.getProTotalFee());
|
||||
// 积分部分
|
||||
|
||||
|
@ -1304,8 +1310,8 @@ public class OrderServiceImpl implements OrderService {
|
|||
storeOrder.setCouponId(Optional.ofNullable(orderRequest.getCouponId()).orElse(0L));
|
||||
|
||||
// 订单总价
|
||||
BigDecimal totalPrice = computedOrderPriceResponse.getProTotalFee().add(computedOrderPriceResponse.getFreightFee());
|
||||
|
||||
// BigDecimal totalPrice = computedOrderPriceResponse.getProTotalFee().add(computedOrderPriceResponse.getFreightFee());
|
||||
BigDecimal totalPrice = new BigDecimal("0.01");
|
||||
storeOrder.setTotalPrice(totalPrice);
|
||||
storeOrder.setProTotalPrice(computedOrderPriceResponse.getProTotalFee());
|
||||
storeOrder.setTotalPostage(computedOrderPriceResponse.getFreightFee());
|
||||
|
|
|
@ -161,7 +161,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
|
||||
@Resource
|
||||
private RechargeGearService rechargeGearService;
|
||||
|
||||
@Autowired
|
||||
private StoreOrderMapper storeOrderMapper;
|
||||
/**
|
||||
* 列表(PC)
|
||||
*
|
||||
|
@ -1209,49 +1210,85 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
if (flag) {
|
||||
log.info("ALIPAY====MAP===>{}", params);
|
||||
String orderId = params.get("out_trade_no");
|
||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, orderId));
|
||||
if (Objects.isNull(orderDO)) {
|
||||
log.error("订单号错误,未查询到相关信息!入参订单号:{}", orderId);
|
||||
return "failure";
|
||||
}
|
||||
// 验证相关参数-金额
|
||||
String amount;
|
||||
if (null == params.get("receipt_amount")) {
|
||||
amount = params.get("refund_fee");
|
||||
orderDO.setPaid(2);
|
||||
orderDO.setRefundStatus(2);
|
||||
//删除提报记录
|
||||
try {
|
||||
phoneRecordService.deletePhoneGear(orderDO.getOrderId());
|
||||
} catch (Exception e) {
|
||||
log.error("删除提报记录异常{}", e);
|
||||
if (orderId.contains("MEMBER_")) {
|
||||
log.info("ALIPAY====表示充值回调===>{}", params);
|
||||
// 表示充值回调
|
||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, orderId));
|
||||
if (Objects.isNull(orderDO)) {
|
||||
log.error("订单号错误,未查询到相关信息!入参订单号:{}", orderId);
|
||||
return "failure";
|
||||
}
|
||||
//删除本地提报记录
|
||||
phoneRecordService.deletePhoneGearByOrderId(orderDO.getId());
|
||||
// 表示退款
|
||||
// 验证相关参数-金额
|
||||
String amount;
|
||||
if (null == params.get("receipt_amount")) {
|
||||
// 表示退款
|
||||
amount = params.get("refund_fee");
|
||||
orderDO.setPaid(2);
|
||||
orderDO.setRefundStatus(2);
|
||||
//删除提报记录
|
||||
try {
|
||||
phoneRecordService.deletePhoneGear(orderDO.getOrderId());
|
||||
} catch (Exception e) {
|
||||
log.error("删除提报记录异常{}", e.getMessage());
|
||||
}
|
||||
//删除本地提报记录
|
||||
phoneRecordService.deletePhoneGearByOrderId(orderDO.getId());
|
||||
} else {
|
||||
// 表示支付
|
||||
amount = params.get("receipt_amount");
|
||||
orderDO.setPaySerialNumber(params.get("trade_no"));
|
||||
orderDO.setPaid(1);
|
||||
}
|
||||
if (new BigDecimal(amount).compareTo(orderDO.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},支付宝入参验证金额:{}", orderDO.getPayPrice(), amount);
|
||||
return "failure";
|
||||
}
|
||||
// 修改订单状态
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
// 写入 充值档位记录表
|
||||
if (null != params.get("receipt_amount")) {
|
||||
addPhoneRecord(orderDO, orderId);
|
||||
}
|
||||
|
||||
} else {
|
||||
// 表示支付
|
||||
amount = params.get("receipt_amount");
|
||||
orderDO.setPaySerialNumber(params.get("trade_no"));
|
||||
orderDO.setPaid(1);
|
||||
}
|
||||
if (new BigDecimal(amount).compareTo(orderDO.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},支付宝入参验证金额:{}", orderDO.getPayPrice(), amount);
|
||||
return "failure";
|
||||
}
|
||||
// 修改订单状态
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
// 写入 充值档位记录表
|
||||
if (null != params.get("receipt_amount")) {
|
||||
addPhoneRecord(orderDO, orderId);
|
||||
log.info("ALIPAY====表示商城回调===>{}", params);
|
||||
// 表示商城回调
|
||||
StoreOrder storeOrder = storeOrderMapper.selectOne(Wrappers.<StoreOrder>lambdaQuery().eq(StoreOrder::getOrderId, orderId));
|
||||
if (Objects.isNull(storeOrder)) {
|
||||
log.error("订单号错误,未查询到相关信息!入参订单号:{}", orderId);
|
||||
return "failure";
|
||||
}
|
||||
// 验证相关参数-金额
|
||||
String amount;
|
||||
if (null == params.get("receipt_amount")) {
|
||||
// 表示退款
|
||||
amount = params.get("refund_fee");
|
||||
storeOrder.setRefundStatus(2);
|
||||
} else {
|
||||
// 表示支付
|
||||
amount = params.get("receipt_amount");
|
||||
storeOrder.setOutTradeNo(params.get("trade_no"));
|
||||
storeOrder.setPaid(Boolean.TRUE);
|
||||
}
|
||||
if (new BigDecimal(amount).compareTo(storeOrder.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},支付宝入参验证金额:{}", storeOrder.getPayPrice(), amount);
|
||||
return "failure";
|
||||
}
|
||||
// 修改订单状态
|
||||
storeOrderMapper.updateById(storeOrder);
|
||||
}
|
||||
log.debug(">>>>>>>>>>>>>>支付宝订单交易成功!订单号:{}<<<<<<<<<<<<<<<<<<<<", orderId);
|
||||
return "success";
|
||||
|
||||
} else {
|
||||
return "failure";
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String s = "MEMBER_1661994584871321602";
|
||||
System.out.println(s.contains("MEMBER_"));
|
||||
}
|
||||
public void addPhoneRecord(RechargeOrderDO orderDO, String orderId) {
|
||||
List<RechargeOrderInfoDO> infoDOS = rechargeOrderInfoMapper.selectList(Wrappers.<RechargeOrderInfoDO>lambdaQuery().eq(RechargeOrderInfoDO::getOrderNo, orderId));
|
||||
List<PhoneRecordDO> recordDOS = new ArrayList<>();
|
||||
|
@ -1356,23 +1393,31 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|||
public Boolean wxPayNotify(WxPayOrderNotifyV3Result.DecryptNotifyResult result) {
|
||||
log.info("支付通知=" + JSONUtil.toJsonPrettyStr(result));
|
||||
if (StringUtils.equals("SUCCESS", result.getTradeState())) {
|
||||
log.info("WXPAY====result===>");
|
||||
// 验证相关参数-金额
|
||||
String outTradeNo = result.getOutTradeNo();
|
||||
// 用户支付金额
|
||||
BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2);
|
||||
// 处理相关逻辑
|
||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, outTradeNo));
|
||||
if (payerTotal.compareTo(orderDO.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", orderDO.getPayPrice(), payerTotal);
|
||||
return Boolean.FALSE;
|
||||
if (outTradeNo.contains("MEMBER_")) {
|
||||
log.info("WXPAY====会员===>");
|
||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, outTradeNo));
|
||||
if (payerTotal.compareTo(orderDO.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", orderDO.getPayPrice(), payerTotal);
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
// 修改订单状态
|
||||
orderDO.setPaid(1);
|
||||
orderDO.setPaySerialNumber(result.getTransactionId());
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
// 写入 充值档位记录表
|
||||
addPhoneRecord(orderDO, outTradeNo);
|
||||
} else {
|
||||
log.info("WXPAY====商城===>");
|
||||
StoreOrder storeOrder = storeOrderMapper.selectOne(Wrappers.<StoreOrder>lambdaQuery().eq(StoreOrder::getOrderId, outTradeNo));
|
||||
if (payerTotal.compareTo(storeOrder.getPayPrice()) != 0) {
|
||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", storeOrder.getPayPrice(), payerTotal);
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
}
|
||||
// 修改订单状态
|
||||
orderDO.setPaid(1);
|
||||
orderDO.setPaySerialNumber(result.getTransactionId());
|
||||
rechargeOrderMapper.updateById(orderDO);
|
||||
// 写入 充值档位记录表
|
||||
addPhoneRecord(orderDO, outTradeNo);
|
||||
log.debug(">>>>>>>>>>>>>>微信订单交易成功!订单号:{}<<<<<<<<<<<<<<<<<<<<", outTradeNo);
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
|
|
Loading…
Reference in New Issue