Ver Fonte

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan há 2 anos atrás
pai
commit
abccba696c

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java

@@ -3,8 +3,6 @@ package com.ym.mec.biz.service;
 import java.math.BigDecimal;
 import java.util.Map;
 
-import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
-
 /**
  * 支付服务类
  */
@@ -40,6 +38,6 @@ public interface PayService {
 	 * @return
 	 * @throws Exception
 	 */
-	Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo,
+	Map<String, Object> getPayToPlatformMap(Integer tenantId, BigDecimal amount, BigDecimal balanceAmount, String orderNo,
 			String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception;
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/TenantOrderRecordService.java

@@ -33,7 +33,7 @@ public interface TenantOrderRecordService extends IService<TenantOrderRecord> {
 
     void rechargeSuccess(TenantOrderRecord record);
 
-    String callback(HttpServletRequest request);
+    String callback(String orderNo, HttpServletRequest request);
 
 }
 

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -194,12 +194,11 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         //消费大于0元则拉起支付
         if (payAmount.compareTo(BigDecimal.ZERO) > 0) {
             payMap = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     payAmount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
-                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
+                    baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
             );

+ 11 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -463,12 +463,21 @@ public class PayServiceImpl implements PayService {
     }
 
     @Override
-	public Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
+	public Map<String, Object> getPayToPlatformMap(Integer tenantId, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
 			String orderSubject, String orderBody) throws Exception {
+        
+        //获取支付渠道
+		String paymentChannelStr = sysConfigDao.findConfigValue(SysConfigService.PAYMENT_CHANNEL);
+		
+		if(StringUtils.isBlank(paymentChannelStr)) {
+			paymentChannelStr = PaymentChannelEnum.ADAPAY.getCode();
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(paymentChannelStr);
     	
         HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannel.getCode());
         if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, paymentChannel.getCode());
         }
     	
         Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);

