yonge 1 year ago
parent
commit
665eec21ff

+ 7 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java

@@ -1,7 +1,9 @@
 package com.ym.mec.biz.service.impl;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Date;
+import java.util.Map;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,7 +11,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.yeepay.yop.sdk.service.mer.response.RegisterSaasMerchantV2Response;
 import com.ym.mec.biz.dal.config.AdapayNotifyConstants;
 import com.ym.mec.biz.dal.dao.HfMemberDao;
 import com.ym.mec.biz.dal.dto.YeepayMember;
@@ -85,9 +86,9 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 			break;
 			
 		case YEEPAY:
-			RegisterSaasMerchantV2Response response = createMemberWithYeepay((YeepayMember) member);
-			member.setRequestNo(response.getResult().getRequestNo());
-			member.setMemberId(response.getResult().getMerchantNo());
+			Map<String, Object> response = createMemberWithYeepay((YeepayMember) member);
+			member.setRequestNo(response.get("requestNo").toString());
+			member.setMemberId(response.get("merchantNo").toString());
 			break;
 
 		default:
@@ -237,7 +238,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 		return corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
 	}
 	
-	private RegisterSaasMerchantV2Response createMemberWithYeepay(YeepayMember member) {
+	private Map<String, Object> createMemberWithYeepay(YeepayMember member) throws IOException {
 
 		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(member.getTenantId(), member.getPayerName());
 		if (hfMerchantConfig == null) {
@@ -273,6 +274,6 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 			notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "adapay");
 		}
 		
-		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), merchantInfo, notifyURL);
+		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig, merchantInfo, notifyURL);
 	}
 }

+ 22 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -33,7 +33,6 @@ import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.request.AlipaySystemOauthTokenRequest;
 import com.alipay.api.response.AlipaySystemOauthTokenResponse;
-import com.yeepay.yop.sdk.service.aggpay.request.PrePayRequest;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.PaymentParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -255,38 +254,36 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 			break;
 		case YEEPAY:
 			
-			PrePayRequest request = new PrePayRequest();
-			request.getRequestConfig().setAppKey(hfMerchantConfig.getAppId());
-			request.setParentMerchantNo(hfMerchantConfig.getPlatformPayeeMemberId());
-	        request.setMerchantNo(hfMerchantConfig.getPlatformPayeeMemberId());
-	        request.setOrderId(payParam.getOrderNo());
-	        request.setOrderAmount(payParam.getAmount());
-	        //request.setExpiredTime("2023-05-31 18:29:09");
-	        request.setNotifyUrl(payParam.getNotifyUrl());
-	        request.setRedirectUrl(payParam.getReturnUrl());
-	        request.setScene("OFFLINE");
-	        request.setMemo(null);
-	        request.setGoodsName(payParam.getOrderSubject());
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+			params.put("merchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+			params.put("orderId", payParam.getOrderNo());
+			params.put("orderAmount", payParam.getAmount());
+			params.put("notifyUrl", payParam.getNotifyUrl());
+			params.put("redirectUrl", payParam.getReturnUrl());
+			params.put("scene", "OFFLINE");
+			params.put("goodsName", payParam.getOrderSubject());
 	        if (payParam.getTenantId() == 1) {
                 // 延时分账
-		        request.setFundProcessType("DELAY_SETTLE");
+				params.put("fundProcessType", "DELAY_SETTLE");
             }else {
-		        request.setFundProcessType("REAL_TIME");
+    			params.put("fundProcessType", "REAL_TIME");
             }
-	        
 	        if(StringUtils.equals(payParam.getPayChannel(), "alipay_qr") || StringUtils.equals(payParam.getPayChannel(), "alipay_wap")) {
-		        request.setChannel("ALIPAY");
-		        request.setPayWay("ALIPAY_LIFE");//微信公众号
-		        request.setUserId(getAlipayUserId(hfMerchantConfig, payParam.getCode()));
+				params.put("channel", "ALIPAY");
+				params.put("payWay", "ALIPAY_LIFE");
+				params.put("userId", getAlipayUserId(hfMerchantConfig, payParam.getCode()));
+				
 	        }else if(StringUtils.equals(payParam.getPayChannel(), "wx_pub")) {
-		        request.setChannel("WECHAT");
-		        request.setPayWay("WECHAT_OFFIACCOUNT");//微信公众号
-		        request.setAppId(hfMerchantConfig.getWxAppId());
-		        request.setUserId(getOpenId(hfMerchantConfig, payParam.getCode()));
+				params.put("channel", "WECHAT");
+				params.put("payWay", "WECHAT_OFFIACCOUNT");
+				params.put("appId", hfMerchantConfig.getWxAppId());
+				params.put("userId", getOpenId(hfMerchantConfig, payParam.getCode()));
+				
 	        }
-	        request.setUserIp(payParam.getIp());
+			params.put("userIp", payParam.getIp());
 			
-			payment = yeepayPaymentService.prePay(request);
+			payment = yeepayPaymentService.prePay(hfMerchantConfig, params);
 			
 			transNo = (String) payment.get("uniqueOrderNo");
 			

+ 61 - 58
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -32,9 +33,6 @@ import org.springframework.transaction.annotation.Transactional;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.yeepay.yop.sdk.service.divide.model.ApplyYopOrderDivideResDTOResult;
-import com.yeepay.yop.sdk.service.divide.request.ApplyRequest;
-import com.yeepay.yop.sdk.service.trade.model.OrderQueryYopQueryOrderResDTOResult;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.GoodsDao;
@@ -443,15 +441,17 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if(paymentChannel == PaymentChannelEnum.ADAPAY) {
         	payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
         }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
-        	OrderQueryYopQueryOrderResDTOResult orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), payingOrder.getMerNos(), payingOrder.getOrderNo());
-        	payment.put("pay_channel", orderInfo.getChannel());
+        	Map<String, Object> orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig, payingOrder.getMerNos(), payingOrder.getOrderNo());
+        	payment.put("pay_channel", orderInfo.get("channel"));
         	
