diff --git a/dating-agency-mall-server/pom.xml b/dating-agency-mall-server/pom.xml
index fc62dcc..98729a5 100644
--- a/dating-agency-mall-server/pom.xml
+++ b/dating-agency-mall-server/pom.xml
@@ -82,6 +82,11 @@
dating-agency-service-entity
0.0.1-SNAPSHOT
+
+ com.qniao
+ dating-agency-uec-sdk
+ 0.0.1-SNAPSHOT
+
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java
index ed811d0..53b6fba 100644
--- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java
+++ b/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 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 fieldList = ThirdPartyFieldAssembler.from(dto.getAuthFields());
//todo 付款单状态判断 订单支付方式是否满足
- return paymentChannelOrderApplicationService.prePay(paymentChannelOrder, userId);
+ return paymentChannelOrderApplicationService.prePay(paymentChannelOrder, userId, fieldList,appFrom);
}
}
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/assembler/ThirdPartyFieldAssembler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/assembler/ThirdPartyFieldAssembler.java
new file mode 100644
index 0000000..09ead80
--- /dev/null
+++ b/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 from(List source) {
+ return TypeConvertUtils.convert(source, ThirdPartyField.class);
+ }
+}
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/PrePayThirdPartyDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/PrePayThirdPartyDto.java
index 857dcab..0805315 100644
--- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/PrePayThirdPartyDto.java
+++ b/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 authFields;
- @Data
- @ApiModel
- public static class ThirdPartyFieldDto {
- @NotNull(message = "关键字不能为空")
- private String key;
-
- private String value;
- }
-
@Override
public PaymentChannelOrder trans2Domain() {
PaymentChannelOrder paymentChannelOrder = new PaymentChannelOrder();
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java
new file mode 100644
index 0000000..e8b41e3
--- /dev/null
+++ b/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 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 fieldList) {
+ return findFieldByKey(specifiedKey, fieldList).getValue();
+ }
+
+ public static final String JS_CODE = "jsCode";
+
+}
\ No newline at end of file
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyFieldDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyFieldDto.java
new file mode 100644
index 0000000..51d2a89
--- /dev/null
+++ b/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;
+}
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java
index 29338b6..db6c9ab 100644
--- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java
+++ b/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 prePay(PaymentChannelOrder paymentChannelOrder, Long userId) {
- UserOpenId userOpenId = userOpenIdQueryService.getByUserId(userId, paymentChannelOrder.getAppId());
- Assert.notNull(userOpenId, "发起支付失败");
+ public Map prePay(PaymentChannelOrder paymentChannelOrder, Long userId, List 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);
}
}
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java
index f8947fb..0e740d5 100644
--- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java
+++ b/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 handle(PaymentChannelOrder paymentChannelOrder, UserOpenId userOpenId);
+ public abstract Map handle(PaymentChannelOrder paymentChannelOrder, List fieldList, Long appFrom);
}
diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java
index 859afdf..efe99c3 100644
--- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java
+++ b/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 handle(PaymentChannelOrder paymentChannelOrder, UserOpenId userOpenId) {
- WxPayConfig wxPayConfig = getWxPayConfig(userOpenId.getPlatformAppId());
- WxPayUnifiedOrderRequest request = buildUnifiedOrderRequest(paymentChannelOrder, wxPayConfig, userOpenId.getOpenId());
+ public Map handle(PaymentChannelOrder paymentChannelOrder,
+ List 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);
}