yonge 2 years ago
parent
commit
20c114f255

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/config/AdapayNotifyConstants.java

@@ -2,9 +2,9 @@ package com.ym.mec.biz.dal.config;
 
 public class AdapayNotifyConstants {
 	
-	public static String corp_member_notify_url_test = "https://test.dayaedu.com/api-web/adapay/callback";
+	public static String corp_member_notify_url_test = "https://test.dayaedu.com/api-web/{}/callback";
 
-	public static String corp_member_notify_url_prod = "https://online.dayaedu.com/api-web/adapay/callback";
+	public static String corp_member_notify_url_prod = "https://online.dayaedu.com/api-web/{}/callback";
 	
 	public static String student_payment_notify_url_test = "https://mstutest.dayaedu.com/api-student/studentOrder/callback";
 	

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java

@@ -111,7 +111,7 @@ public class HfMember extends BaseEntity {
     private String contactName;
     
     @ApiModelProperty(value = "联系人证件号码",required = false)
-    private String contactLicenseNo;
+    private String contactLicenceNo;
     
     @ApiModelProperty(value = "联系人手机号码",required = false)
     private String contactMobile;
@@ -391,12 +391,12 @@ public class HfMember extends BaseEntity {
 		this.contactName = contactName;
 	}
 
-	public String getContactLicenseNo() {
-		return contactLicenseNo;
+	public String getContactLicenceNo() {
+		return contactLicenceNo;
 	}
 
-	public void setContactLicenseNo(String contactLicenseNo) {
-		this.contactLicenseNo = contactLicenseNo;
+	public void setContactLicenceNo(String contactLicenseNo) {
+		this.contactLicenceNo = contactLicenseNo;
 	}
 
 	public String getContactMobile() {

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

@@ -27,6 +27,7 @@ import com.ym.mec.thirdparty.adapay.entity.EnterpriseUser;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yeepay.YeepayMerchantService;
 import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+import com.ym.mec.util.string.MessageFormatter;
 
 @Service
 public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
@@ -225,9 +226,9 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 		enterpriseUser.setName(member.getName());
 
 		if (StringUtils.equals(env, "prod")) {
-			enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_prod);
+			enterpriseUser.setNotifyUrl(MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "adapay"));
 		} else {
-			enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_test);
+			enterpriseUser.setNotifyUrl(MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_test, "adapay"));
 		}
 		enterpriseUser.setProvCode(member.getProvCode());
 		enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
@@ -247,9 +248,10 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 		merchantInfo.setAddress(member.getAddress());
 		merchantInfo.setBankAccountType(member.getBankAcctType());
 		merchantInfo.setBankCardNo(member.getCardNo());
+		merchantInfo.setBankCode(member.getBankCode());
 		merchantInfo.setCityCode(member.getAreaCode());
 		merchantInfo.setContactEmail(member.getContactEmail());
-		merchantInfo.setContactLicenceNo(member.getContactLicenseNo());
+		merchantInfo.setContactLicenceNo(member.getContactLicenceNo());
 		merchantInfo.setContactMobile(member.getContactMobile());
 		merchantInfo.setContactName(member.getContactName());
 		merchantInfo.setDistrictCode(member.getDistrictCode());
@@ -266,11 +268,11 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 		merchantInfo.setProvinceCode(member.getProvCode());
 		merchantInfo.setSettlementDirection("BANKCARD");
 
-		String notifyURL = AdapayNotifyConstants.corp_member_notify_url_test;
+		String notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_test, "adapay");
 		if (StringUtils.equals(env, "prod")) {
-			notifyURL = AdapayNotifyConstants.corp_member_notify_url_prod;
+			notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "adapay");
 		}
 		
-		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig.getAppId(), merchantInfo, notifyURL);
+		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), merchantInfo, notifyURL);
 	}
 }

