Browse Source

代码优化

feature-1.1
wuxicheng 3 years ago
parent
commit
7bc766fcf4
  1. 1
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java
  2. 2
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/UserInfoVo.java
  3. 7
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java
  4. 6
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java
  5. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java
  6. 19
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/query/VipOrderDetailsQuery.java
  7. 9
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java
  8. 31
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java
  9. 16
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderDetailsVo.java
  10. 2
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java
  11. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bo/UnifiedOrderBo.java
  12. 42
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java
  13. 22
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java
  14. 27
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java
  15. 5
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java
  16. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java
  17. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java
  18. 12
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java

1
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java

@ -9,6 +9,7 @@ public enum ResponseEnum {
//======================系统异常========================,
SERVER_ERROR(500, "系统繁忙,请稍候重试!"),
NOT_AUTH(500, "未登录!"),
PARAM_ERROR(400, "参数异常!"),
NOT_EXIST(110001, "查询为空"),
PAY_CONFIG_ERROR(110002, "支付配置未启用或未配置!"),

2
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/UserInfoVo.java

@ -81,7 +81,7 @@ public class UserInfoVo implements Serializable {
/**
* 用户类型 抖音->10;快手->20;微信->30;微信艺术家->40
*/
private int userClientType;
private Integer userClientType;
private static final long serialVersionUID = 1L;
}

7
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java

@ -4,6 +4,7 @@ import com.bnyer.common.core.constant.SecurityConstants;
import com.bnyer.common.core.constant.TokenConstants;
import com.bnyer.common.core.context.SecurityContextHolder;
import com.bnyer.common.core.enums.EnumUserClientType;
import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.ServletUtils;
import com.bnyer.common.core.utils.StringUtils;
@ -34,7 +35,9 @@ public class SecurityUtils
*/
public static UserInfoVo getUserInfo(){
String platform = ServletUtils.getRequest().getHeader("platform");
if(StringUtils.isNotEmpty(platform)){
if(StringUtils.isBlank(platform)){
throw new ServiceException(ResponseEnum.NOT_AUTH);
}
EnumUserClientType userClientType = EnumUserClientType.getTypeByCode(platform);
switch (userClientType){
case DU:
@ -109,8 +112,6 @@ public class SecurityUtils
throw new ServiceException("userClientType 未匹配上对应用户类型");
}
}
return null;
}
//******************************通用获取信息结束*********************************************

6
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java

@ -1,11 +1,9 @@
package com.bnyer.order.dto;
import com.bnyer.common.core.annotation.CustomParamsValidation;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ -29,8 +27,4 @@ public class AddVipOrderDto implements Serializable {
@ApiModelProperty(value="vip表id")
private Long vipId;
@NotNull(message = "用户客户端类型不能为空!")
@ApiModelProperty(value="用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;
}

4
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java

@ -34,6 +34,9 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener<String> {
@Resource
private VipOrderMapper vipOrderMapper;
@Resource
private VipOrderService vipOrderService;
@Resource
private RocketMQTemplate vipRecordMqTemplate;
@ -41,7 +44,6 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener<String> {
public void onMessage(String message) {
log.info("收到消息:{}", message);
//修改订单并添加会员记录
VipOrderService vipOrderService = SpringUtils.getBean(VipOrderService.class);
JSONObject orderObj = JSON.parseObject(message);
String orderNo = orderObj.getString("orderNo");
VipOrder vipOrder = vipOrderMapper.selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderNo, orderNo));

19
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/query/VipOrderDetailsQuery.java

@ -0,0 +1,19 @@
package com.bnyer.order.query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/05/09
* @description :
*/
@Getter
@Setter
@Builder
public class VipOrderDetailsQuery {
@ApiModelProperty(value="订单号")
private String orderNo;
}

9
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.bnyer.common.core.domain.VipOrder;
import com.bnyer.order.dto.QueryVipOrderDto;
import com.bnyer.order.dto.AddVipOrderDto;
import com.bnyer.order.query.VipOrderDetailsQuery;
import com.bnyer.order.vo.VipOrderDetailsVo;
import com.bnyer.order.vo.VipOrderVo;
import java.util.List;
@ -37,6 +39,13 @@ public interface VipOrderService extends IService<VipOrder> {
*/
List<VipOrderVo> getVipOrderList(QueryVipOrderDto dto);
/**
* 查询会员订单详情
* @param query
* @return
*/
VipOrderDetailsVo queryVipOrder(VipOrderDetailsQuery query);
/**
* 更新订单信息
* @param vipOrder

31
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java

@ -11,17 +11,21 @@ import com.bnyer.common.core.enums.*;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.DateUtils;
import com.bnyer.common.core.utils.OrderUtil;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.core.vo.UserInfoVo;
import com.bnyer.common.rocketmq.config.RocketMqConstant;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.api.dto.QueryUserVipDto;
import com.bnyer.img.api.remote.RemoteWxMiniService;
import com.bnyer.img.api.vo.UserVipInfoVo;
import com.bnyer.order.dto.AddVipOrderDto;
import com.bnyer.order.query.VipOrderDetailsQuery;
import com.bnyer.order.dto.QueryVipOrderDto;
import com.bnyer.order.enums.EnumVipOrderStatus;
import com.bnyer.order.mapper.VipOrderMapper;
import com.bnyer.order.service.VipOrderService;
import com.bnyer.order.vo.VipOrderDetailsVo;
import com.bnyer.order.vo.VipOrderVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendStatus;
@ -66,6 +70,25 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
return vipOrderVoList;
}
/**
* 查询会员订单详情
* @param query
* @return
*/
@Override
public VipOrderDetailsVo queryVipOrder(VipOrderDetailsQuery query) {
LambdaQueryWrapper<VipOrder> queryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(query.getOrderNo())){
queryWrapper.eq(VipOrder::getOrderNo,query.getOrderNo());
}
VipOrder vipOrder = vipOrderMapper.selectOne(queryWrapper);
if (Objects.isNull(vipOrder)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"会员订单");
}
VipOrderDetailsVo orderDetailsVo = EntityConvertUtil.copy(vipOrder, VipOrderDetailsVo.class);
return orderDetailsVo;
}
/**
* 生成会员订单返回订单号
@ -132,7 +155,9 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
* @return
*/
private VipOrder buildImgVipOrder(UserVipInfoVo userVipInfoVo, AddVipOrderDto addVipOrderDto) {
Long userId = SecurityUtils.getUserId();
UserInfoVo userInfo = SecurityUtils.getUserInfo();
Long userId = userInfo.getId();
Integer userClientType = userInfo.getUserClientType();
VipOrder vipOrder = new VipOrder();
vipOrder.setVipId(userVipInfoVo.getId());
vipOrder.setVipCode(userVipInfoVo.getVipCode());
@ -153,8 +178,8 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipInfoVo.getValidTimeNum()));
//开通的天数
vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true));
vipOrder.setUserClientType(addVipOrderDto.getUserClientType());
vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(addVipOrderDto.getUserClientType()),String.valueOf(userId)));
vipOrder.setUserClientType(userClientType);
vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(userClientType),String.valueOf(userId)));
vipOrder.setCreateTime(nowDate);
return vipOrder;
}

