Browse Source

支付模块

weifanli 3 years ago
parent
commit
9e0d3de40c
31 changed files with 884 additions and 61 deletions
  1. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  2. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  3. 4 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  4. 16 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java
  5. 1 0
      toolset/pom.xml
  6. 1 1
      toolset/toolset-mybatis/pom.xml
  7. 33 0
      toolset/toolset-payment/payment-adapay/pom.xml
  8. 133 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/AdapayTemplate.java
  9. 48 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/config/HuifuConfiguration.java
  10. 27 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/DeviceInfo.java
  11. 55 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/DivMember.java
  12. 73 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/PaymentConfirmParam.java
  13. 168 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/PaymentReq.java
  14. 149 0
      toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/props/HuifuProperties.java
  15. 2 0
      toolset/toolset-payment/payment-core/pom.xml
  16. 0 14
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/config/PaymentConfiguration.java
  17. 9 9
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/PaymentTemplate.java
  18. 1 1
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/constant/PaymentConstant.java
  19. 2 2
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/enums/OpenEnum.java
  20. 1 1
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/enums/PayChannelEnum.java
  21. 10 1
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/enums/TradeStatusEnum.java
  22. 2 2
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/ClosePayment.java
  23. 27 0
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/DeviceInfo.java
  24. 55 0
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/DivMember.java
  25. 49 2
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/Payment.java
  26. 2 2
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/RefundBill.java
  27. 3 3
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/res/ClosePaymentRes.java
  28. 3 3
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/res/PaymentRes.java
  29. 3 3
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/res/RefundBillRes.java
  30. 0 8
      toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/props/PaymentProperties.java
  31. 2 0
      toolset/toolset-payment/pom.xml

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java

@@ -94,7 +94,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
         }
         AccountTotal total = new AccountTotal();
 
