Browse Source

基础配置

master
张彭杰 1 year ago
parent
commit
ed7953ad5e
9 changed files with 89 additions and 19 deletions
  1. 5
      dating-agency-mall-server/pom.xml
  2. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java
  3. 13
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/assembler/ThirdPartyFieldAssembler.java
  4. 10
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/PrePayThirdPartyDto.java
  5. 27
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java
  6. 13
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyFieldDto.java
  7. 8
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java
  8. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java
  9. 21
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java

5
dating-agency-mall-server/pom.xml

@ -82,6 +82,11 @@
<artifactId>dating-agency-service-entity</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.qniao</groupId>
<artifactId>dating-agency-uec-sdk</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>

7
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java

@ -1,6 +1,8 @@
package com.qniao.dam.api.command.paymentchannelorder.user;
import com.qniao.dam.api.command.paymentchannelorder.user.assembler.ThirdPartyFieldAssembler;
import com.qniao.dam.api.command.paymentchannelorder.user.request.PrePayThirdPartyDto;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField;
import com.qniao.dam.application.service.paymentchannelorder.PaymentChannelOrderApplicationService;
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder;
import com.qniao.framework.utils.ServletUtils;
@ -10,6 +12,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@RestController
@ -24,10 +27,12 @@ public class PaymentChannelOrderUserCommandController {
@PostMapping("/pre-pay/third-party")
public Map<String, String> prePayThirdParty(@RequestBody @Validated PrePayThirdPartyDto dto,
@RequestParam Long userId) {
Long appFrom = Long.valueOf(ServletUtils.getAppId());
PaymentChannelOrder paymentChannelOrder = dto.trans2Domain();
paymentChannelOrder.setAppId(Long.valueOf(ServletUtils.getAppId()));
List<ThirdPartyField> fieldList = ThirdPartyFieldAssembler.from(dto.getAuthFields());
//todo 付款单状态判断 订单支付方式是否满足
return paymentChannelOrderApplicationService.prePay(paymentChannelOrder, userId);
return paymentChannelOrderApplicationService.prePay(paymentChannelOrder, userId, fieldList,appFrom);
}
}

13
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/assembler/ThirdPartyFieldAssembler.java

@ -0,0 +1,13 @@
package com.qniao.dam.api.command.paymentchannelorder.user.assembler;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyFieldDto;
import com.qniao.framework.utils.TypeConvertUtils;
import java.util.List;
public abstract class ThirdPartyFieldAssembler {
public static List<ThirdPartyField> from(List<ThirdPartyFieldDto> source) {
return TypeConvertUtils.convert(source, ThirdPartyField.class);
}
}

10
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/PrePayThirdPartyDto.java