16
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderDetailsVo.java

@ -0,0 +1,16 @@
package com.bnyer.order.vo;
import lombok.Getter;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/03/27
* @description :
*/
@Getter
@Setter
public class VipOrderDetailsVo extends VipOrderVo{
}

2
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java

@ -1,7 +1,5 @@
package com.bnyer.order.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bo/UnifiedOrderBo.java

@ -49,7 +49,7 @@ public class UnifiedOrderBo {
*/
private String goodsSubject;
/**
* 商品描述: 会员充值
* 商品描述: 支付场景名称会员类型-会员名称
*/
private String goodsDesc;
}

42
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java

@ -3,18 +3,17 @@ package com.bnyer.pay.design.strategy;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.msg.MsgConstants;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.domain.PayInfo;
import com.bnyer.common.core.enums.EnumPayType;
import com.bnyer.common.redis.service.RedissonService;
import com.bnyer.pay.dto.PayNotifyCheckDto;
import com.bnyer.pay.mapper.PayInfoMapper;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.vo.PayInfoDetailsVo;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Response;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@ -26,11 +25,15 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public abstract class AbstractPayStrategy implements IPayStrategy {
@Resource
private PayInfoMapper payInfoMapper;
private static PayInfoService payInfoService;
@Resource
private RedissonService redissonService;
private static RedissonService redissonService;
@Autowired
public void setBean(PayInfoService payInfoService, RedissonService redissonService) {
AbstractPayStrategy.payInfoService = payInfoService;
AbstractPayStrategy.redissonService = redissonService;
}
/**
* 校验是否已支付避免重复调用
@ -38,38 +41,35 @@ public abstract class AbstractPayStrategy implements IPayStrategy {
* @return
*/
public String payNotifyCheck(PayNotifyCheckDto checkDto){
log.error("回调结果校验开始,支付单号:{}",checkDto.getPayId());
log.info("回调结果校验开始,支付单号:{}",checkDto.getPayId());
String resultMsg = "";
RLock rLock = redissonService.getRLock(RedisKeyConstant.PAY_NOTIFY_LOCK_KEY + checkDto.getPayId());
try{
if(rLock.tryLock(2L, 10L, TimeUnit.SECONDS)){
PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().eq(PayInfo::getPayId, checkDto.getPayId()).eq(PayInfo::getIsShow, "1"));
if (Objects.isNull(payInfo)){
return buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail");
}
log.info("查询到支付订单信息为:{}", JSON.toJSONString(payInfo));
PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfo(checkDto.getPayId());
log.info("查询到支付订单信息为:{}", JSON.toJSONString(payInfoDetailsVo));
//订单中的金额
String payInfoPayAmount = payInfo.getPayAmount().toString();
String payInfoPayAmount = payInfoDetailsVo.getPayAmount().toString();
//回调中的金额
String notifyPayAmount = checkDto.getPayAmount();
//对账状态
Integer singleStatus = payInfo.getSingleStatus();
Integer singleStatus = payInfoDetailsVo.getSingleStatus();
log.info("回调中的金额:{},订单中的金额:{}",notifyPayAmount,payInfoPayAmount);
if (payInfoPayAmount.equals(notifyPayAmount)){
if (Objects.nonNull(singleStatus)){
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),true,checkDto.getMsg());
}
}else {
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail");
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"trade fail");
}
}else {
log.error("获取锁失败,支付单号:{}",checkDto.getPayId());
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail");
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"trade fail");
}
}catch (Exception e){
e.printStackTrace();
log.error("回调结果校验失败,支付单号:{}",checkDto.getPayId());
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail");
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"trade fail");
}finally {
rLock.unlock();
}
@ -86,7 +86,7 @@ public abstract class AbstractPayStrategy implements IPayStrategy {
public String buildNotifyCheckResultMsg(EnumPayType payType,boolean isSuccess,String msg){
String result = "";
if (EnumPayType.WX_PAY == payType){
result = isSuccess?WxPayNotifyResponse.success(msg):WxPayNotifyResponse.fail(msg);
result = isSuccess?WxPayNotifyV3Response.success(msg): WxPayNotifyV3Response.fail(msg);
}else if (EnumPayType.ALI_PAY == payType){
result = isSuccess?MsgConstants.SUCCESS:MsgConstants.FAIL;
} else if (EnumPayType.KS_PAY == payType) {

22
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java

@ -173,10 +173,18 @@ public class DYPayStrategy extends AbstractPayStrategy{
//订单信息的json字符串
String message = object.getString("msg");
JSONObject msgJsonObj = JSON.parseObject(message);
log.info("快手支付:统一回调处理,params:{}",message);
if (StringUtils.isBlank(msgSignature)) {
log.info("抖音支付回调参数丢失,payId:{}",object.getString("cp_orderno"));
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,false,"trade fail");
}
//校验回调签名
String signMessage = dyPayUtil.getCallbackSignature(timestamp, nonce, message,token);
//签名校验
if (msgSignature.equals(signMessage)) {
if (!msgSignature.equals(signMessage)) {
log.info("抖音支付回调签名校验失败,payId:{}",msgJsonObj.getString("cp_orderno"));
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,false,"trade fail");
}
//固定值SUCCESS
String status = msgJsonObj.getString("status");
//开发者侧的订单号
@ -190,7 +198,10 @@ public class DYPayStrategy extends AbstractPayStrategy{
//抖音侧订单号
String dyOrderId = msgJsonObj.getString("order_id");
//这里无论回调失败还是成功,都需要都各个业务层去处理相关逻辑
if("success".equals(status)){
if(!"success".equals(status)){
log.info("抖音支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,outOrderNo);
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,false,"trade fail");
}
//处理业务
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
payNotifyCheckDto.setPayType(EnumPayType.DY_PAY);
@ -213,13 +224,6 @@ public class DYPayStrategy extends AbstractPayStrategy{
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"success");
}else {
log.info("抖音支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,outOrderNo);
}
} else {
log.info("抖音支付回调签名校验失败,payId:{}",msgJsonObj.getString("cp_orderno"));
}
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"business fail");
}
@Override

27
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java

@ -82,7 +82,7 @@ public class KSPayStrategy extends AbstractPayStrategy{
public ThirdUnifiedOrderVo unifiedOrder(UnifiedOrderBo bo) {
String result = "";
KspayConfig kspayConfig = getKspayConfig();
String openId = SecurityContextHolder.getFhOpenId();
String openId = bo.getOpenId();
String appId = kspayConfig.getAppid();
String backurl = kspayConfig.getBackurl();
String secret = kspayConfig.getSecret();
@ -173,10 +173,16 @@ public class KSPayStrategy extends AbstractPayStrategy{
String kwaisign = jsonObject.getString("sign");
String jsonString = JSONObject.toJSONString(object, SerializerFeature.WRITE_MAP_NULL_FEATURES, SerializerFeature.QuoteFieldNames);
log.info("快手支付:统一回调处理,params:{}",jsonString);
if (StringUtils.isNotBlank(kwaisign)) {
if (StringUtils.isBlank(kwaisign)) {
log.info("快手支付回调参数丢失,payId:{}",object.getString("trade_no"));
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,false,"trade fail");
}
jsonString = jsonString + secret;
//签名校验
if (kwaisign.equals(DigestUtils.md5Hex(jsonString))) {
if (!kwaisign.equals(DigestUtils.md5Hex(jsonString))) {
log.info("快手支付回调签名校验失败,payId:{}",object.getString("trade_no"));
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,false,"trade fail");
}
//当前回调消息的唯一ID,在同一个消息多次通知时,保持一致。
String messageId = object.getString("message_id");
JSONObject data = object.getJSONObject("data");
@ -193,7 +199,10 @@ public class KSPayStrategy extends AbstractPayStrategy{
//快手小程序平台订单号。
String ksOrderNo = data.getString("ks_order_no");
//回调支付成功
if ("SUCCESS".equals(status)) {
if (!"SUCCESS".equals(status)) {
log.info("快手支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,object.getString("trade_no"));
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,false,"trade fail");
}
//处理业务
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
payNotifyCheckDto.setPayType(EnumPayType.KS_PAY);
@ -216,16 +225,6 @@ public class KSPayStrategy extends AbstractPayStrategy{
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,messageId);
}else {
log.info("快手支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,object.getString("trade_no"));
}
} else {
log.info("快手支付回调签名校验失败,payId:{}",object.getString("trade_no"));
}
} else {
log.info("快手支付回调参数丢失,payId:{}",object.getString("trade_no"));
}
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,"business fail");
}
@Override

5
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java

@ -82,7 +82,7 @@ public class WxPayStrategy extends AbstractPayStrategy {
private ThirdUnifiedOrderVo jsApiPay(UnifiedOrderBo bo) {
WxpayConfig wxPayConfig = wxPayManager.getWxPayConfigByTradeType(bo.getTradeType());
WxPayService wxPayService = wxPayManager.getWxPayService(wxPayConfig);
String openId = SecurityContextHolder.getWechatOpenId();
String openId = bo.getOpenId();
try {
WxPayUnifiedOrderV3Request orderRequest = new WxPayUnifiedOrderV3Request();
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
@ -147,8 +147,9 @@ public class WxPayStrategy extends AbstractPayStrategy {
String timeEnd = result.getSuccessTime();
//支付状态
String tradeState = result.getTradeState();
//如果不是交易成功不往下走
if (!EnumWxPayStatus.SUCCESS.getStatus().equals(tradeState)){
return super.buildNotifyCheckResultMsg(EnumPayType.WX_PAY,false,"交易失败");
return super.buildNotifyCheckResultMsg(EnumPayType.WX_PAY,false,"trade fail");
}
//校验是否已支付避免重复调用
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java

@ -29,5 +29,5 @@ public interface PayInfoService extends IService<PayInfo>{
* @param payId
* @return
*/
PayInfoDetailsVo queryOrder(String payId);
PayInfoDetailsVo queryPayInfo(String payId);
}

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java

@ -127,7 +127,7 @@ public class PayInfoServiceImpl extends ServiceImpl<PayInfoMapper, PayInfo> impl
* @return
*/
@Override
public PayInfoDetailsVo queryOrder(String payId) {
public PayInfoDetailsVo queryPayInfo(String payId) {
PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().eq(PayInfo::getPayId, payId));
if (Objects.isNull(payInfo)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"支付订单");

12
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java

@ -6,6 +6,8 @@ import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.OrderUtil;
import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.core.utils.ip.IpUtils;
import com.bnyer.common.core.vo.UserInfoVo;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.order.api.dto.QueryVipOrderDto;
import com.bnyer.order.api.remote.RemoteVipOrderService;
import com.bnyer.order.api.vo.VipOrderVo;
@ -15,8 +17,8 @@ import com.bnyer.pay.constant.KSPayConstants;
import com.bnyer.pay.design.factory.PayFactory;
import com.bnyer.pay.design.strategy.IPayStrategy;
import com.bnyer.pay.dto.AddPayInfoDto;
import com.bnyer.pay.dto.UnifiedOrderDto;
import com.bnyer.pay.dto.QueryOrderDto;
import com.bnyer.pay.dto.UnifiedOrderDto;
import com.bnyer.pay.enums.EnumAliPayStatus;
import com.bnyer.pay.enums.EnumDyPayStatus;
import com.bnyer.pay.enums.EnumKsPayStatus;
@ -131,7 +133,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* 构建统一下单请求实体
*
* @param dto 入参
* @param goodsDesc
* @param goodsDesc 商品描述
* @param goodsType 商品类型
* @param payAmount 不同支付场景下的支付金额
* @param payId 内部系统支付单号
@ -139,12 +141,14 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* @return
*/
private UnifiedOrderBo buildUnifiedOrderDto(UnifiedOrderDto dto, String goodsDesc, int goodsType, String payAmount, String payId, HttpServletRequest request) {
String openId = "";
UserInfoVo userInfo = SecurityUtils.getUserInfo();
String openId = userInfo.getOpenId();
//当前时间
Date currDate = new Date();
//ip地址
String ip = IpUtils.getIpAddr(request);
UnifiedOrderBo unifiedOrderBo = EntityConvertUtil.copy(dto, UnifiedOrderBo.class);
unifiedOrderBo.setOpenId(openId);
unifiedOrderBo.setPayId(payId);
unifiedOrderBo.setIp(ip);
unifiedOrderBo.setCurrDate(currDate);
@ -163,7 +167,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
@Override
public QueryOrderVo queryOrder(QueryOrderDto dto) {
//先查询系统支付单是否已经完成支付,如果因为延迟导致没有及时同步,在调用第三方接口查询支付状态返回
PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryOrder(dto.getPayId());
PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfo(dto.getPayId());
if (Objects.isNull(payInfoDetailsVo)){
throw new ServiceException(ResponseEnum.NOT_EXIST);
}

Loading…
Cancel
Save