-        total.setTotalInAmount(practiceAmount.add(liveAmount).add(musicAmount));
+        total.setTotalInAmount(practiceAmount.add(liveAmount).add(videoAmount).add(musicAmount));
         if (total.getTotalInAmount().doubleValue() > 0) {
             total.setPracticeAmount(practiceAmount);
             BigDecimal practiceRate = total.getPracticeAmount()

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -199,7 +199,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     }
 
 
-
     @Override
     public void setSuccessStatus() {
         OrderSearch query = new OrderSearch();
@@ -261,6 +260,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             if (Objects.isNull(createFunction)) {
                 return HttpResponseResult.failed("订单商品信息获取失败");
             }
+
+
             info.setOrderNo(Long.toString(orderNo));
             info.setUserId(orderReq.getUserId());
             HttpResponseResult<OrderCreateRes> createResult = createFunction.apply(info);
@@ -433,6 +434,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
         //关闭订单
         doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+        //关闭订单付款单
+        orderPaymentService.closePayment(orderNo, "订单超时");
     }
 
     private HttpResponseResult<OrderPayRes> doOrderPayWaitPay(OrderPayReq payReq, UserOrderVo detail) {

+ 4 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java

@@ -76,12 +76,11 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo(Long userId) {
         WithdrawalInfoRes withdrawalInfoRes = new WithdrawalInfoRes();
         UserBankCardVo defaultBank = bankCardDao.getDefaultBankByUserId(userId);
-        if (null == defaultBank) {
-            return HttpResponseResult.failed("用户未绑定银行卡");
+        if (null != defaultBank) {
+            defaultBank.setPhone(ValueUtil.fuzzyMobile(defaultBank.getPhone()));
+            defaultBank.setBankCard(ValueUtil.fuzzyBankCard(defaultBank.getBankCard()));
+            withdrawalInfoRes.setUserBankCard(defaultBank);
         }
-        defaultBank.setPhone(ValueUtil.fuzzyMobile(defaultBank.getPhone()));
-        defaultBank.setBankCard(ValueUtil.fuzzyBankCard(defaultBank.getBankCard()));
-        withdrawalInfoRes.setUserBankCard(defaultBank);
         //获取平台提现手续费
         BigDecimal withdrawalServiceFee = getWithdrawalServiceFee();
         withdrawalInfoRes.setWithdrawalServiceFee(withdrawalServiceFee);

+ 16 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserBankCardController.java

@@ -13,6 +13,8 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserBankCardVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
@@ -73,7 +75,15 @@ public class UserBankCardController extends BaseController {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
 		bankCard.setUserId(user.getId());
-		return userBankCardService.bankCard(bankCard);
+		try {
+			return userBankCardService.bankCard(bankCard);
+		}catch (ThirdpartyException e){
+			return HttpResponseResult.failed(e.getMessage());
+		}catch (BizException e){
+			return HttpResponseResult.failed(e.getMessage());
+		}catch (Exception e){
+			return HttpResponseResult.failed("绑卡失败");
+		}
 	}
 
 	@PostMapping("/unBind")
@@ -94,8 +104,12 @@ public class UserBankCardController extends BaseController {
 		bankCard.setUserId(user.getId());
 		try {
 			return userBankCardService.unBind(bankCard);
+		}catch (ThirdpartyException e){
+			return HttpResponseResult.failed(e.getMessage());
+		}catch (BizException e){
+			return HttpResponseResult.failed(e.getMessage());
 		}catch (Exception e){
-			return HttpResponseResult.failed("姓名与身份证号不一致");
+			return HttpResponseResult.failed("解绑失败");
 		}
 	}
 

+ 1 - 0
toolset/pom.xml

@@ -18,6 +18,7 @@
 	<url>http://maven.apache.org</url>
 
 	<properties>
+		<project.toolset.version>1.0</project.toolset.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
 

+ 1 - 1
toolset/toolset-mybatis/pom.xml

@@ -10,7 +10,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>toolset-mybatis</artifactId>
-    <version>1.0</version>
+    <version>${project.toolset.version}</version>
     <name>toolset-mybatis</name>
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

+ 33 - 0
toolset/toolset-payment/payment-adapay/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>toolset-payment</artifactId>
+        <groupId>com.yonge.toolset</groupId>
+        <version>1.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>payment-adapay</artifactId>
+    <packaging>jar</packaging>
+    <version>${project.toolset.version}</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>payment-core</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-java-sdk</artifactId>
+            <version>1.2.10</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.23.0.ALL</version>
+        </dependency>
+    </dependencies>
+</project>

+ 133 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/AdapayTemplate.java

@@ -0,0 +1,133 @@
+package com.yonge.toolset.payment.adapay;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayClient;
+import com.huifu.adapay.core.exception.BaseAdaPayException;
+import com.huifu.adapay.core.util.StringUtil;
+import com.huifu.adapay.model.Refund;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.adapay.config.HuifuConfiguration;
+import com.yonge.toolset.payment.adapay.model.DeviceInfo;
+import com.yonge.toolset.payment.core.PaymentTemplate;
+import com.yonge.toolset.payment.core.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.core.model.ClosePayment;
+import com.yonge.toolset.payment.core.model.Payment;
+import com.yonge.toolset.payment.core.model.RefundBill;
+import com.yonge.toolset.payment.core.model.res.ClosePaymentRes;
+import com.yonge.toolset.payment.core.model.res.PaymentRes;
+import com.yonge.toolset.payment.core.model.res.RefundBillRes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class AdapayTemplate implements PaymentTemplate {
+    private final static Logger log = LoggerFactory.getLogger(AdapayTemplate.class);
+    @Autowired
+    private AlipayClient alipayClient;
+
+    @Override
+    public BaseResult<PaymentRes> executePayment(Payment payment) throws Exception {
+        Map<String, Object> paymentMap = new HashMap<>();
+        paymentMap.put("order_no", payment.getOrderNo());
+        paymentMap.put("app_id", HuifuConfiguration.getHuifuProperties().getAppId());
+        paymentMap.put("pay_channel", payment.getPayChannel().getCode());
+        paymentMap.put("pay_amt", payment.getPayAmt());
+        paymentMap.put("goods_title", payment.getOrderTitle());
+        paymentMap.put("goods_desc", payment.getOrderDesc());
+        paymentMap.put("div_members", JSONObject.toJSONString(payment.getDivMembers()));
+        paymentMap.put("description", payment.getDescription());
+        paymentMap.put("device_info", payment.getDeviceInfo());
+        paymentMap.put("expend", payment.getExpend());
+        paymentMap.put("notify_url", StringUtil.isEmpty(payment.getNotifyUrl()) ? HuifuConfiguration.getHuifuProperties().getNotifyUrl() : payment.getNotifyUrl());
+
+        log.info("汇付[创建支付对象] Req:{}", JSONObject.toJSONString(paymentMap));
+        //调用sdk方法,创建支付,得到支付对象
+        Map<String, Object> res;
+        try {
+            res = com.huifu.adapay.model.Payment.create(paymentMap);
+        } catch (BaseAdaPayException e) {
+            return BaseResult.failed(e.getMessage());
+        }
+        if (CollectionUtils.isEmpty(res)) {
+            return BaseResult.failed("请求失败");
+        }
+        log.info("汇付[创建支付对象] Resp:{}", res);
+        String errorCode = (String) res.get("error_code");
+        if (null != errorCode) {
+            String errorMsg = (String) res.get("error_msg");
+            return BaseResult.failed(errorMsg);
+        }
+        PaymentRes paymentRes = new PaymentRes();
+        BeanUtils.copyProperties(payment, paymentRes);
+        paymentRes.setId(res.get("id").toString());
+        paymentRes.setStatus(TradeStatusEnum.getByName(res.get("status").toString()));
+        return BaseResult.succeed(paymentRes);
+    }
+
+    @Override
+    public BaseResult<ClosePaymentRes> closePayment(ClosePayment closePayment) throws Exception {
+
+        Map<String, Object> paymentParams = new HashMap<>(10);
+        paymentParams.put("payment_id", closePayment.getPaymentId());
+        paymentParams.put("reason", closePayment.getReason());
+        paymentParams.put("expend", closePayment.getExpend());
+        paymentParams.put("notify_url", StringUtil.isEmpty(closePayment.getNotifyUrl()) ? HuifuConfiguration.getHuifuProperties().getNotifyUrl() : closePayment.getNotifyUrl());
+
+        Map<String, Object> res;
+        try {
+            res = com.huifu.adapay.model.Payment.close(paymentParams);
+        } catch (BaseAdaPayException e) {
+            return BaseResult.failed(e.getMessage());
+        }
+        if (CollectionUtils.isEmpty(res)) {
+            return BaseResult.failed("请求失败");
+        }
+        log.info("汇付[支付关单] Resp:{}", res);
+        String errorCode = (String) res.get("error_code");
+        if (null != errorCode) {
+            String errorMsg = (String) res.get("error_msg");
+            return BaseResult.failed(errorMsg);
+        }
+        ClosePaymentRes paymentRes = new ClosePaymentRes();
+        BeanUtils.copyProperties(closePayment, paymentRes);
+
+        paymentRes.setStatus(TradeStatusEnum.getByName(res.get("status").toString()));
+        return BaseResult.succeed(paymentRes);
+    }
+
+    @Override
+    public BaseResult<RefundBillRes> refundPayment(RefundBill refundBill) throws Exception {
+        Map<String, Object> refundParams = new HashMap<>(10);
+        refundParams.put("refund_amt", refundBill.getRefundAmt());
+        refundParams.put("refund_order_no", refundBill.getRefundNo());
+        refundParams.put("notify_url", StringUtil.isEmpty(refundBill.getNotifyUrl()) ? HuifuConfiguration.getHuifuProperties().getNotifyUrl() : refundBill.getNotifyUrl());
+
+        Map<String, Object> res;
+        try {
+            res = Refund.create(refundBill.getPaymentId(), refundParams);
+        } catch (BaseAdaPayException e) {
+            return BaseResult.failed(e.getMessage());
+        }
+        if (CollectionUtils.isEmpty(res)) {
+            return BaseResult.failed("请求失败");
+        }
+        log.info("汇付[支付退款] Resp:{}", res);
+        String errorCode = (String) res.get("error_code");
+        if (null != errorCode) {
+            String errorMsg = (String) res.get("error_msg");
+            return BaseResult.failed(errorMsg);
+        }
+
+        RefundBillRes billRes = new RefundBillRes();
+        BeanUtils.copyProperties(refundBill, billRes);
+        billRes.setStatus(TradeStatusEnum.getByName(res.get("status").toString()));
+        return BaseResult.succeed(billRes);
+    }
+}

+ 48 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/config/HuifuConfiguration.java

@@ -0,0 +1,48 @@
+package com.yonge.toolset.payment.adapay.config;
+
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+import com.yonge.toolset.payment.adapay.props.HuifuProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 路由配置信息
+ */
+@Configuration
+@EnableConfigurationProperties({HuifuProperties.class})
+public class HuifuConfiguration {
+	private static HuifuProperties huifuProperties;
+	@Bean
+	public MerConfig merConfig(HuifuProperties authProperties) {
+		this.huifuProperties = authProperties;
+
+		MerConfig merConfig = new MerConfig();
+		merConfig.setApiKey(authProperties.getApiKey());
+		merConfig.setApiMockKey(authProperties.getMockApiKey());
+		merConfig.setRSAPrivateKey(authProperties.getRsaPrivateKey());
+		try {
+			Adapay.initWithMerConfig(merConfig);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return merConfig;
+	}
+
+	@Bean
+	public AlipayClient alipayClient(HuifuProperties authProperties){
+		AlipayClient alipayClient = new DefaultAlipayClient(
+				"https://openapi.alipay.com/gateway.do",
+				authProperties.getAliAppid(),
+				authProperties.getAliPrivatekey(),
+				"json","GBK",authProperties.getAliPublickey(),"RSA2");
+		return alipayClient;
+	}
+
+	public static HuifuProperties getHuifuProperties(){
+		return huifuProperties;
+	}
+}

+ 27 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/DeviceInfo.java

@@ -0,0 +1,27 @@
+package com.yonge.toolset.payment.adapay.model;
+
+import java.io.Serializable;
+
+/**
+ * 交易设备信息
+ * @Author: liweifan
+ * @Data: 2022/3/31 11:36
+ */
+public class DeviceInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /***
+     * 交易设备所在的公网 IP
+     * @author liweifan
+     * @updateTime 2022/3/31 11:07
+     */
+    private String device_ip;
+
+    public String getDevice_ip() {
+        return device_ip;
+    }
+
+    public void setDevice_ip(String device_ip) {
+        this.device_ip = device_ip;
+    }
+}

+ 55 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/DivMember.java

@@ -0,0 +1,55 @@
+package com.yonge.toolset.payment.adapay.model;
+
+import java.io.Serializable;
+
+/**
+ * 分账对象
+ * @Author: liweifan
+ * @Data: 2022/3/31 11:26
+ */
+public class DivMember implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分账用户 Member对象 的 id;若是商户本身时,传入0
+     * @author liweifan
+     * @updateTime 2022/3/31 11:27
+     */
+    private String member_id;
+    /**
+     * 分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00
+     * @author liweifan
+     * @updateTime 2022/3/31 11:28
+     */
+    private String amount;
+    /**
+     * 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个
+     * @author liweifan
+     * @updateTime 2022/3/31 11:28
+     */
+    private String fee_flag;
+
+    public String getMember_id() {
+        return member_id;
+    }
+
+    public void setMember_id(String member_id) {
+        this.member_id = member_id;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getFee_flag() {
+        return fee_flag;
+    }
+
+    public void setFee_flag(String fee_flag) {
+        this.fee_flag = fee_flag;
+    }
+}

+ 73 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/PaymentConfirmParam.java

@@ -0,0 +1,73 @@
+package com.yonge.toolset.payment.adapay.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/3/11 17:44
+ */
+public class PaymentConfirmParam implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    //Adapay生成的支付对象id
+    private String payment_id;
+    //请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
+    private String order_no;
+    //确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额。
+    private String confirm_amt;
+    //附加说明
+    private String description;
+    //分账对象信息列表,一次请求最多仅支持7个分账方
+    private List<DivMember> div_members;
+    //手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;若为O时,分账对象列表中不支持传入手续费承担方
+    private String fee_mode;
+
+    public String getPayment_id() {
+        return payment_id;
+    }
+
+    public void setPayment_id(String payment_id) {
+        this.payment_id = payment_id;
+    }
+
+    public String getOrder_no() {
+        return order_no;
+    }
+
+    public void setOrder_no(String order_no) {
+        this.order_no = order_no;
+    }
+
+    public String getConfirm_amt() {
+        return confirm_amt;
+    }
+
+    public void setConfirm_amt(String confirm_amt) {
+        this.confirm_amt = confirm_amt;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public List<DivMember> getDiv_members() {
+        return div_members;
+    }
+
+    public void setDiv_members(List<DivMember> div_members) {
+        this.div_members = div_members;
+    }
+
+    public String getFee_mode() {
+        return fee_mode;
+    }
+
+    public void setFee_mode(String fee_mode) {
+        this.fee_mode = fee_mode;
+    }
+}

+ 168 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/model/PaymentReq.java

@@ -0,0 +1,168 @@
+package com.yonge.toolset.payment.adapay.model;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 创建支付对象请求参数
+ * @Author: liweifan
+ * @Data: 2022/3/31 10:58
+ */
+public class PaymentReq implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /***
+     * 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
+     * @author liweifan
+     * @updateTime 2022/3/31 11:00
+     */
+    private String order_no;
+    /***
+     * 控制台 主页面应用的app_id
+     * @author liweifan
+     * @updateTime 2022/3/31 11:00
+     */
+    private String app_id;
+    /***
+     * 支付渠道,参见 支付渠道
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String pay_channel;
+    /***
+     * 交易金额,必须大于0,保留两位小数点,如0.10、100.05等
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String pay_amt;
+    /***
+     * 商品标题
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String goods_title;
+    /***
+     * 商品描述信息,微信小程序和微信公众号该字段最大长度42个字符
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String goods_desc;
+    /***
+     * 分账对象信息列表,最多仅支持7个分账方,json 数组形式,详见 分账对象信息列表
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String div_members;
+    /***
+     * 订单附加说明
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String description;
+    /***
+     * 前端设备信息,详见 设备信息
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private DeviceInfo device_info;
+    /***
+     * 支付渠道额外参数,JSON格式,条件可输入,详见 支付渠道 expend参数
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private Map<String,Object> expend;
+    /***
+     * 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String notify_url;
+
+    public String getOrder_no() {
+        return order_no;
+    }
+
+    public void setOrder_no(String order_no) {
+        this.order_no = order_no;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getPay_amt() {
+        return pay_amt;
+    }
+
+    public void setPay_amt(String pay_amt) {
+        this.pay_amt = pay_amt;
+    }
+
+    public String getGoods_title() {
+        return goods_title;
+    }
+
+    public void setGoods_title(String goods_title) {
+        this.goods_title = goods_title;
+    }
+
+    public String getGoods_desc() {
+        return goods_desc;
+    }
+
+    public void setGoods_desc(String goods_desc) {
+        this.goods_desc = goods_desc;
+    }
+
+    public String getDiv_members() {
+        return div_members;
+    }
+
+    public void setDiv_members(String div_members) {
+        this.div_members = div_members;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public DeviceInfo getDevice_info() {
+        return device_info;
+    }
+
+    public void setDevice_info(DeviceInfo device_info) {
+        this.device_info = device_info;
+    }
+
+    public Map<String, Object> getExpend() {
+        return expend;
+    }
+
+    public void setExpend(Map<String, Object> expend) {
+        this.expend = expend;
+    }
+
+    public String getNotify_url() {
+        return notify_url;
+    }
+
+    public void setNotify_url(String notify_url) {
+        this.notify_url = notify_url;
+    }
+
+    public String getPay_channel() {
+        return pay_channel;
+    }
+
+    public void setPay_channel(String pay_channel) {
+        this.pay_channel = pay_channel;
+    }
+}

+ 149 - 0
toolset/toolset-payment/payment-adapay/src/main/java/com/yonge/toolset/payment/adapay/props/HuifuProperties.java

@@ -0,0 +1,149 @@
+package com.yonge.toolset.payment.adapay.props;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+
+@RefreshScope
+@ConfigurationProperties("huifu")
+public class HuifuProperties {
+	/***
+	 * 汇付 控制台 主页面应用的app_id
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:19
+	 */
+	private String appId;
+	/***
+	 * 汇付 控制台->商户信息管理->证书管理中的API Key(prod模式的API KEY)
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:19
+	 */
+	private String apiKey;
+	/***
+	 * 汇付 控制台->商户信息管理->证书管理中的API Key(mock模式的API KEY)
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:19
+	 */
+	private String mockApiKey;
+	/***
+	 * 商户发起请求时,用于请求参数加签所需要的RSA私钥
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String rsaPrivateKey;
+	/***
+	 * 付款成功回调地址
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String notifyUrl;
+	/***
+	 * 微信appid
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String wxAppid;
+	/***
+	 * 微信secret
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String wxSecret;
+	/***
+	 * 支付宝appid
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String aliAppid;
+	/***
+	 * 支付宝开发者私钥(由开发者自己生成)
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String aliPrivatekey;
+	/***
+	 * 支付宝公钥(由支付宝生成)
+	 * @author liweifan
+	 * @updateTime 2022/3/31 11:24
+	 */
+	private String aliPublickey;
+
+	public String getApiKey() {
+		return apiKey;
+	}
+
+	public void setApiKey(String apiKey) {
+		this.apiKey = apiKey;
+	}
+
+	public String getMockApiKey() {
+		return mockApiKey;
+	}
+
+	public void setMockApiKey(String mockApiKey) {
+		this.mockApiKey = mockApiKey;
+	}
+
+	public String getRsaPrivateKey() {
+		return rsaPrivateKey;
+	}
+
+	public void setRsaPrivateKey(String rsaPrivateKey) {
+		this.rsaPrivateKey = rsaPrivateKey;
+	}
+
+	public String getAppId() {
+		return appId;
+	}
+
+	public void setAppId(String appId) {
+		this.appId = appId;
+	}
+
+	public String getWxAppid() {
+		return wxAppid;
+	}
+
+	public void setWxAppid(String wxAppid) {
+		this.wxAppid = wxAppid;
+	}
+
+	public String getWxSecret() {
+		return wxSecret;
+	}
+
+	public void setWxSecret(String wxSecret) {
+		this.wxSecret = wxSecret;
+	}
+
+	public String getNotifyUrl() {
+		return notifyUrl;
+	}
+
+	public void setNotifyUrl(String notifyUrl) {
+		this.notifyUrl = notifyUrl;
+	}
+
+	public String getAliAppid() {
+		return aliAppid;
+	}
+
+	public void setAliAppid(String aliAppid) {
+		this.aliAppid = aliAppid;
+	}
+
+	public String getAliPrivatekey() {
+		return aliPrivatekey;
+	}
+
+	public void setAliPrivatekey(String aliPrivatekey) {
+		this.aliPrivatekey = aliPrivatekey;
+	}
+
+	public String getAliPublickey() {
+		return aliPublickey;
+	}
+
+	public void setAliPublickey(String aliPublickey) {
+		this.aliPublickey = aliPublickey;
+	}
+}

+ 2 - 0
toolset/toolset-payment/payment-core/pom.xml

@@ -10,6 +10,8 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>payment-core</artifactId>
+    <packaging>jar</packaging>
+    <version>${project.toolset.version}</version>
 
     <dependencies>
         <!-- mybatis-plus -->

+ 0 - 14
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/config/PaymentConfiguration.java

@@ -1,14 +0,0 @@
-package com.yonge.toolset.payment.config;
-
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * Sms配置类
- *
- * @author Chill
- */
-@Configuration
-@EnableConfigurationProperties(PaymentConfiguration.class)
-public class PaymentConfiguration {
-}

+ 9 - 9
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/PaymentTemplate.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/PaymentTemplate.java

@@ -1,12 +1,12 @@
-package com.yonge.toolset.payment;
+package com.yonge.toolset.payment.core;
 
 import com.yonge.toolset.base.result.BaseResult;
-import com.yonge.toolset.payment.model.ClosePayment;
-import com.yonge.toolset.payment.model.Payment;
-import com.yonge.toolset.payment.model.RefundBill;
-import com.yonge.toolset.payment.model.res.ClosePaymentRes;
-import com.yonge.toolset.payment.model.res.PaymentRes;
-import com.yonge.toolset.payment.model.res.RefundBillRes;
+import com.yonge.toolset.payment.core.model.ClosePayment;
+import com.yonge.toolset.payment.core.model.Payment;
+import com.yonge.toolset.payment.core.model.RefundBill;
+import com.yonge.toolset.payment.core.model.res.ClosePaymentRes;
+import com.yonge.toolset.payment.core.model.res.PaymentRes;
+import com.yonge.toolset.payment.core.model.res.RefundBillRes;
 
 /**
  * @Author: liweifan
@@ -26,7 +26,7 @@ public interface PaymentTemplate {
      * @author liweifan
      * @param: closePayment
      * @updateTime 2022/5/10 15:34
-     * @return: com.yonge.toolset.base.result.BaseResult<com.yonge.toolset.payment.model.res.ClosePaymentRes>
+     * @return: com.yonge.toolset.base.result.BaseResult<com.yonge.toolset.payment.core.model.res.ClosePaymentRes>
      */
     BaseResult<ClosePaymentRes> closePayment(ClosePayment closePayment) throws Exception;
 
@@ -35,7 +35,7 @@ public interface PaymentTemplate {
      * @author liweifan
      * @param: closePayment
      * @updateTime 2022/5/10 15:34
-     * @return: com.yonge.toolset.base.result.BaseResult<com.yonge.toolset.payment.model.res.ClosePaymentRes>
+     * @return: com.yonge.toolset.base.result.BaseResult<com.yonge.toolset.payment.core.model.res.ClosePaymentRes>
      */
     BaseResult<RefundBillRes> refundPayment(RefundBill refundBill) throws Exception;
 

+ 1 - 1
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/constant/PaymentConstant.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/constant/PaymentConstant.java

@@ -1,4 +1,4 @@
-package com.yonge.toolset.payment.constant;
+package com.yonge.toolset.payment.core.constant;
 
 /**
  * @Author: liweifan

+ 2 - 2
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/enums/OpenEnum.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/enums/OpenEnum.java

@@ -1,4 +1,4 @@
-package com.yonge.toolset.payment.enums;
+package com.yonge.toolset.payment.core.enums;
 
 import com.yonge.toolset.base.enums.BaseEnum;
 
@@ -9,7 +9,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
  */
 public enum OpenEnum implements BaseEnum<String, OpenEnum> {
     ORIGINAL("ORIGINAL","微信支付宝"),
-    adapay("ADAPAY","汇付")
+    ADAPAY("ADAPAY","汇付")
     ;
     private String code;
     private String msg;

+ 1 - 1
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/enums/PayChannelEnum.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/enums/PayChannelEnum.java

@@ -1,4 +1,4 @@
-package com.yonge.toolset.payment.enums;
+package com.yonge.toolset.payment.core.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;

+ 10 - 1
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/enums/TradeStatusEnum.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/enums/TradeStatusEnum.java

@@ -1,4 +1,4 @@
-package com.yonge.toolset.payment.enums;
+package com.yonge.toolset.payment.core.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;
@@ -39,4 +39,13 @@ public enum TradeStatusEnum implements BaseEnum<String, TradeStatusEnum> {
     public String getCode() {
         return this.code;
     }
+
+    public static TradeStatusEnum getByName(String name) {
+        for (TradeStatusEnum statusEnum : TradeStatusEnum.values()) {
+            if (statusEnum.getCode().equals(name)) {
+                return statusEnum;
+            }
+        }
+        return null;
+    }
 }

+ 2 - 2
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/model/ClosePayment.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/ClosePayment.java

@@ -1,6 +1,6 @@
-package com.yonge.toolset.payment.model;
+package com.yonge.toolset.payment.core.model;
 
-import com.yonge.toolset.payment.enums.PayChannelEnum;
+import com.yonge.toolset.payment.core.enums.PayChannelEnum;
 
 import java.io.Serializable;
 

+ 27 - 0
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/DeviceInfo.java

@@ -0,0 +1,27 @@
+package com.yonge.toolset.payment.core.model;
+
+import java.io.Serializable;
+
+/**
+ * 交易设备信息
+ * @Author: liweifan
+ * @Data: 2022/3/31 11:36
+ */
+public class DeviceInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /***
+     * 交易设备所在的公网 IP
+     * @author liweifan
+     * @updateTime 2022/3/31 11:07
+     */
+    private String device_ip;
+
+    public String getDevice_ip() {
+        return device_ip;
+    }
+
+    public void setDevice_ip(String device_ip) {
+        this.device_ip = device_ip;
+    }
+}

+ 55 - 0
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/DivMember.java

@@ -0,0 +1,55 @@
+package com.yonge.toolset.payment.core.model;
+
+import java.io.Serializable;
+
+/**
+ * 分账对象
+ * @Author: liweifan
+ * @Data: 2022/3/31 11:26
+ */
+public class DivMember implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分账用户 Member对象 的 id;若是商户本身时,传入0
+     * @author liweifan
+     * @updateTime 2022/3/31 11:27
+     */
+    private String member_id;
+    /**
+     * 分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00
+     * @author liweifan
+     * @updateTime 2022/3/31 11:28
+     */
+    private String amount;
+    /**
+     * 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个
+     * @author liweifan
+     * @updateTime 2022/3/31 11:28
+     */
+    private String fee_flag;
+
+    public String getMember_id() {
+        return member_id;
+    }
+
+    public void setMember_id(String member_id) {
+        this.member_id = member_id;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getFee_flag() {
+        return fee_flag;
+    }
+
+    public void setFee_flag(String fee_flag) {
+        this.fee_flag = fee_flag;
+    }
+}

+ 49 - 2
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/model/Payment.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/Payment.java

@@ -1,11 +1,14 @@
-package com.yonge.toolset.payment.model;
+package com.yonge.toolset.payment.core.model;
 
-import com.yonge.toolset.payment.enums.PayChannelEnum;
+import com.yonge.toolset.payment.core.enums.PayChannelEnum;
 
 import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 统一支付对象
+ *
  * @Author: liweifan
  * @Data: 2022/5/10 15:06
  */
@@ -46,6 +49,7 @@ public class Payment implements Serializable {
      * @updateTime 2022/3/31 11:01
      */
     private String description;
+
     /***
      * 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
      * @author liweifan
@@ -53,6 +57,25 @@ public class Payment implements Serializable {
      */
     private String notifyUrl;
 
+    /***
+     * 分账对象信息列表
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private List<DivMember> divMembers;
+    /***
+     * 前端设备信息
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private DeviceInfo deviceInfo;
+    /***
+     * 支付渠道额外参数
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private Map<String,Object> expend;
+
 
     public String getOrderNo() {
         return orderNo;
@@ -109,4 +132,28 @@ public class Payment implements Serializable {
     public void setPayChannel(PayChannelEnum payChannel) {
         this.payChannel = payChannel;
     }
+
+    public List<DivMember> getDivMembers() {
+        return divMembers;
+    }
+
+    public void setDivMembers(List<DivMember> divMembers) {
+        this.divMembers = divMembers;
+    }
+
+    public DeviceInfo getDeviceInfo() {
+        return deviceInfo;
+    }
+
+    public void setDeviceInfo(DeviceInfo deviceInfo) {
+        this.deviceInfo = deviceInfo;
+    }
+
+    public Map<String, Object> getExpend() {
+        return expend;
+    }
+
+    public void setExpend(Map<String, Object> expend) {
+        this.expend = expend;
+    }
 }

+ 2 - 2
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/model/RefundBill.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/RefundBill.java

@@ -1,6 +1,6 @@
-package com.yonge.toolset.payment.model;
+package com.yonge.toolset.payment.core.model;
 
-import com.yonge.toolset.payment.enums.PayChannelEnum;
+import com.yonge.toolset.payment.core.enums.PayChannelEnum;
 
 import java.io.Serializable;
 import java.math.BigDecimal;

+ 3 - 3
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/model/res/ClosePaymentRes.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/res/ClosePaymentRes.java

@@ -1,7 +1,7 @@
-package com.yonge.toolset.payment.model.res;
+package com.yonge.toolset.payment.core.model.res;
 
-import com.yonge.toolset.payment.enums.TradeStatusEnum;
-import com.yonge.toolset.payment.model.ClosePayment;
+import com.yonge.toolset.payment.core.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.core.model.ClosePayment;
 
 /**
  * 支付关单返回对象

+ 3 - 3
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/model/res/PaymentRes.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/res/PaymentRes.java

@@ -1,7 +1,7 @@
-package com.yonge.toolset.payment.model.res;
+package com.yonge.toolset.payment.core.model.res;
 
-import com.yonge.toolset.payment.enums.TradeStatusEnum;
-import com.yonge.toolset.payment.model.Payment;
+import com.yonge.toolset.payment.core.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.core.model.Payment;
 
 /**
  * 支付返回对象

+ 3 - 3
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/model/res/RefundBillRes.java → toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/core/model/res/RefundBillRes.java

@@ -1,7 +1,7 @@
-package com.yonge.toolset.payment.model.res;
+package com.yonge.toolset.payment.core.model.res;
 
-import com.yonge.toolset.payment.enums.TradeStatusEnum;
-import com.yonge.toolset.payment.model.RefundBill;
+import com.yonge.toolset.payment.core.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.core.model.RefundBill;
 
 /**
  * @Author: liweifan

+ 0 - 8
toolset/toolset-payment/payment-core/src/main/java/com/yonge/toolset/payment/props/PaymentProperties.java

@@ -1,8 +0,0 @@
-package com.yonge.toolset.payment.props;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@ConfigurationProperties(prefix = "sms")
-public class PaymentProperties {
-
-}

+ 2 - 0
toolset/toolset-payment/pom.xml

@@ -11,9 +11,11 @@
 
     <artifactId>toolset-payment</artifactId>
     <packaging>pom</packaging>
+    <version>${project.toolset.version}</version>
 
     <modules>
         <module>payment-core</module>
+        <module>payment-adapay</module>
     </modules>
 
     <dependencies>