fix: 商城支付相关
parent
d14191e8dc
commit
fe3648013c
|
@ -33,7 +33,7 @@ public class OrderPayRequest {
|
||||||
@NotNull(message = "订单编号不能为空")
|
@NotNull(message = "订单编号不能为空")
|
||||||
private String orderNo;
|
private String orderNo;
|
||||||
|
|
||||||
@Schema(description = "支付类型:weixin-微信支付,yue-余额支付,offline-线下支付,alipay-支付包支付")
|
@Schema(description = "支付类型 支付宝ALIPAY 微信WXPAY")
|
||||||
@NotNull(message = "支付类型不能为空")
|
@NotNull(message = "支付类型不能为空")
|
||||||
private String payType;
|
private String payType;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class OrderInfoResponse implements Serializable {
|
||||||
// private StoreCartResponse info;
|
// private StoreCartResponse info;
|
||||||
|
|
||||||
@Schema(description = "商品数量")
|
@Schema(description = "商品数量")
|
||||||
private Integer cartNum;
|
private Integer payNum;
|
||||||
|
|
||||||
// @Schema(description = "唯一id")
|
// @Schema(description = "唯一id")
|
||||||
// @TableField(value = "`unique`")
|
// @TableField(value = "`unique`")
|
||||||
|
|
|
@ -40,6 +40,9 @@ public class OrderPayResultResponse {
|
||||||
|
|
||||||
@Schema(description = "订单支付宝支付")
|
@Schema(description = "订单支付宝支付")
|
||||||
private String alipayRequest;
|
private String alipayRequest;
|
||||||
|
|
||||||
|
@Schema(description ="支付宝返回参数")
|
||||||
|
private String body;
|
||||||
//
|
//
|
||||||
// @Schema(description = "支付宝调起支付参数对象(app支付专用)")
|
// @Schema(description = "支付宝调起支付参数对象(app支付专用)")
|
||||||
// private AliPayJsResultVo aliPayConfig;
|
// private AliPayJsResultVo aliPayConfig;
|
||||||
|
|
|
@ -205,6 +205,8 @@ public class StoreOrderDetailInfoResponse implements Serializable {
|
||||||
@Schema(description = "订单详情")
|
@Schema(description = "订单详情")
|
||||||
private List<OrderInfoResponse> orderInfoList;
|
private List<OrderInfoResponse> orderInfoList;
|
||||||
|
|
||||||
|
private String endTime;
|
||||||
|
|
||||||
// @Schema(description = "订单ID")
|
// @Schema(description = "订单ID")
|
||||||
// private Integer 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 = "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_YUE = "yue"; //余额支付
|
||||||
public static final String PAY_TYPE_OFFLINE = "offline"; //线下支付
|
public static final String PAY_TYPE_OFFLINE = "offline"; //线下支付
|
||||||
public static final String PAY_TYPE_ALI_PAY = "alipay"; //支付宝
|
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.core.util.NumberUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
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.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.dal.mysql.recharge.RechargeOrderMapper;
|
||||||
import cn.iocoder.yudao.module.shop.service.order.StoreOrderService;
|
import cn.iocoder.yudao.module.shop.service.order.StoreOrderService;
|
||||||
import cn.iocoder.yudao.module.shop.service.recharge.PhoneRecordService;
|
import cn.iocoder.yudao.module.shop.service.recharge.PhoneRecordService;
|
||||||
|
@ -49,7 +51,8 @@ public class WxPayNotifyController {
|
||||||
private RechargeOrderMapper rechargeOrderMapper;
|
private RechargeOrderMapper rechargeOrderMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private PhoneRecordService phoneRecordService;
|
private PhoneRecordService phoneRecordService;
|
||||||
|
@Autowired
|
||||||
|
private StoreOrderMapper storeOrderMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description: 微信支付回调接口
|
* Description: 微信支付回调接口
|
||||||
|
@ -130,28 +133,42 @@ public class WxPayNotifyController {
|
||||||
log.info("退款通知=" + JSONUtil.toJsonPrettyStr(result));
|
log.info("退款通知=" + JSONUtil.toJsonPrettyStr(result));
|
||||||
//退款状态
|
//退款状态
|
||||||
if (StringUtils.equals("SUCCESS", result.getRefundStatus())) {
|
if (StringUtils.equals("SUCCESS", result.getRefundStatus())) {
|
||||||
log.info("微信退款回调成功");
|
String outTradeNo = result.getOutTradeNo();
|
||||||
// 验证相关参数-金额
|
// 验证相关参数-金额
|
||||||
// 用户支付金额
|
// 用户支付金额
|
||||||
BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2);
|
BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2);
|
||||||
// 处理相关逻辑
|
if (outTradeNo.contains("MEMBER_")) {
|
||||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, result.getOutTradeNo()));
|
log.info("-----------------微信会员退款回调成功----------------------");
|
||||||
if(orderDO!=null){
|
// 处理相关逻辑
|
||||||
if (payerTotal.compareTo(orderDO.getPayPrice()) != 0) {
|
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, outTradeNo));
|
||||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", orderDO.getPayPrice(), payerTotal);
|
if (orderDO != null) {
|
||||||
return "failure";
|
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";
|
return "success";
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
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.enums.Constants;
|
||||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
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.config.WxPayOneAutoConfiguration;
|
||||||
|
import cn.iocoder.yudao.framework.pay.properties.AliPayProperties;
|
||||||
import cn.iocoder.yudao.framework.pay.properties.WxPayProperties;
|
import cn.iocoder.yudao.framework.pay.properties.WxPayProperties;
|
||||||
import cn.iocoder.yudao.module.infra.api.config.ApiConfigApi;
|
import cn.iocoder.yudao.module.infra.api.config.ApiConfigApi;
|
||||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
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.OrderUtil;
|
||||||
import cn.iocoder.yudao.module.shop.utils.RedisUtil;
|
import cn.iocoder.yudao.module.shop.utils.RedisUtil;
|
||||||
import cn.iocoder.yudao.module.shop.vo.order.WxPayJsResultVo;
|
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.request.WxPayUnifiedOrderV3Request;
|
||||||
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
|
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
|
||||||
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
|
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
|
||||||
|
@ -38,6 +46,7 @@ import org.springframework.util.Assert;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -100,7 +109,10 @@ public class OrderPayServiceImpl implements OrderPayService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WxPayProperties payProperties;
|
private WxPayProperties payProperties;
|
||||||
|
@Autowired
|
||||||
|
private AliPayConfig aliPayConfig;
|
||||||
|
@Autowired
|
||||||
|
private AliPayProperties aliPayProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付成功处理
|
* 支付成功处理
|
||||||
|
@ -218,6 +230,8 @@ public class OrderPayServiceImpl implements OrderPayService {
|
||||||
storeOrder.setIsChannel(1);
|
storeOrder.setIsChannel(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
storeOrder.setIsChannel(7); // 支付宝支付
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean changePayType = storeOrderService.updateById(storeOrder);
|
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());
|
WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = unifiedorder(storeOrder, ip, orderPayRequest.getOpenid());
|
||||||
WxPayService wxPayService = wxPayOneAutoConfiguration.wxPayOneService();
|
WxPayService wxPayService = wxPayOneAutoConfiguration.wxPayOneService();
|
||||||
|
@ -270,6 +284,31 @@ public class OrderPayServiceImpl implements OrderPayService {
|
||||||
// storeOrderService.updateById(storeOrder);
|
// storeOrderService.updateById(storeOrder);
|
||||||
response.setJsConfig(vo);
|
response.setJsConfig(vo);
|
||||||
return response;
|
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)) {
|
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.setSceneInfo(new WxPayUnifiedOrderV3Request.SceneInfo().setPayerClientIp(ip));
|
||||||
wxPayRequest.setAppid(payProperties.getAppId());
|
wxPayRequest.setAppid(payProperties.getAppId());
|
||||||
wxPayRequest.setMchid(payProperties.getMchId());
|
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 {
|
try {
|
||||||
WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.unifiedOrderV3(TradeTypeEnum.JSAPI, wxPayRequest);
|
WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.unifiedOrderV3(TradeTypeEnum.JSAPI, wxPayRequest);
|
||||||
// map.put("mweb_url",wxPayUnifiedOrderV3Result.getH5Url());
|
// map.put("mweb_url",wxPayUnifiedOrderV3Result.getH5Url());
|
||||||
|
|
|
@ -68,6 +68,9 @@ import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -196,7 +199,10 @@ public class OrderServiceImpl implements OrderService {
|
||||||
});
|
});
|
||||||
convert.setOrderInfoList(orderInfoList);
|
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;
|
return convert;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -624,7 +630,7 @@ public class OrderServiceImpl implements OrderService {
|
||||||
OrderInfoResponse orderInfoResponse = new OrderInfoResponse();
|
OrderInfoResponse orderInfoResponse = new OrderInfoResponse();
|
||||||
orderInfoResponse.setStoreName(e.getInfo().getProductName());
|
orderInfoResponse.setStoreName(e.getInfo().getProductName());
|
||||||
orderInfoResponse.setImage(e.getInfo().getImage());
|
orderInfoResponse.setImage(e.getInfo().getImage());
|
||||||
orderInfoResponse.setCartNum(e.getInfo().getPayNum());
|
orderInfoResponse.setPayNum(e.getInfo().getPayNum());
|
||||||
orderInfoResponse.setPrice(e.getInfo().getPrice());
|
orderInfoResponse.setPrice(e.getInfo().getPrice());
|
||||||
orderInfoResponse.setProductId(e.getProductId());
|
orderInfoResponse.setProductId(e.getProductId());
|
||||||
infoResponseList.add(orderInfoResponse);
|
infoResponseList.add(orderInfoResponse);
|
||||||
|
@ -1106,7 +1112,7 @@ public class OrderServiceImpl implements OrderService {
|
||||||
// } else {
|
// } else {
|
||||||
// priceResponse.setCouponFee(storeCouponUser.getMoney());
|
// priceResponse.setCouponFee(storeCouponUser.getMoney());
|
||||||
// }
|
// }
|
||||||
|
priceResponse.setPayFee(priceResponse.getFreightFee().add(orderInfoVo.getPayFee()));
|
||||||
priceResponse.setProTotalFee(orderInfoVo.getProTotalFee());
|
priceResponse.setProTotalFee(orderInfoVo.getProTotalFee());
|
||||||
// 积分部分
|
// 积分部分
|
||||||
|
|
||||||
|
@ -1304,8 +1310,8 @@ public class OrderServiceImpl implements OrderService {
|
||||||
storeOrder.setCouponId(Optional.ofNullable(orderRequest.getCouponId()).orElse(0L));
|
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.setTotalPrice(totalPrice);
|
||||||
storeOrder.setProTotalPrice(computedOrderPriceResponse.getProTotalFee());
|
storeOrder.setProTotalPrice(computedOrderPriceResponse.getProTotalFee());
|
||||||
storeOrder.setTotalPostage(computedOrderPriceResponse.getFreightFee());
|
storeOrder.setTotalPostage(computedOrderPriceResponse.getFreightFee());
|
||||||
|
|
|
@ -161,7 +161,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RechargeGearService rechargeGearService;
|
private RechargeGearService rechargeGearService;
|
||||||
|
@Autowired
|
||||||
|
private StoreOrderMapper storeOrderMapper;
|
||||||
/**
|
/**
|
||||||
* 列表(PC)
|
* 列表(PC)
|
||||||
*
|
*
|
||||||
|
@ -1209,49 +1210,85 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
||||||
if (flag) {
|
if (flag) {
|
||||||
log.info("ALIPAY====MAP===>{}", params);
|
log.info("ALIPAY====MAP===>{}", params);
|
||||||
String orderId = params.get("out_trade_no");
|
String orderId = params.get("out_trade_no");
|
||||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, orderId));
|
if (orderId.contains("MEMBER_")) {
|
||||||
if (Objects.isNull(orderDO)) {
|
log.info("ALIPAY====表示充值回调===>{}", params);
|
||||||
log.error("订单号错误,未查询到相关信息!入参订单号:{}", orderId);
|
// 表示充值回调
|
||||||
return "failure";
|
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, orderId));
|
||||||
}
|
if (Objects.isNull(orderDO)) {
|
||||||
// 验证相关参数-金额
|
log.error("订单号错误,未查询到相关信息!入参订单号:{}", orderId);
|
||||||
String amount;
|
return "failure";
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
//删除本地提报记录
|
// 验证相关参数-金额
|
||||||
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 {
|
} else {
|
||||||
// 表示支付
|
log.info("ALIPAY====表示商城回调===>{}", params);
|
||||||
amount = params.get("receipt_amount");
|
// 表示商城回调
|
||||||
orderDO.setPaySerialNumber(params.get("trade_no"));
|
StoreOrder storeOrder = storeOrderMapper.selectOne(Wrappers.<StoreOrder>lambdaQuery().eq(StoreOrder::getOrderId, orderId));
|
||||||
orderDO.setPaid(1);
|
if (Objects.isNull(storeOrder)) {
|
||||||
}
|
log.error("订单号错误,未查询到相关信息!入参订单号:{}", orderId);
|
||||||
if (new BigDecimal(amount).compareTo(orderDO.getPayPrice()) != 0) {
|
return "failure";
|
||||||
log.error("支付金额不匹配,订单实际支付金额:{},支付宝入参验证金额:{}", orderDO.getPayPrice(), amount);
|
}
|
||||||
return "failure";
|
// 验证相关参数-金额
|
||||||
}
|
String amount;
|
||||||
// 修改订单状态
|
if (null == params.get("receipt_amount")) {
|
||||||
rechargeOrderMapper.updateById(orderDO);
|
// 表示退款
|
||||||
// 写入 充值档位记录表
|
amount = params.get("refund_fee");
|
||||||
if (null != params.get("receipt_amount")) {
|
storeOrder.setRefundStatus(2);
|
||||||
addPhoneRecord(orderDO, orderId);
|
} 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);
|
log.debug(">>>>>>>>>>>>>>支付宝订单交易成功!订单号:{}<<<<<<<<<<<<<<<<<<<<", orderId);
|
||||||
return "success";
|
return "success";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "failure";
|
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) {
|
public void addPhoneRecord(RechargeOrderDO orderDO, String orderId) {
|
||||||
List<RechargeOrderInfoDO> infoDOS = rechargeOrderInfoMapper.selectList(Wrappers.<RechargeOrderInfoDO>lambdaQuery().eq(RechargeOrderInfoDO::getOrderNo, orderId));
|
List<RechargeOrderInfoDO> infoDOS = rechargeOrderInfoMapper.selectList(Wrappers.<RechargeOrderInfoDO>lambdaQuery().eq(RechargeOrderInfoDO::getOrderNo, orderId));
|
||||||
List<PhoneRecordDO> recordDOS = new ArrayList<>();
|
List<PhoneRecordDO> recordDOS = new ArrayList<>();
|
||||||
|
@ -1356,23 +1393,31 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
||||||
public Boolean wxPayNotify(WxPayOrderNotifyV3Result.DecryptNotifyResult result) {
|
public Boolean wxPayNotify(WxPayOrderNotifyV3Result.DecryptNotifyResult result) {
|
||||||
log.info("支付通知=" + JSONUtil.toJsonPrettyStr(result));
|
log.info("支付通知=" + JSONUtil.toJsonPrettyStr(result));
|
||||||
if (StringUtils.equals("SUCCESS", result.getTradeState())) {
|
if (StringUtils.equals("SUCCESS", result.getTradeState())) {
|
||||||
log.info("WXPAY====result===>");
|
|
||||||
// 验证相关参数-金额
|
|
||||||
String outTradeNo = result.getOutTradeNo();
|
String outTradeNo = result.getOutTradeNo();
|
||||||
// 用户支付金额
|
// 用户支付金额
|
||||||
BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2);
|
BigDecimal payerTotal = NumberUtil.div(result.getAmount().getPayerTotal() + "", "100", 2);
|
||||||
// 处理相关逻辑
|
// 处理相关逻辑
|
||||||
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, outTradeNo));
|
if (outTradeNo.contains("MEMBER_")) {
|
||||||
if (payerTotal.compareTo(orderDO.getPayPrice()) != 0) {
|
log.info("WXPAY====会员===>");
|
||||||
log.error("支付金额不匹配,订单实际支付金额:{},微信入参验证金额:{}", orderDO.getPayPrice(), payerTotal);
|
RechargeOrderDO orderDO = rechargeOrderMapper.selectOne(Wrappers.<RechargeOrderDO>lambdaQuery().eq(RechargeOrderDO::getOrderId, outTradeNo));
|
||||||
return Boolean.FALSE;
|
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);
|
log.debug(">>>>>>>>>>>>>>微信订单交易成功!订单号:{}<<<<<<<<<<<<<<<<<<<<", outTradeNo);
|
||||||
}
|
}
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
|
|
Loading…
Reference in New Issue