@ -5,7 +5,6 @@ import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelO
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum;
import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentOrderDao;
import com.qniao.domain.Trans2DomainAssembler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -28,15 +27,6 @@ public class PrePayThirdPartyDto implements Trans2DomainAssembler<PaymentChannel
@ApiModelProperty("第三方字段")
private List<ThirdPartyFieldDto> authFields;
@Data
@ApiModel
public static class ThirdPartyFieldDto {
@NotNull(message = "关键字不能为空")
private String key;
private String value;
}
@Override
public PaymentChannelOrder trans2Domain() {
PaymentChannelOrder paymentChannelOrder = new PaymentChannelOrder();

27
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java

@ -0,0 +1,27 @@
package com.qniao.dam.api.command.paymentchannelorder.user.request;
import cn.hutool.core.text.StrFormatter;
import com.qniao.framework.exception.BizException;
import lombok.Data;
import java.util.List;
import java.util.Objects;
@Data
public class ThirdPartyField {
private String key;
private String value;
public static ThirdPartyField findFieldByKey(String specifiedKey, List<ThirdPartyField> fieldList) {
return fieldList.stream().filter(f -> Objects.equals(f.getKey(), specifiedKey)).findFirst().orElseThrow(() -> new BizException(StrFormatter.format("认证字段[{}]不存在", specifiedKey)));
}
public static String findFiledValueByKey(String specifiedKey, List<ThirdPartyField> fieldList) {
return findFieldByKey(specifiedKey, fieldList).getValue();
}
public static final String JS_CODE = "jsCode";
}

13
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyFieldDto.java

@ -0,0 +1,13 @@
package com.qniao.dam.api.command.paymentchannelorder.user.request;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class ThirdPartyFieldDto {
@NotNull(message = "关键字不能为空")
private String key;
private String value;
}

8
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java

@ -1,5 +1,6 @@
package com.qniao.dam.application.service.paymentchannelorder;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField;
import com.qniao.dam.application.service.paymentchannelorder.processor.IChannelPayService;
import com.qniao.dam.domain.aggregate.paymentchannelorder.PaymentChannelOrderAggregate;
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder;
@ -11,6 +12,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
@ -26,14 +28,12 @@ public class PaymentChannelOrderApplicationService {
/**
* todo 旧的付款单失效处理
*/
public Map<String, String> prePay(PaymentChannelOrder paymentChannelOrder, Long userId) {
UserOpenId userOpenId = userOpenIdQueryService.getByUserId(userId, paymentChannelOrder.getAppId());
Assert.notNull(userOpenId, "发起支付失败");
public Map<String, String> prePay(PaymentChannelOrder paymentChannelOrder, Long userId, List<ThirdPartyField> fieldList, Long appFrom) {
PaymentOrder paymentOrder = paymentOrderRepository.load(paymentChannelOrder.getTxnOrderId());
paymentChannelOrder.setAmount(paymentOrder.getUnpaidAmount());
paymentChannelOrder.setComment("订单交易");
paymentChannelOrderAggregate.create(paymentChannelOrder);
IChannelPayService channelPayService = IChannelPayService.getService(paymentChannelOrder.getPaymentMethod());
return channelPayService.handle(paymentChannelOrder, userOpenId);
return channelPayService.handle(paymentChannelOrder, fieldList, appFrom);
}
}

4
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java

@ -1,5 +1,6 @@
package com.qniao.dam.application.service.paymentchannelorder.processor;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField;
import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.WeChatPayProcessor;
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder;
import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum;
@ -7,6 +8,7 @@ import com.qniao.dau.domain.aggregate.useropenid.entity.UserOpenId;
import com.qniao.framework.exception.BizException;
import com.qniao.framework.utils.SpringContextUtil;
import java.util.List;
import java.util.Map;
public abstract class IChannelPayService {
@ -21,5 +23,5 @@ public abstract class IChannelPayService {
}
}
public abstract Map<String, String> handle(PaymentChannelOrder paymentChannelOrder, UserOpenId userOpenId);
public abstract Map<String, String> handle(PaymentChannelOrder paymentChannelOrder, List<ThirdPartyField> fieldList, Long appFrom);
}

21
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java

@ -8,21 +8,27 @@ import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import com.github.binarywang.wxpay.util.SignUtils;
import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField;
import com.qniao.dam.application.service.paymentchannelorder.processor.IChannelPayService;
import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.vobj.ChannelPaymentField;
import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.vobj.WeChatPaymentBasic;
import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder;
import com.qniao.dau.application.UecServerApplicationService;
import com.qniao.dau.application.request.GetWechatSessionDto;
import com.qniao.dau.application.response.WeChatAppletUserSessionVo;
import com.qniao.dau.domain.aggregate.useropenid.entity.UserOpenId;
import com.qniao.framework.exception.BizException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@ -36,10 +42,19 @@ public class WeChatPayProcessor extends IChannelPayService {
@Value("${weixin.notifyurl}")
private String notifyUrl;
@Resource
private UecServerApplicationService uecServerApplicationService;
@Override
public Map<String, String> handle(PaymentChannelOrder paymentChannelOrder, UserOpenId userOpenId) {
WxPayConfig wxPayConfig = getWxPayConfig(userOpenId.getPlatformAppId());
WxPayUnifiedOrderRequest request = buildUnifiedOrderRequest(paymentChannelOrder, wxPayConfig, userOpenId.getOpenId());
public Map<String, String> handle(PaymentChannelOrder paymentChannelOrder,
List<ThirdPartyField> fieldList,
Long appFrom) {
// 获取账号
String jsCode = ThirdPartyField.findFiledValueByKey(ThirdPartyField.JS_CODE, fieldList);
GetWechatSessionDto sessionDto = new GetWechatSessionDto(jsCode, appFrom);
WeChatAppletUserSessionVo sessionVo = uecServerApplicationService.getWechatSession(sessionDto);
WxPayConfig wxPayConfig = getWxPayConfig(sessionVo.getPlatformAppId());
WxPayUnifiedOrderRequest request = buildUnifiedOrderRequest(paymentChannelOrder, wxPayConfig, sessionVo.getOpenid());
WeChatPaymentBasic weChatPaymentBasic = getWeChatPaymentBasic(request, wxPayConfig);
return transformToMap(weChatPaymentBasic);
}

Loading…
Cancel
Save