-        	if(StringUtils.equals("SUCCESS", orderInfo.getStatus())) {
+        	String respStatus = orderInfo.get("status").toString();
+        	
+        	if(StringUtils.equals("SUCCESS", respStatus)) {
             	payment.put("status", "succeeded");
-        	}else if(StringUtils.equals("FAIL", orderInfo.getStatus()) || StringUtils.equals("TIME_OUT", orderInfo.getStatus()) || StringUtils.equals("CLOSE", orderInfo.getStatus())) {
+        	}else if(StringUtils.equals("FAIL", respStatus) || StringUtils.equals("TIME_OUT", respStatus) || StringUtils.equals("CLOSE", respStatus)) {
             	payment.put("status", "failed");
         	}
-        	payment.put("error_msg", orderInfo.getFailReason());
+        	payment.put("error_msg", orderInfo.get("failReason"));
         }else {
         	throw new BizException("[{}]支付渠道不支持", payingOrder.getPaymentChannel());
         }
@@ -580,7 +580,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     		hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
     	}
         if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", order.getTenantId());
+        	throw new BizException("机构[{}][{}]商户信息找不到", order.getTenantId(), order.getPaymentChannel());
         }
         
         StudentPaymentRouteOrder studentPaymentRouteOrder = null;
@@ -632,54 +632,57 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentRouteOrderDao.update(studentPaymentRouteOrder);
 			}
 			
-        }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
-        	
-        	ApplyRequest request = new ApplyRequest();
-        	request.setParentMerchantNo(null);
-        	request.setMerchantNo(null);
-        	request.setOrderId(order.getOrderNo());
-        	request.setUniqueOrderNo(order.getTransNo());
-        	request.setDivideRequestId(idGeneratorService.generatorId("payment") + "");
-        	
-        	OrderQueryYopQueryOrderResDTOResult orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), order.getMerNos() , order.getOrderNo());
-        	if(orderInfo == null) {
-        		throw new BizException("[{}][{}]订单查询失败", paymentChannel, order.getOrderNo());
-        	}
-        	BigDecimal splitAmount = orderInfo.getUnSplitAmount();
-        	
-        	Map<String,String> divides = new HashMap<String, String>();
-        	
-        	BigDecimal divideAmount = BigDecimal.ZERO;
-        	BigDecimal dividedAmount = BigDecimal.ZERO;
-        	for (int i = 0; i < routeOrders.size(); i++) {
-        		
-        		studentPaymentRouteOrder = routeOrders.get(i);
-        		
-        		divides.put("ledgerNo", studentPaymentRouteOrder.getMerNo());
-        		
-        		if(i + 1 == routeOrders.size()) {
-            		divideAmount = splitAmount.subtract(dividedAmount);
-            		divides.put("amount", divideAmount.toPlainString());
-        		}else {
-            		divideAmount = studentPaymentRouteOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2, BigDecimal.ROUND_HALF_UP);
-            		divides.put("amount", divideAmount.toPlainString());
-        		}
-        		dividedAmount = dividedAmount.add(divideAmount);
-        		
-        		studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().subtract(divideAmount));
-        		studentPaymentRouteOrder.setUpdateTime(date);
-        	}
-        	request.setDivideDetail(JSON.toJSONString(divides));
-			request.getRequestConfig().setAppKey(hfMerchantConfig.getAppId());
-			
-        	ApplyYopOrderDivideResDTOResult result = yeepayPaymentService.divide(request);
-        	LOGGER.info("分账信息返回:{}", JSON.toJSONString(result));
-        	
-        	for(StudentPaymentRouteOrder spro : routeOrders) {
+		} else if (paymentChannel == PaymentChannelEnum.YEEPAY) {
+			try {
+				Map<String, Object> params = new HashMap<String, Object>();
+				params.put("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+				params.put("merchantNo", order.getMerNos());
+				params.put("orderId", order.getOrderNo());
+				params.put("uniqueOrderNo", order.getTransNo());
+				params.put("divideRequestId", idGeneratorService.generatorId("payment") + "");
+
+				Map<String, Object> orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig, order.getMerNos(), order.getOrderNo());
+				if (orderInfo == null) {
+					throw new BizException("[{}][{}]订单查询失败", paymentChannel, order.getOrderNo());
+				}
+				BigDecimal splitAmount = new BigDecimal(orderInfo.get("unSplitAmount").toString());
 
-                studentPaymentRouteOrderDao.update(spro);
-        	}
-        }
+				Map<String, String> divides = new HashMap<String, String>();
+
+				BigDecimal divideAmount = BigDecimal.ZERO;
+				BigDecimal dividedAmount = BigDecimal.ZERO;
+				for (int i = 0; i < routeOrders.size(); i++) {
+
+					studentPaymentRouteOrder = routeOrders.get(i);
+
+					divides.put("ledgerNo", studentPaymentRouteOrder.getMerNo());
+
+					if (i + 1 == routeOrders.size()) {
+						divideAmount = splitAmount.subtract(dividedAmount);
+						divides.put("amount", divideAmount.toPlainString());
+					} else {
+						divideAmount = studentPaymentRouteOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2,
+								BigDecimal.ROUND_HALF_UP);
+						divides.put("amount", divideAmount.toPlainString());
+					}
+					dividedAmount = dividedAmount.add(divideAmount);
+
+					studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().subtract(divideAmount));
+					studentPaymentRouteOrder.setUpdateTime(date);
+				}
+				params.put("divideDetail", JSON.toJSONString(divides));
+
+				Map<String, Object> result = yeepayPaymentService.divide(hfMerchantConfig, params);
+				LOGGER.info("分账信息返回:{}", JSON.toJSONString(result));
+			} catch (IOException e) {
+				throw new BizException("调用易宝接口报错", e);
+			}
+
+			for (StudentPaymentRouteOrder spro : routeOrders) {
+
+				studentPaymentRouteOrderDao.update(spro);
+			}
+		}
         
         return true;
     }
