Browse Source

支付优化

feature-1.1
wuxicheng 3 years ago
parent
commit
f2d66a19b2
  1. 4
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java
  2. 9
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/QueryOrderDto.java
  3. 21
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java

4
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java

@ -81,10 +81,10 @@ public class PayInfo extends BaseDomain {
private String payChannel;
/**
* 交易类型JSAPI等
* 交易类型1--JSAPI支付小程序appId支付2--Native支付3--app支付4--JSAPI支付公众号appId支付5--H5支付
*/
@TableField(value = "trade_type")
@ApiModelProperty(value = "交易类型:JSAPI等")
@ApiModelProperty(value = "交易类型:1--JSAPI支付(小程序appId支付)、2--Native支付、3--app支付,4--JSAPI支付(公众号appId支付)5--H5支付")
private String tradeType;
/**

9
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/QueryOrderDto.java

@ -1,6 +1,5 @@
package com.bnyer.pay.dto;
import com.bnyer.common.core.annotation.CustomParamsValidation;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
@ -18,14 +17,6 @@ import javax.validation.constraints.NotBlank;
@NoArgsConstructor
public class QueryOrderDto {
@NotBlank(message = "支付类型不能为空")
@ApiModelProperty(value="支付类型:wxpay/alipay/kspay/dypay",required = true)
private String payType;
@ApiModelProperty(value="交易类型 1--JSAPI支付(小程序appId支付)、2--Native支付、3--app支付,4--JSAPI支付(公众号appId支付)5--H5支付,微信支付必填",example = "1")
@CustomParamsValidation(range = "1",message = "交易类型暂时只支持JSAPI")
private String tradeType;
@NotBlank(message = "支付单号不能为空")
@ApiModelProperty(value="支付单号",required = true)
private String payId;

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

@ -58,11 +58,13 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
@Override
public InOrderVo inOrder(InOrderDto dto, HttpServletRequest request) {
//支付金额
String payAmount = "";
String payAmount;
//商品类型:快手支付需要
int goodsType;
//payId
String payId;
//商品描述
String goodsDesc;
EnumSceneCode enumSceneCode = EnumSceneCode.getSceneCodeByCode(dto.getSceneCode());
switch (enumSceneCode){
//会员充值场景
@ -79,12 +81,13 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
goodsType = KSPayConstants.GOODS_TYPE_VIP;
payId = OrderUtil.getOrderNo("RV",new Date(), EnumUserClientType.getCodeByType(vipOrderVo.getUserClientType())
,String.valueOf(vipOrderVo.getUserId()));
goodsDesc = enumSceneCode.getName() + ":" + vipOrderVo.getVipTypeName() + "-" + vipOrderVo.getVipName();
break;
default:
throw new ServiceException("sceneCode未匹配上对应支付场景");
}
//构建统一下单请求实体
UnifiedOrderBo unifiedOrderBo = buildUnifiedOrderDto(dto, goodsType,payAmount,payId, request);
UnifiedOrderBo unifiedOrderBo = buildUnifiedOrderDto(dto,goodsDesc, goodsType,payAmount,payId, request);
//下单,获取第三方返回信息
IPayStrategy payStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType());
if (Objects.isNull(payStrategy)){
@ -118,6 +121,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
addPayInfoDto.setAppid(thirdInOrderVo.getAppId());
addPayInfoDto.setGoodsSubject(unifiedOrderBo.getGoodsSubject());
addPayInfoDto.setGoodsDesc(unifiedOrderBo.getGoodsDesc());
addPayInfoDto.setTradeType(dto.getTradeType());
// addPayInfoDto.setThirdNo(thirdInOrderVo.getPrepayid());
addPayInfoDto.setIp(unifiedOrderBo.getIp());
return addPayInfoDto;
@ -127,13 +131,14 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* 构建统一下单请求实体
*
* @param dto 入参
* @param goodsDesc
* @param goodsType 商品类型
* @param payAmount 不同支付场景下的支付金额
* @param payId 内部系统支付单号
* @param request 请求request用于获取ip地址
* @return
*/
private UnifiedOrderBo buildUnifiedOrderDto(InOrderDto dto, int goodsType, String payAmount, String payId, HttpServletRequest request) {
private UnifiedOrderBo buildUnifiedOrderDto(InOrderDto dto, String goodsDesc, int goodsType, String payAmount, String payId, HttpServletRequest request) {
String openId = "";
//当前时间
Date currDate = new Date();
@ -146,7 +151,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
unifiedOrderBo.setPayAmount(payAmount);
unifiedOrderBo.setGoodsType(goodsType);
unifiedOrderBo.setGoodsSubject(EnumSceneCode.getSceneCodeName(dto.getSceneCode()));
unifiedOrderBo.setGoodsDesc(EnumSceneCode.getSceneCodeName(dto.getSceneCode()));
unifiedOrderBo.setGoodsDesc(goodsDesc);
return unifiedOrderBo;
}
@ -159,6 +164,9 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
public QueryOrderVo queryOrder(QueryOrderDto dto) {
//先查询系统支付单是否已经完成支付,如果因为延迟导致没有及时同步,在调用第三方接口查询支付状态返回
PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryOrder(dto.getPayId());
if (Objects.isNull(payInfoDetailsVo)){
throw new ServiceException(ResponseEnum.NOT_EXIST);
}
Integer payStatus = payInfoDetailsVo.getPayStatus();
EnumPayStatus enumPayStatus = EnumPayStatus.getEnumPayStatusByStatus(payStatus);
if (EnumPayStatus.NO_PAY != enumPayStatus){
@ -168,16 +176,17 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
return queryOrderVo;
}
//获取第三方订单信息
IPayStrategy strategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType());
IPayStrategy strategy = PayFactory.getInstance().getConcreteStrategy(payInfoDetailsVo.getPayType());
if (Objects.isNull(strategy)){
throw new ServiceException("暂不支持该支付方式");
}
//构建统一订单查询实体
QueryOrderBo queryOrderBo = EntityConvertUtil.copy(dto, QueryOrderBo.class);
queryOrderBo.setTradeType(payInfoDetailsVo.getTradeType());
ThirdQueryOrderVo thirdQueryOrderVo = strategy.queryOrder(queryOrderBo);
QueryOrderVo queryOrderVo = new QueryOrderVo();
queryOrderVo.setPayId(dto.getPayId());
queryOrderVo.setPayStatus(getPayStatus(dto.getPayType(), thirdQueryOrderVo.getPayStatus()));
queryOrderVo.setPayStatus(getPayStatus(payInfoDetailsVo.getPayType(), thirdQueryOrderVo.getPayStatus()));
return queryOrderVo;
}

Loading…
Cancel
Save