+ 33 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -159,13 +159,20 @@ public class PayServiceImpl implements PayService {
 			if (StringUtils.equals("1", isPlatformCollection) && !ignoreOrganList.contains(organId)) {
 	        	
 	        	//String merNo = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
-				String merNo = "H004233";
+				//乐小雅收款
+				Integer routeOrganId = 123;
+				
+				HfMember receiverMember = hfMemberDao.getByOrganId(routeOrganId, paymentChannelStr);
+				
+				if(receiverMember == null) {
+	        		throw new BizException("分部[{}]收款账户查询失败", routeOrganId);
+				}
+				
+				String merNo = receiverMember.getMemberId();
 	        	if(StringUtils.isBlank(merNo)){
 	        		throw new BizException("平台收款账户查询失败");
 	        	}
 	        	
-	        	Integer routeOrganId = 123;
-	        	
 	        	StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
 	            studentPaymentRouteOrder.setOrderNo(orderNo);
 	            studentPaymentRouteOrder.setRouteOrganId(routeOrganId);
@@ -988,9 +995,19 @@ public class PayServiceImpl implements PayService {
             routeScaleDto1.setBalance(totalBalanceAmount.multiply(musicGroupCourseTotalAmount).divide(totalBalanceAmount.add(totalCashAmount), 2, BigDecimal.ROUND_DOWN));
             routeScaleDto1.setSaleAmount(BigDecimal.ZERO);
             routeScaleDto1.setServiceAmount(routeScaleDto1.getAmount());
-            routeScaleDto1.setOrganId(50);
+            
+
+			Integer courseOrganId = 50;
+			
+			HfMember receiverMember = hfMemberDao.getByOrganId(courseOrganId, paymentChannel.getCode());
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", courseOrganId);
+			}
+			
+            routeScaleDto1.setOrganId(courseOrganId);
             routeScaleDto1.setFeeType(FeeTypeEnum.SERVICE);
-            routeScaleDto1.setMerNo("H004215");
+            routeScaleDto1.setMerNo(receiverMember.getMemberId());
             routeScaleDto1.setPayType(PaymentChannelEnum.ADAPAY);
             newRouteScaleDtos.add(routeScaleDto1);
 			
@@ -999,9 +1016,18 @@ public class PayServiceImpl implements PayService {
             routeScaleDto2.setBalance(totalBalanceAmount.subtract(routeScaleDto1.getBalance()));
             routeScaleDto2.setSaleAmount(BigDecimal.ZERO);
             routeScaleDto2.setServiceAmount(routeScaleDto2.getAmount());
-            routeScaleDto2.setOrganId(52);
+            
+            courseOrganId = 52;
+			
+			receiverMember = hfMemberDao.getByOrganId(courseOrganId, paymentChannel.getCode());
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", courseOrganId);
+			}
+			
+            routeScaleDto2.setOrganId(courseOrganId);
             routeScaleDto2.setFeeType(FeeTypeEnum.SERVICE);
-            routeScaleDto2.setMerNo("H004219");
+            routeScaleDto2.setMerNo(receiverMember.getMemberId());
             routeScaleDto2.setPayType(PaymentChannelEnum.ADAPAY);
             newRouteScaleDtos.add(routeScaleDto2);
 			

+ 8 - 7
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayMerchantService.java

@@ -35,8 +35,9 @@ public class YeepayMerchantService {
         return response;
     }
 	
-	public RegisterSaasMerchantV2Response registerSaasMerchantV2(String parentMerchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
+	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);
@@ -44,7 +45,7 @@ public class YeepayMerchantService {
         merchantInfo.setRequestNo(request.getRequestNo());
         
         Map<String,String> merchantSubjectInfoMap = new HashMap<String, String>();
-        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceNo());
+        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
         merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
         merchantSubjectInfoMap.put("signType", "ENTERPRISE");
         merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
@@ -55,7 +56,7 @@ public class YeepayMerchantService {
         Map<String,String> merchantCorporationInfoMap = new HashMap<String, String>();
         merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
         merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
-        merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLicenceNo());
+        merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
         merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
         merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
         request.setMerchantCorporationInfo(JSONObject.toJSONString(merchantCorporationInfoMap));
@@ -86,8 +87,8 @@ public class YeepayMerchantService {
         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\"}");
+        //request.setFunctionService("[\"SHARE\"]");
+        //request.setFunctionServiceQualificationInfo("{\"shareScene\":\"FZ_ALL001\"}");
         RegisterSaasMerchantV2Response response = api.registerSaasMerchantV2(request);
         LOGGER.info("result:{}", response.getResult());
 
@@ -101,7 +102,7 @@ public class YeepayMerchantService {
         request.setNotifyUrl(notifyURL);
         
         Map<String,String> merchantSubjectInfoMap = new HashMap<String, String>();
-        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceNo());
+        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
         merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
         merchantSubjectInfoMap.put("signType", "ENTERPRISE");
         merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
@@ -112,7 +113,7 @@ public class YeepayMerchantService {
         Map<String,String> merchantCorporationInfoMap = new HashMap<String, String>();
         merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
         merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
-        merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLicenceNo());
+        merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
         merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
         merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
         request.setMerchantCorporationInfo(JSONObject.toJSONString(merchantCorporationInfoMap));

+ 2 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayUploadService.java

@@ -20,8 +20,9 @@ public class YeepayUploadService {
     // 该Client线程安全,请使用单例模式,多次请求共用
     private static final SysClient api = SysClientBuilder.builder().build();
 
-	public String upload(File file) {
+	public String upload(String appKey, File file) {
 		MerchantQualUploadRequest request = new MerchantQualUploadRequest();
+		request.getRequestConfig().setAppKey(appKey);
         request.setMerQual(file);
         try {
             MerchantQualUploadResponse response = api.merchantQualUpload(request);

+ 65 - 4
mec-web/src/main/java/com/ym/mec/web/controller/payment/YeepayController.java

@@ -2,7 +2,12 @@ package com.ym.mec.web.controller.payment;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
@@ -15,15 +20,25 @@ 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.ym.mec.biz.dal.dto.YeepayMember;
 import com.ym.mec.biz.dal.entity.HfMember;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
 import com.ym.mec.biz.service.HfMemberService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.controller.BaseController;
 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.yeepay.YeepayMerchantService;
 import com.ym.mec.thirdparty.yeepay.YeepayUploadService;
 import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
@@ -40,6 +55,9 @@ public class YeepayController extends BaseController {
     private HfMemberService hfMemberService;
     
     @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
     private YeepayUploadService yeepayUploadService;
     
     @Autowired
@@ -69,9 +87,11 @@ public class YeepayController extends BaseController {
     @PostMapping(value = "addSubMerchant")
     @PreAuthorize("@pcs.hasPermissions('yeepay/addSubMerchant')")
     public HttpResponseResult<Boolean> addSubMerchant(YeepayMember member) throws Exception {
-        if (!profiles.equals("prod")) {
-            return failed("仅生产环境可用");
-        }
+		/*
+		 * if (!profiles.equals("prod")) { return failed("仅生产环境可用"); }
+		 */
+        
+        member.setPayerName(PaymentChannelEnum.YEEPAY.getCode());
         
         return succeed(hfMemberService.createMember(member, null));
     }
@@ -84,6 +104,42 @@ 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;
+		try {
+			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);
+			
+			System.out.println("开户回调信息:" + JSON.toJSONString(callback));
+			
+			return "SUCCESS";
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+    }
+
     @ApiOperation("修改企业用户(状态是failed才能修改)")
     @PostMapping(value = "upload")
     @PreAuthorize("@pcs.hasPermissions('yeepay/upload')")
@@ -99,8 +155,13 @@ public class YeepayController extends BaseController {
             }
             FileOutputStream fos = new FileOutputStream(file);
             IOUtils.copy(inputStream, fos);
+            
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+            if(hfMerchantConfig == null){
+            	throw new BizException("请配置机构的汇付商户信息");
+            }
         	
-            return succeed(yeepayUploadService.upload(file));
+            return succeed(yeepayUploadService.upload(hfMerchantConfig.getAppId(), file));
         } catch (Exception e) {
             return failed(e.getMessage());
         } finally {