diff --git a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/request/order/OrderPayRequest.java b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/request/order/OrderPayRequest.java index 82225c02a..353422069 100644 --- a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/request/order/OrderPayRequest.java +++ b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/request/order/OrderPayRequest.java @@ -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; diff --git a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderInfoResponse.java b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderInfoResponse.java index f9da6ffb8..1fa4aa98e 100644 --- a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderInfoResponse.java +++ b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderInfoResponse.java @@ -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`") diff --git a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderPayResultResponse.java b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderPayResultResponse.java index 8effdba9e..59895f859 100644 --- a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderPayResultResponse.java +++ b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/OrderPayResultResponse.java @@ -40,6 +40,9 @@ public class OrderPayResultResponse { @Schema(description = "订单支付宝支付") private String alipayRequest; + + @Schema(description ="支付宝返回参数") + private String body; // // @Schema(description = "支付宝调起支付参数对象(app支付专用)") // private AliPayJsResultVo aliPayConfig; diff --git a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/StoreOrderDetailInfoResponse.java b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/StoreOrderDetailInfoResponse.java index a8e9bf712..37359abdc 100644 --- a/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/StoreOrderDetailInfoResponse.java +++ b/yudao-module-mall/yudao-module-shop-api/src/main/java/cn/iocoder/yudao/module/shop/response/order/StoreOrderDetailInfoResponse.java @@ -205,6 +205,8 @@ public class StoreOrderDetailInfoResponse implements Serializable { @Schema(description = "订单详情") private List orderInfoList; + private String endTime; + // @Schema(description = "订单ID") // private Integer id; // diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/constants/PayConstants.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/constants/PayConstants.java index 9b83d231e..66c31c77e 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/constants/PayConstants.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/constants/PayConstants.java @@ -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"; //支付宝 diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/controller/admin/notify/WxPayNotifyController.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/controller/admin/notify/WxPayNotifyController.java index c6fb90d34..58a0c1376 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/controller/admin/notify/WxPayNotifyController.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/controller/admin/notify/WxPayNotifyController.java @@ -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.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.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.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) { diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/dal/dataobject/order/StoreOrder.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/dal/dataobject/order/StoreOrder.java index d9bbd7e5e..8330de9d9 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/dal/dataobject/order/StoreOrder.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/dal/dataobject/order/StoreOrder.java @@ -10,6 +10,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.Date; /** diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderPayServiceImpl.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderPayServiceImpl.java index 20fff088c..929722584 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderPayServiceImpl.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderPayServiceImpl.java @@ -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.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()); diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderServiceImpl.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderServiceImpl.java index bdd5dd44f..6ccc2f220 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderServiceImpl.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/OrderServiceImpl.java @@ -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()); diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java index 42eca6e55..df938b192 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java @@ -161,7 +161,8 @@ public class StoreOrderServiceImpl extends ServiceImpl{}", params); String orderId = params.get("out_trade_no"); - RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.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.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.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 infoDOS = rechargeOrderInfoMapper.selectList(Wrappers.lambdaQuery().eq(RechargeOrderInfoDO::getOrderNo, orderId)); List recordDOS = new ArrayList<>(); @@ -1356,23 +1393,31 @@ public class StoreOrderServiceImpl extends ServiceImpl"); - // 验证相关参数-金额 String outTradeNo = result.getOutTradeNo(); // 用户支付金额 BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2); // 处理相关逻辑 - RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.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.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.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;