@@ -1030,8 +1033,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 }
             }
         }else if (StringUtils.equals(paymentChannel, "YEEPAY")) {
-        	OrderQueryYopQueryOrderResDTOResult result = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), studentPaymentOrder.getMerNos(), orderNo);
-        	String status = result.getStatus();
+        	Map<String, Object> result = yeepayPaymentService.queryOrder(hfMerchantConfig, studentPaymentOrder.getMerNos(), orderNo);
+        	String status = result.get("status").toString();
         	if (status.equals("SUCCESS")) {
                 return PayStatus.SUCCESSED;
             } else if (status.equals("TIME_OUT") || status.equals("FAIL") || status.equals("CLOSE")) {

+ 21 - 23
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -4,6 +4,8 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.security.PrivateKey;
+import java.security.PublicKey;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -40,13 +42,11 @@ import org.springframework.web.bind.annotation.RestController;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.beust.jcommander.internal.Maps;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
-import com.yeepay.yop.sdk.http.YopContentType;
-import com.yeepay.yop.sdk.service.common.YopCallbackEngine;
-import com.yeepay.yop.sdk.service.common.callback.YopCallback;
-import com.yeepay.yop.sdk.service.common.callback.YopCallbackRequest;
+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 com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ChildrenDayDegreeDetailDao;
@@ -98,6 +98,7 @@ import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.LuckDrawCountService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderActivityService;
 import com.ym.mec.biz.service.MusicGroupService;
@@ -117,6 +118,7 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
@@ -191,6 +193,8 @@ public class StudentOrderController extends BaseController {
     private VipGroupCategoryDao vipGroupCategoryDao;
     @Autowired
     private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -265,28 +269,22 @@ public class StudentOrderController extends BaseController {
 				}
 				break;
 			case YEEPAY:
-				String callbackUrl = "/studentOrder/callback/{orderNo}";
-				// 这个是您收到的header,为了方便测试,下面提供了示例数据
-				Map<String, String> headers = Maps.newHashMap();
-				headers.put("Authorization", request.getHeader("Authorization"));
-				headers.put("x-yop-content-sm3", request.getHeader("x-yop-content-sm3"));
-				headers.put("x-yop-encrypt", request.getHeader("x-yop-encrypt"));
-				headers.put("x-yop-request-id", request.getHeader("x-yop-request-id"));
-				headers.put("x-yop-sign-serial-no", request.getHeader("x-yop-sign-serial-no"));
-				headers.put("x-yop-appkey", request.getHeader("x-yop-appkey"));
-				headers.put("Content-Type", request.getHeader("Content-Type"));
 				
 				String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
-				// 构造结果通知请求对象
-				YopCallbackRequest yopCallbackRequest =
-				        new YopCallbackRequest(callbackUrl, "POST")
-				                .setContentType(YopContentType.JSON)
-				                .setHeaders(headers)
-				                .setContent(content);
 				
-				YopCallback callback = YopCallbackEngine.parse(yopCallbackRequest);
+				HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+		        if(hfMerchantConfig == null){
+		        	throw new BizException("机构[{}][{}]商户信息找不到", studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+		        }
+				
+				// 构造结果通知请求对象
+				DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+				dto.setCipherText(content);
+				PrivateKey privateKey =RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+				PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
 				
-				System.out.println("支付回调信息:" + JSON.toJSONString(callback));
+				dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);				
+				System.out.println("支付回调信息:" + JSON.toJSONString(dto));
 				
 				
 				break;

BIN
mec-thirdparty/libs/yop-java-sdk-biz-4.3.3.jar


+ 9 - 22
mec-thirdparty/pom.xml

@@ -96,6 +96,15 @@
 		</dependency>
 
 		<dependency>
+			<groupId>com.yeepay.yop</groupId>
+			<artifactId>yop-java-sdk</artifactId>
+			<version>3.2.25-jdk18json</version>
+			<scope>system</scope>
+			<systemPath>
+				${project.basedir}/libs/yop-java-sdk-3.2.25-jdk18json.jar</systemPath>
+		</dependency>
+
+		<dependency>
 			<groupId>
 				com.huifu.adapay.core</groupId>
 			<artifactId>adapay-core-sdk</artifactId>
@@ -148,28 +157,6 @@
 		</dependency>
 
 		<dependency>
-			<groupId>
-				com.yeepay.yop.sdk</groupId>
-			<artifactId>
-				yop-java-sdk-crypto-inter</artifactId>
-			<version>${yop-java-sdk.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>
-				com.yeepay.yop.sdk</groupId>
-			<artifactId>yop-java-sdk-crypto-gm</artifactId>
-			<version>
-				${yop-java-sdk.version}</version>
-		</dependency>
-		
-		<dependency>
-		  <groupId>
-				com.yeepay.yop.sdk</groupId>
-		  <artifactId>yop-java-sdk-biz</artifactId>
-		  <version>4.3.3</version>
-		</dependency>
-
-		<dependency>
 			<groupId>com.alipay.sdk</groupId>
 			<artifactId>alipay-sdk-java</artifactId>
 			<version>4.35.154.ALL</version>

+ 0 - 44
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/CustomFixedCredentialsProvider.java

@@ -1,44 +0,0 @@
-package com.ym.mec.thirdparty.yeepay;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.stereotype.Service;
-
-import com.yeepay.yop.sdk.auth.credentials.provider.YopCredentialsProviderRegistry;
-import com.yeepay.yop.sdk.base.auth.credentials.provider.YopFixedCredentialsProvider;
-import com.yeepay.yop.sdk.base.config.YopAppConfig;
-import com.yeepay.yop.sdk.config.enums.CertStoreType;
-import com.yeepay.yop.sdk.config.provider.file.YopCertConfig;
-import com.yeepay.yop.sdk.security.CertTypeEnum;
-
-@Service
-public class CustomFixedCredentialsProvider extends YopFixedCredentialsProvider implements InitializingBean {
-	
-
-	@Override
-	protected YopAppConfig loadAppConfig(String appKey) {
-		YopAppConfig yopAppConfig = new YopAppConfig();
-        yopAppConfig.setAppKey(appKey);
-
-        // SM2 example
-        YopCertConfig sm2CertConfig = new YopCertConfig();
-        sm2CertConfig.setCertType(CertTypeEnum.SM2);
-        sm2CertConfig.setStoreType(CertStoreType.STRING);
-        sm2CertConfig.setValue("MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgovmtg+OfLQSQjXwOTQSzCOJpEoJVSrm4yihMnfll8EmgCgYIKoEcz1UBgi2hRANCAAQASCp67G9rSFr1N9hFF+GZN4raqPC4qrsJsEt1dG8XITLPGRA0Vg9ebcYfZdXW29DROtBshoT0bXetOQKz2Ngh");
-
-        // load into sdk config
-        List<YopCertConfig> isvPrivateKeys = new ArrayList<YopCertConfig>();
-        isvPrivateKeys.add(sm2CertConfig);
-        yopAppConfig.setIsvPrivateKey(isvPrivateKeys);
-        
-        return yopAppConfig;
-	}
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		YopCredentialsProviderRegistry.registerProvider(this);
-	}
-
-}

+ 89 - 131
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayMerchantService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.thirdparty.yeepay;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -8,141 +9,98 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.yeepay.yop.sdk.exception.YopClientException;
-import com.yeepay.yop.sdk.service.mer.MerClient;
-import com.yeepay.yop.sdk.service.mer.MerClientBuilder;
-import com.yeepay.yop.sdk.service.mer.request.MerchantInfoModifyRequest;
-import com.yeepay.yop.sdk.service.mer.request.RegisterQueryV2Request;
-import com.yeepay.yop.sdk.service.mer.request.RegisterSaasMerchantV2Request;
-import com.yeepay.yop.sdk.service.mer.response.MerchantInfoModifyResponse;
-import com.yeepay.yop.sdk.service.mer.response.RegisterQueryV2Response;
-import com.yeepay.yop.sdk.service.mer.response.RegisterSaasMerchantV2Response;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.yeepay.g3.sdk.yop.exception.YopClientException;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
 
 @Service
 public class YeepayMerchantService {
-	
+
 	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayMerchantService.class);
 
-	private final MerClient api = MerClientBuilder.builder().build();
-	
-    public RegisterQueryV2Response registerQueryV2(String requestNo) throws YopClientException {
-        RegisterQueryV2Request request = new RegisterQueryV2Request();
-        request.setRequestNo(requestNo);
-        RegisterQueryV2Response response = api.registerQueryV2(request);
-        LOGGER.info("result:{}", response.getResult());
-        
-        return response;
-    }
-	
-	public RegisterSaasMerchantV2Response registerSaasMerchantV2(String appKey, String parentMerchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
-        RegisterSaasMerchantV2Request request = new RegisterSaasMerchantV2Request();
-        request.getRequestConfig().setAppKey(appKey);
-        request.setRequestNo(System.currentTimeMillis() + "");
-        request.setBusinessRole("SHARE_MERCHANT");
-        request.setParentMerchantNo(parentMerchantNo);
-        
-        merchantInfo.setRequestNo(request.getRequestNo());
-        
-        Map<String,String> merchantSubjectInfoMap = new HashMap<String, String>();
-        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
-        merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
-        merchantSubjectInfoMap.put("signType", "ENTERPRISE");
-        merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
-        merchantSubjectInfoMap.put("shortName", merchantInfo.getMerchantName());
-        merchantSubjectInfoMap.put("openAccountLicenceUrl", merchantInfo.getOpenAccountLicenceUrl());
-        request.setMerchantSubjectInfo(JSONObject.toJSONString(merchantSubjectInfoMap));
-        
-        Map<String,String> merchantCorporationInfoMap = new HashMap<String, String>();
-        merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
-        merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
-        merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
-        merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
-        merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
-        request.setMerchantCorporationInfo(JSONObject.toJSONString(merchantCorporationInfoMap));
-        
-        Map<String,String> merchantContactInfoMap = new HashMap<String, String>();
-        merchantContactInfoMap.put("contactName", merchantInfo.getContactName());
-        merchantContactInfoMap.put("contactLicenceNo", merchantInfo.getContactLicenceNo());
-        merchantContactInfoMap.put("contactMobile", merchantInfo.getContactMobile());
-        merchantContactInfoMap.put("contactEmail", merchantInfo.getContactEmail());
-        request.setMerchantContactInfo(JSONObject.toJSONString(merchantContactInfoMap));
-        
-        request.setIndustryCategoryInfo("{ \"primaryIndustryCategory\":\"120\", \"secondaryIndustryCategory\":\"120004\" }");
-        
-        Map<String,String> businessAddressInfoMap = new HashMap<String, String>();
-        businessAddressInfoMap.put("province", merchantInfo.getProvinceCode());
-        businessAddressInfoMap.put("city", merchantInfo.getCityCode());
-        businessAddressInfoMap.put("district", merchantInfo.getDistrictCode());
-        businessAddressInfoMap.put("address", merchantInfo.getAddress());
-        request.setBusinessAddressInfo(JSONObject.toJSONString(businessAddressInfoMap));
-        
-        Map<String,String> settlementAccountInfoMap = new HashMap<String, String>();
-        settlementAccountInfoMap.put("settlementDirection", "BANKCARD");
-        settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
-        settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
-        settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
-        request.setSettlementAccountInfo(JSONObject.toJSONString(settlementAccountInfoMap));
-        
-        request.setNotifyUrl(notifyURL);
-        request.setProductInfo("[{\"productCode\":\"D1\",\"rateType\":\"SINGLE_FIXED\",\"fixedRate\":\"0\",\"paymentMethod\":\"REAL_TIME\"}]");
-        //request.setProductQualificationInfo("{ \"paymentScene\": \"RLZYFW\",   \"systemScreenshotUrl\": \"https://staticres.yeepay.com/xxx.文件后缀\",   \"specialPermitProcessUrl\": \"https://staticres.yeepay.com/xxx.文件后缀\",   \"agreementPhotoUrl\": \"https://staticres.yeepay.com/xxx.文件后缀\" }");
-        //request.setFunctionService("[\"SHARE\"]");
-        //request.setFunctionServiceQualificationInfo("{\"shareScene\":\"FZ_ALL001\"}");
-        RegisterSaasMerchantV2Response response = api.registerSaasMerchantV2(request);
-        LOGGER.info("result:{}", response.getResult());
-
-        return response;
-    }
-	
-    public void merchantInfoModify(String merchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
-        MerchantInfoModifyRequest request = new MerchantInfoModifyRequest();
-        request.setRequestNo(System.currentTimeMillis() + "");
-        request.setMerchantNo(merchantNo);
-        request.setNotifyUrl(notifyURL);
-        
-        Map<String,String> merchantSubjectInfoMap = new HashMap<String, String>();
-        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
-        merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
-        merchantSubjectInfoMap.put("signType", "ENTERPRISE");
-        merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
-        merchantSubjectInfoMap.put("shortName", merchantInfo.getMerchantName());
-        merchantSubjectInfoMap.put("openAccountLicenceUrl", merchantInfo.getOpenAccountLicenceUrl());
-        request.setMerchantSubjectInfo(JSONObject.toJSONString(merchantSubjectInfoMap));
-
-        Map<String,String> merchantCorporationInfoMap = new HashMap<String, String>();
-        merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
-        merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
-        merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
-        merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
-        merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
-        request.setMerchantCorporationInfo(JSONObject.toJSONString(merchantCorporationInfoMap));
-        
-        Map<String,String> merchantContactInfoMap = new HashMap<String, String>();
-        merchantContactInfoMap.put("contactName", merchantInfo.getContactName());
-        merchantContactInfoMap.put("contactLicenceNo", merchantInfo.getContactLicenceNo());
-        merchantContactInfoMap.put("contactMobile", merchantInfo.getContactMobile());
-        merchantContactInfoMap.put("contactEmail", merchantInfo.getContactEmail());
-        request.setMerchantContactInfo(JSONObject.toJSONString(merchantContactInfoMap));
-        
-        Map<String,String> businessAddressInfoMap = new HashMap<String, String>();
-        businessAddressInfoMap.put("province", merchantInfo.getProvinceCode());
-        businessAddressInfoMap.put("city", merchantInfo.getCityCode());
-        businessAddressInfoMap.put("district", merchantInfo.getDistrictCode());
-        businessAddressInfoMap.put("address", merchantInfo.getAddress());
-        request.setBusinessAddressInfo(JSONObject.toJSONString(businessAddressInfoMap));
-        
-        Map<String,String> settlementAccountInfoMap = new HashMap<String, String>();
-        settlementAccountInfoMap.put("settlementDirection", merchantInfo.getSettlementDirection());
-        settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
-        settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
-        settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
-        //request.setSettlementAccountInfo(JSONObject.toJSONString(settlementAccountInfoMap));
-        
-        request.setAccountInfo("{\"bankAccountName\":\"开户名称\",\"bankAccountType\":\"银行账户类型\",\"bankAccountNo\":\"银行账户号码\",\"bankCardTag\":\"[\\\"SETTLEMENT\\\",\\\"WITHDRAW\\\"]\",\"authorizationUrl\":\"https://staticres.yeepay.com/xxx.文件后缀\",\"bankCode\":\"开户总行编码\"}");
-        MerchantInfoModifyResponse response = api.merchantInfoModify(request);
-        LOGGER.info("result:{}", response.getResult());
-        // TODO: test validations
-    }
-	
+	public JSONObject registerQueryV2(HfMerchantConfig hfMerchantConfig, String requestNo) throws IOException {
+
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+
+		request.addParam("requestNo", requestNo);
+
+		YopResponse response = YopRsaClient.get("/rest/v2.0/mer/register/query", request);
+
+		LOGGER.info("易宝[商户入网查询][{}] resp:{}", requestNo, response.getStringResult());
+
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public Map<String, Object> registerSaasMerchantV2(HfMerchantConfig hfMerchantConfig, MerchantInfo merchantInfo, String notifyURL) throws IOException {
+
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+
+		request.addParam("requestNo", System.currentTimeMillis() + "");
+		request.addParam("businessRole", "SHARE_MERCHANT");
+		request.addParam("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+
+		Map<String, String> merchantSubjectInfoMap = new HashMap<String, String>();
+		merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
+		merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
+		merchantSubjectInfoMap.put("signType", "ENTERPRISE");
+		merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
+		merchantSubjectInfoMap.put("shortName", merchantInfo.getMerchantName());
+		merchantSubjectInfoMap.put("openAccountLicenceUrl", merchantInfo.getOpenAccountLicenceUrl());
+		request.addParam("merchantSubjectInfo", JSONObject.toJSONString(merchantSubjectInfoMap));
+
+		Map<String, String> merchantCorporationInfoMap = new HashMap<String, String>();
+		merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
+		merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
+		merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
+		merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
+		merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
+		request.addParam("merchantCorporationInfo", JSONObject.toJSONString(merchantCorporationInfoMap));
+
+		Map<String, String> merchantContactInfoMap = new HashMap<String, String>();
+		merchantContactInfoMap.put("contactName", merchantInfo.getContactName());
+		merchantContactInfoMap.put("contactLicenceNo", merchantInfo.getContactLicenceNo());
+		merchantContactInfoMap.put("contactMobile", merchantInfo.getContactMobile());
+		merchantContactInfoMap.put("contactEmail", merchantInfo.getContactEmail());
+		request.addParam("merchantContactInfo", JSONObject.toJSONString(merchantContactInfoMap));
+
+		request.addParam("industryCategoryInfo", "{ \"primaryIndustryCategory\":\"120\", \"secondaryIndustryCategory\":\"120004\" }");
+
+		Map<String, String> businessAddressInfoMap = new HashMap<String, String>();
+		businessAddressInfoMap.put("province", merchantInfo.getProvinceCode());
+		businessAddressInfoMap.put("city", merchantInfo.getCityCode());
+		businessAddressInfoMap.put("district", merchantInfo.getDistrictCode());
+		businessAddressInfoMap.put("address", merchantInfo.getAddress());
+		request.addParam("businessAddressInfo", JSONObject.toJSONString(businessAddressInfoMap));
+
+		Map<String, String> settlementAccountInfoMap = new HashMap<String, String>();
+		settlementAccountInfoMap.put("settlementDirection", "BANKCARD");
+		settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
+		settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
+		settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
+		request.addParam("settlementAccountInfo", JSONObject.toJSONString(settlementAccountInfoMap));
+
+		request.addParam("notifyUrl", notifyURL);
+		request.addParam("productInfo", "[{\"productCode\":\"D1\",\"rateType\":\"SINGLE_FIXED\",\"fixedRate\":\"0\",\"paymentMethod\":\"REAL_TIME\"}]");
+
+
+		LOGGER.info("易宝[商户入网] req:{}", request);
+		
+		YopResponse response = YopRsaClient.post("/rest/v2.0/mer/register/saas/merchant", request);
+
+		LOGGER.info("易宝[商户入网] resp:{}", response.getStringResult());
+
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public void merchantInfoModify(String merchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
+
+	}
+
 }

+ 69 - 46
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java

@@ -1,67 +1,90 @@
 package com.ym.mec.thirdparty.yeepay;
 
+import java.io.IOException;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson.JSON;
-import com.yeepay.yop.sdk.exception.YopClientException;
-import com.yeepay.yop.sdk.service.aggpay.AggpayClient;
-import com.yeepay.yop.sdk.service.aggpay.AggpayClientBuilder;
-import com.yeepay.yop.sdk.service.aggpay.request.PrePayRequest;
-import com.yeepay.yop.sdk.service.aggpay.response.PrePayResponse;
-import com.yeepay.yop.sdk.service.divide.DivideClient;
-import com.yeepay.yop.sdk.service.divide.DivideClientBuilder;
-import com.yeepay.yop.sdk.service.divide.model.ApplyYopOrderDivideResDTOResult;
-import com.yeepay.yop.sdk.service.divide.request.ApplyRequest;
-import com.yeepay.yop.sdk.service.divide.response.ApplyResponse;
-import com.yeepay.yop.sdk.service.trade.TradeClient;
-import com.yeepay.yop.sdk.service.trade.TradeClientBuilder;
-import com.yeepay.yop.sdk.service.trade.model.OrderQueryYopQueryOrderResDTOResult;
-import com.yeepay.yop.sdk.service.trade.request.OrderQueryRequest;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 
 @Service
 public class YeepayPaymentService {
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayPaymentService.class);
 
-	private final AggpayClient aggpayApi = AggpayClientBuilder.builder().build();
-
-	private final TradeClient tradApi = TradeClientBuilder.builder().build();
-
-	private final DivideClient divideApi = DivideClientBuilder.builder().build();
-
-	public Map<String, Object> prePay(PrePayRequest request) throws YopClientException {
-
-		LOGGER.info("易宝[创建支付对象] Req:{}", JSON.toJSONString(request));
-		PrePayResponse response = aggpayApi.prePay(request);
-
-		String resp = JSON.toJSONString(response.getResult());
-
-		LOGGER.info("易宝[创建支付对象] Resp:{}", resp);
-
-		return JSON.parseObject(resp, Map.class);
+	public Map<String, Object> prePay(HfMerchantConfig hfMerchantConfig, Map<String, Object> params) throws IOException {
+
+		String reqJson = JSON.toJSONString(params);
+		LOGGER.info("易宝[创建支付对象] Req:{}", reqJson);
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", params.get("parentMerchantNo"));
+		request.addParam("merchantNo", params.get("merchantNo"));
+		request.addParam("orderId", params.get("orderId"));
+		request.addParam("orderAmount", params.get("orderAmount"));
+		request.addParam("notifyUrl", params.get("notifyUrl"));
+		request.addParam("redirectUrl", params.get("redirectUrl"));
+		request.addParam("scene", params.get("scene"));
+		request.addParam("goodsName", params.get("goodsName"));
+		request.addParam("fundProcessType", params.get("fundProcessType"));
+		request.addParam("channel", params.get("channel"));
+		request.addParam("payWay", params.get("payWay"));
+		request.addParam("appId", params.get("appId"));
+		request.addParam("userId", params.get("userId"));
+		request.addParam("userIp", params.get("userIp"));
+		
+		YopResponse response = YopRsaClient.post("/rest/v1.0/aggpay/pre-pay", request);
+
+		LOGGER.info("易宝[创建支付对象] Resp:{}", response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
 	}
 
-	public OrderQueryYopQueryOrderResDTOResult queryOrder(String appKey, String parentMerchantNo, String merchantNo, String orderNo) {
-		OrderQueryRequest request = new OrderQueryRequest();
-		request.getRequestConfig().setAppKey(appKey);
-		request.setParentMerchantNo(parentMerchantNo);
-		request.setMerchantNo(merchantNo);
-		request.setOrderId(orderNo);
-
-		OrderQueryYopQueryOrderResDTOResult response = tradApi.orderQuery(request).getResult();
-		LOGGER.info("易宝[订单查询][{}] Resp:{}", orderNo, response);
-
-		return response;
+	public Map<String, Object> queryOrder(HfMerchantConfig hfMerchantConfig,String merchantNo,  String orderNo) throws IOException {
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+		request.addParam("merchantNo", merchantNo);
+		request.addParam("orderId", orderNo);
+		
+		YopResponse response = YopRsaClient.get("/rest/v1.0/trade/order/query", request);
+
+		LOGGER.info("易宝[订单查询][{}] Resp:{}", orderNo, response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+		
+		return jsonObject;
 	}
 
-	public ApplyYopOrderDivideResDTOResult divide(ApplyRequest request) {
-		ApplyResponse response = divideApi.apply(request);
-		LOGGER.info("易宝[分账][{}] Resp:{}", request.getOrderId(), response.getResult());
-
-		return response.getResult();
+	public Map<String,Object> divide(HfMerchantConfig hfMerchantConfig, Map<String, Object> params) throws IOException {
+		
+		String reqJson = JSON.toJSONString(params);
+		LOGGER.info("易宝[分账][{}] Req:{}", params.get("orderId"), reqJson);
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", params.get("parentMerchantNo"));
+		request.addParam("merchantNo", params.get("merchantNo"));
+		request.addParam("orderId", params.get("orderId"));
+		request.addParam("uniqueOrderNo", params.get("uniqueOrderNo"));
+		request.addParam("divideRequestId", params.get("divideRequestId"));
+		request.addParam("divideDetail", params.get("divideDetail"));
+		
+		YopResponse response = YopRsaClient.post("/rest/v1.0/divide/apply", request);
+
+		LOGGER.info("易宝[分账][{}] Resp:{}", params.get("orderId"), response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+		
+		return jsonObject;
 	}
 }

+ 24 - 20
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayUploadService.java

@@ -1,38 +1,42 @@
 package com.ym.mec.thirdparty.yeepay;
 
 import java.io.File;
+import java.io.IOException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
-import com.yeepay.yop.sdk.exception.YopClientException;
-import com.yeepay.yop.sdk.service.sys.SysClient;
-import com.yeepay.yop.sdk.service.sys.SysClientBuilder;
-import com.yeepay.yop.sdk.service.sys.request.MerchantQualUploadRequest;
-import com.yeepay.yop.sdk.service.sys.response.MerchantQualUploadResponse;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 
 @Service
 public class YeepayUploadService {
 	
 	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayUploadService.class);
 
-    // 该Client线程安全,请使用单例模式,多次请求共用
-    private static final SysClient api = SysClientBuilder.builder().build();
-
-	public String upload(String appKey, File file) {
-		MerchantQualUploadRequest request = new MerchantQualUploadRequest();
-		request.getRequestConfig().setAppKey(appKey);
-        request.setMerQual(file);
-        try {
-            MerchantQualUploadResponse response = api.merchantQualUpload(request);
-            LOGGER.info("result:{}", response.getResult());
-            
-            return response.getResult().getMerQualUrl();
-        } catch (YopClientException e) {
-            LOGGER.error("Exception when calling SysClient#merchantQualUpload, ex:", e);
-        }
+	public String upload(HfMerchantConfig hfMerchantConfig, File file) {
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		
+		//request.addParam("merQual", file);
+		request.addFile("merQual", file);
+		try {
+			YopResponse response = YopRsaClient.post("/yos/v1.0/sys/merchant/qual/upload", request);
+			
+			LOGGER.info("result:{}", response.getStringResult());
+			
+			JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+			
+			return jsonObject.getString("merQualUrl");
+		} catch (IOException e) {
+			LOGGER.error("Exception when calling SysClient#merchantQualUpload, ex:", e);
+		}
         
         return null;
+		
 	}
 }

+ 33 - 36
mec-web/src/main/java/com/ym/mec/web/controller/payment/YeepayController.java

@@ -5,7 +5,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
+import java.security.PrivateKey;
+import java.security.PublicKey;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -15,18 +16,17 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.alibaba.fastjson.JSON;
-import com.beust.jcommander.internal.Maps;
-import com.yeepay.yop.sdk.http.YopContentType;
-import com.yeepay.yop.sdk.service.common.YopCallbackEngine;
-import com.yeepay.yop.sdk.service.common.callback.YopCallback;
-import com.yeepay.yop.sdk.service.common.callback.YopCallbackRequest;
-import com.yeepay.yop.sdk.service.mer.response.RegisterQueryV2Response;
+import com.alibaba.fastjson.JSONObject;
+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 com.ym.mec.biz.dal.dto.YeepayMember;
 import com.ym.mec.biz.dal.entity.HfMember;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
@@ -78,9 +78,14 @@ public class YeepayController extends BaseController {
     @ApiOperation(value = "企业用户注册查询")
     @GetMapping("/registerQuery")
     @PreAuthorize("@pcs.hasPermissions('yeepay/registerQuery')")
-    public HttpResponseResult<RegisterQueryV2Response> registerQuery(String requestNo) {
-    	
-        return succeed(yeepayMerchantService.registerQueryV2(requestNo));
+    public HttpResponseResult<JSONObject> registerQuery(String requestNo) throws IOException {
+		
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        }
+        
+        return succeed(yeepayMerchantService.registerQueryV2(hfMerchantConfig, requestNo));
     }
 
     @ApiOperation("新建企业用户")
@@ -104,36 +109,28 @@ public class YeepayController extends BaseController {
     	return null;
     }
 
-    @PostMapping("/callback")
-	public String callback(HttpServletRequest request) {
-
-		String callbackUrl = "/yeepay/callback";
-		// 这个是您收到的header,为了方便测试,下面提供了示例数据
-		Map<String, String> headers = Maps.newHashMap();
-		headers.put("Authorization", request.getHeader("Authorization"));
-		headers.put("x-yop-content-sm3", request.getHeader("x-yop-content-sm3"));
-		headers.put("x-yop-encrypt", request.getHeader("x-yop-encrypt"));
-		headers.put("x-yop-request-id", request.getHeader("x-yop-request-id"));
-		headers.put("x-yop-sign-serial-no", request.getHeader("x-yop-sign-serial-no"));
-		headers.put("x-yop-appkey", request.getHeader("x-yop-appkey"));
-		headers.put("Content-Type", request.getHeader("Content-Type"));
-		
-		String content;
+    @PostMapping("/callback/{tenantId}")
+	public String callback(@PathVariable("tenantId") Integer tenantId, HttpServletRequest request) {
+
 		try {
-			content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
-			// 构造结果通知请求对象
-			YopCallbackRequest yopCallbackRequest =
-			        new YopCallbackRequest(callbackUrl, "POST")
-			                .setContentType(YopContentType.JSON)
-			                .setHeaders(headers)
-			                .setContent(content);
+			String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
 			
-			YopCallback callback = YopCallbackEngine.parse(yopCallbackRequest);
+			HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, PaymentChannelEnum.YEEPAY.getCode());
+	        if(hfMerchantConfig == null){
+	        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, PaymentChannelEnum.YEEPAY.getCode());
+	        }
+			
+			// 构造结果通知请求对象
+			DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+			dto.setCipherText(content);
+			PrivateKey privateKey =RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+			PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
 			
-			System.out.println("开户回调信息:" + JSON.toJSONString(callback));
+			dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);				
+			System.out.println("支付回调信息:" + JSON.toJSONString(dto));
 			
 			return "SUCCESS";
-		} catch (IOException e) {
+		} catch (Exception e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
@@ -161,7 +158,7 @@ public class YeepayController extends BaseController {
             	throw new BizException("请配置机构的汇付商户信息");
             }
         	
-            return succeed(yeepayUploadService.upload(hfMerchantConfig.getAppId(), file));
+            return succeed(yeepayUploadService.upload(hfMerchantConfig, file));
         } catch (Exception e) {
             return failed(e.getMessage());
         } finally {