+ 3 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -800,11 +800,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //消费大于0元则拉起支付
         if (productInfo.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
             result = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     productInfo.getPayAmount(),
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
                     baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
@@ -847,11 +846,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //消费大于0元则拉起支付
         if (amount.compareTo(BigDecimal.ZERO) > 0) {
             result = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     amount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
                     baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
@@ -1134,11 +1132,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //消费大于0元则拉起支付
         if (amount.compareTo(BigDecimal.ZERO) > 0) {
             result = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     amount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
                     baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()

+ 127 - 53
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
 import java.math.BigDecimal;
+import java.security.PrivateKey;
+import java.security.PublicKey;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -12,6 +14,10 @@ import java.util.function.Consumer;
 import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
+import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
+import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
+import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.LocalDateTime;
@@ -460,59 +466,127 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String callback(HttpServletRequest request) {
-        // 验签请参data
-        String data = request.getParameter("data");
-        // 验签请参sign
-        String sign = request.getParameter("sign");
-        log.info("tenant callback request param:{}", data);
-        try {
-            // 验签
-            if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
-                JSONObject dataObj = JSON.parseObject(data);
-                String transType = request.getParameter("type");
-                String orderNo = dataObj.getString("order_no");
-                TenantOrderRecord record = this.getOne(Wrappers.<TenantOrderRecord>lambdaQuery()
-                        .eq(TenantOrderRecord::getOrderNo, orderNo));
-                if(Objects.isNull(record)){
-                    log.error("error tenant callback request orderNo is null param:{}", data);
-                    return "failed";
-                }
-                record = tenantOrderRecordDao.getLockedById(record.getId());
-                //只处理未支付状态的订单
-                if(!record.getOrderState().equals(0)){
-                    return "succeeded";
-                }
-                switch (transType) {
-                    case "payment.succeeded":// 支付成功
-                        Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
-                        if (Objects.nonNull(consumer)) {
-                            consumer.accept(record);
-                        }
-                        LocalDateTime now = LocalDateTime.now();
-                        record.setPayDate(now.toLocalDate().toDate());
-                        record.setPayTime(now.toDate());
-                        //修改流水
-                        record.setOrderState(1);
-                        baseMapper.updateById(record);
-                        break;
-                    case "payment.failed":// 支付失败
-                        //修改流水
-                        record.setOrderState(2);
-                        baseMapper.updateById(record);
-                        break;
-                    default:
-                        break;
-                }
-            } else {
-                return "验签失败";
-            }
-        } catch (Exception e) {
-            log.error("error tenant callback request param:{}", data);
-            return e.getMessage();
-        }
-        return "succeeded";
-    }
+	public String callback(String orderNo, HttpServletRequest request) {
+
+		TenantOrderRecord record = this.getOne(Wrappers.<TenantOrderRecord> lambdaQuery().eq(TenantOrderRecord::getOrderNo, orderNo));
+		if (Objects.isNull(record)) {
+			return "failed";
+		}
+		record = tenantOrderRecordDao.getLockedById(record.getId());
+		// 只处理未支付状态的订单
+		if (!record.getOrderState().equals(0)) {
+			return "succeeded";
+		}
+
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(record.getPaymentChannel());
+
+		try {
+
+			switch (paymentChannel) {
+			case ADAPAY:
+				// 验签请参data
+				String data = request.getParameter("data");
+				// 验签请参sign
+				String sign = request.getParameter("sign");
+
+				String transType = request.getParameter("type");
+
+				log.info("callback response param:[data]{} [sign]{} [type]{}", data, sign, transType);
+
+				// 验签
+				if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+					JSONObject dataObj = JSON.parseObject(data);
+					// String orderNo = dataObj.getString("order_no");
+					switch (transType) {
+					case "payment.succeeded":// 支付成功
+						Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
+						if (Objects.nonNull(consumer)) {
+							consumer.accept(record);
+						}
+						LocalDateTime now = LocalDateTime.now();
+						record.setPayDate(now.toLocalDate().toDate());
+						record.setPayTime(now.toDate());
+						// 修改流水
+						record.setOrderState(1);
+						baseMapper.updateById(record);
+						break;
+					case "payment.failed":// 支付失败
+						// 修改流水
+						record.setOrderState(2);
+						baseMapper.updateById(record);
+						break;
+					default:
+						break;
+					}
+				} else {
+					return "验签失败";
+				}
+
+				break;
+			case YEEPAY:
+
+				String content = request.getParameter("response");
+
+				HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(record.getTenantId(), record.getPaymentChannel());
+				if (hfMerchantConfig == null) {
+					throw new BizException("机构[{}][{}]商户信息找不到", record.getTenantId(), record.getPaymentChannel());
+				}
+
+				// 构造结果通知请求对象
+				DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+				dto.setCipherText(content);
+				PrivateKey privateKey = RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+				PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
+
+				dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+
+				log.info("易宝支付回调信息:response:{} plaintText:{}", content, dto.getPlainText());
+
+				JSONObject dataObj = JSON.parseObject(dto.getPlainText());
+
+				Map<String, String> notifyMap = new HashMap<>();
+				notifyMap.put("channelType", dataObj.getString("channel"));
+
+				if ("SUCCESS".equals(dataObj.getString("status"))) {
+					Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
+					if (Objects.nonNull(consumer)) {
+						consumer.accept(record);
+					}
+					LocalDateTime now = LocalDateTime.now();
+					record.setPayDate(now.toLocalDate().toDate());
+					record.setPayTime(now.toDate());
+					// 修改流水
+					record.setOrderState(1);
+					baseMapper.updateById(record);
+				} else {
+					// 修改流水
+					record.setOrderState(2);
+					baseMapper.updateById(record);
+				}
+
+				break;
+
+			default:
+				break;
+			}
+
+		} catch (Exception e) {
+			return e.getMessage();
+		}
+
+		// 验签请参data
+		String data = request.getParameter("data");
+		// 验签请参sign
+		String sign = request.getParameter("sign");
+		log.info("tenant callback request param:{}", data);
+		try {
+
+		} catch (Exception e) {
+			log.error("error tenant callback request param:{}", data);
+			return e.getMessage();
+		}
+		return "succeeded";
+	}
 
 }
 

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -338,6 +338,9 @@
             <if test="courseViewType != null">
                 AND mg.course_view_type_ = #{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
+            <if test="status != null">
+                AND mg.status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
             <if test="musicGroupIds!=null and musicGroupIds.size()>0">
                 AND mg.id_ IN
                 <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">

+ 3 - 3
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -187,9 +187,9 @@ public class TenantInfoController extends BaseController {
         return succeed();
     }
 
-    @PostMapping("/callback")
-    public String callback(HttpServletRequest request) {
-        return tenantOrderRecordService.callback(request);
+    @PostMapping("/callback/{orderNo}")
+    public String callback(@PathVariable("orderNo") String orderNo, HttpServletRequest request) {
+        return tenantOrderRecordService.callback(orderNo, request);
     }
 
 }