后台提交到三方更改资料

This commit is contained in:
liuyingfang 2023-10-16 09:19:21 +08:00
parent 5ebb6f1472
commit 3f0179a95f
17 changed files with 576 additions and 140 deletions

View File

@ -18,6 +18,7 @@ import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -9,6 +9,7 @@ import com.chaozhanggui.common.system.config.RespBody;
import com.chaozhanggui.dao.system.dao.TbPlussBankCodeSxfMapper; import com.chaozhanggui.dao.system.dao.TbPlussBankCodeSxfMapper;
import com.chaozhanggui.dao.system.entity.*; import com.chaozhanggui.dao.system.entity.*;
import com.chaozhanggui.dao.system.entity.DTO.AccountDTO; import com.chaozhanggui.dao.system.entity.DTO.AccountDTO;
import com.chaozhanggui.merchant.service.sxf.SxfMerchantAuditService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -34,6 +35,8 @@ public class MerchantInfoController {
private SxfMccInfoService sxfMccInfoService; private SxfMccInfoService sxfMccInfoService;
@Resource @Resource
private AccountService accountService; private AccountService accountService;
@Resource
private SxfMerchantAuditService sxfMerchantAuditService;
/** /**
@ -60,6 +63,16 @@ public class MerchantInfoController {
return merchantInfoService.updatePromoterInformation(userApp); return merchantInfoService.updatePromoterInformation(userApp);
} }
/**
* 更改实名认证信息随行付测试
* @return
*/
@PostMapping("/updateSxf")
public RespBody updateSxf(){
// sxfMerchantAuditService.updateMerchantIdCard("399230310653864",);
return new RespBody("000000");
}
/** /**
* 修改商户相关信息 * 修改商户相关信息
* @param merchantBaseInfo * @param merchantBaseInfo

View File

@ -11,6 +11,7 @@ import com.chaozhanggui.dao.system.entity.*;
import com.chaozhanggui.dao.system.entity.DTO.AccountDTO; import com.chaozhanggui.dao.system.entity.DTO.AccountDTO;
import com.chaozhanggui.dao.system.entity.VO.AccountVO; import com.chaozhanggui.dao.system.entity.VO.AccountVO;
import com.chaozhanggui.dao.system.entity.VO.MerchantBaseVO; import com.chaozhanggui.dao.system.entity.VO.MerchantBaseVO;
import com.chaozhanggui.merchant.service.MerchantService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -55,6 +56,8 @@ public class MerchantInfoService {
private TbPlussAreaCityMapper areaCityMapper; private TbPlussAreaCityMapper areaCityMapper;
@Resource @Resource
private TbPlussBankCodeSxfMapper bankCodeSxfMapper; private TbPlussBankCodeSxfMapper bankCodeSxfMapper;
@Resource
private MerchantService merchantService;
@ -177,7 +180,6 @@ public class MerchantInfoService {
} }
LambdaQueryWrapper<TbPlussBankCodeSxf> sxfQueryWrapper = new LambdaQueryWrapper<TbPlussBankCodeSxf>() LambdaQueryWrapper<TbPlussBankCodeSxf> sxfQueryWrapper = new LambdaQueryWrapper<TbPlussBankCodeSxf>()
.eq(StringUtils.isNotEmpty(userApp.getBankCard().getContactline()), TbPlussBankCodeSxf::getCnapsCode, userApp.getBankCard().getContactline()) .eq(StringUtils.isNotEmpty(userApp.getBankCard().getContactline()), TbPlussBankCodeSxf::getCnapsCode, userApp.getBankCard().getContactline())
.eq(StringUtils.isNotEmpty(userApp.getBankCard().getBranchname()), TbPlussBankCodeSxf::getCnapsName, userApp.getBankCard().getBranchname())
.last("limit 1"); .last("limit 1");
TbPlussBankCodeSxf bankCodeSxf = bankCodeSxfMapper.selectOne(sxfQueryWrapper); TbPlussBankCodeSxf bankCodeSxf = bankCodeSxfMapper.selectOne(sxfQueryWrapper);
if (bankCodeSxf == null) { if (bankCodeSxf == null) {
@ -210,8 +212,8 @@ public class MerchantInfoService {
appUser.setLoginname(userApp.getLoginname()); appUser.setLoginname(userApp.getLoginname());
appUser.setUsername(userApp.getUsername()); appUser.setUsername(userApp.getUsername());
appUser.setUserid(userApp.getUserid()); appUser.setUserid(userApp.getUserid());
// userAppMapper.updateByPrimaryKey(appUser); userAppMapper.updateByPrimaryKey(appUser);
// userInfoMapper.updateByPrimaryKey(userInfo); userInfoMapper.updateByPrimaryKey(userInfo);
return new RespBody("000000"); return new RespBody("000000");
} }
@ -302,14 +304,10 @@ public class MerchantInfoService {
bankCardMapper.updateByPrimaryKeySelective(account.getBankCard()); bankCardMapper.updateByPrimaryKeySelective(account.getBankCard());
idCardMapper.updateByPrimaryKeySelective(account.getIdcard()); idCardMapper.updateByPrimaryKeySelective(account.getIdcard());
// merchantService.updateMerchantBase(account.);
return new RespBody("000000"); return new RespBody("000000");
} }
// public RespBody channelAuditInfo(Integer userId){
// TbPlussMerchantBaseInfo merchantBaseInfo = merchantBaseInfoMapper.selectByUserId(String.valueOf(userId));
// if(merchantBaseInfo != null) {
// List<TbPlussMerchantChannelStatus> merchantCodeList = merchantChannelStatusMapper.getByMerchantCodeList(merchantBaseInfo.getMerchantcode());
// merchantCodeList
// }
// }
} }

View File

@ -8,7 +8,7 @@ server:
# 指定日志级别 把springboot的所有日志修改成为debug # 指定日志级别 把springboot的所有日志修改成为debug
logging: logging:
level: level:
root: info root: debug
mybatis: mybatis:
configuration: configuration:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
@ -33,3 +33,15 @@ alipay-config:
alipayRootCertPath: /home/www/service/key/alipayRootCert.crt alipayRootCertPath: /home/www/service/key/alipayRootCert.crt
parameter:
ZY_ALI_APP_ID: 2021003175619219
domain: https://ky.sxczgkj.cn
#随行付相关
alipayChannel: 2088441721243954
sxf:
domain: https://openapi.tianquetech.com
orgId: "02668880"
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjo1+KBcvwDSIo+nMYLeOJ19Ju4ii0xH66ZxFd869EWFWk/EJa3xIA2+4qGf/Ic7m7zi/NHuCnfUtUDmUdP0JfaZiYwn+1Ek7tYAOc1+1GxhzcexSJLyJlR2JLMfEM+rZooW4Ei7q3a8jdTWUNoak/bVPXnLEVLrbIguXABERQ0Ze0X9Fs0y/zkQFg8UjxUN88g2CRfMC6LldHm7UBo+d+WlpOYH7u0OTzoLLiP/04N1cfTgjjtqTBI7qkOGxYs6aBZHG1DJ6WdP+5w+ho91sBTVajsCxAaMoExWQM2ipf/1qGdsWmkZScPflBqg7m0olOD87ymAVP/3Tcbvi34bDfwIDAQAB

View File

@ -15,28 +15,49 @@ import javax.annotation.PostConstruct;
* @author lyf * @author lyf
*/ */
@Configuration @Configuration
@PropertySource("classpath:application-common.yml")
@Component
public class ParameterConfig { public class ParameterConfig {
/** /**
* 阿里自用型应用appid * 阿里自用型应用appid
*/ */
@Value("${parameter.ZY_ALI_APP_ID}") @Value("${parameter.ZY_ALI_APP_ID}")
public String ZY_ALI_APP_ID; public String ZY_ALI_APP_ID;
/** /**
* 正式服务器域名 * 正式服务器域名
*/ */
@Value("${parameter.domain}") @Value("${parameter.domain}")
public String domain; public String domain;
/** /**
* 支付宝通道ID * 支付宝通道ID
*/ */
@Value("${parameter.alipayChannel}") @Value("${parameter.alipayChannel}")
public String alipayChannel; public String alipayChannel;
@PostConstruct
public void init() {
ParametersUtil.domain = domain;
ParametersUtil.alipayChannel = alipayChannel;
public String getZY_ALI_APP_ID() {
return ZY_ALI_APP_ID;
}
public void setZY_ALI_APP_ID(String ZY_ALI_APP_ID) {
this.ZY_ALI_APP_ID = ZY_ALI_APP_ID;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getAlipayChannel() {
return alipayChannel;
}
public void setAlipayChannel(String alipayChannel) {
this.alipayChannel = alipayChannel;
} }
} }

View File

@ -1,109 +1,114 @@
package com.chaozhanggui.common.system.config.channel; package com.chaozhanggui.common.system.config.channel;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/** /**
* @author lyf * @author lyf
*/ */
@Component
public class SxfConfig { public class SxfConfig {
/** /**
* 微信实名认证接口前缀 * 微信实名认证接口前缀
*/ */
private static final String SXF_CERT_DOMAIN = "https://openapi.suixingpay.com"; private String SXF_CERT_DOMAIN = "https://openapi.suixingpay.com";
/** /**
* 微信实名认证接口 * 微信实名认证接口
*/ */
public static final String SXF_WX_CERT = SXF_CERT_DOMAIN + "/merchant/realName/commitApply"; public String SXF_WX_CERT = SXF_CERT_DOMAIN + "/merchant/realName/commitApply";
/** /**
* 查询微信认证授权状态 * 查询微信认证授权状态
*/ */
public static final String SXF_WX_CERT_STATUS = SXF_CERT_DOMAIN + "/merchant/realName/queryGrantStatus"; public String SXF_WX_CERT_STATUS = SXF_CERT_DOMAIN + "/merchant/realName/queryGrantStatus";
/** /**
* 微信实名认证申请结果查询接口 * 微信实名认证申请结果查询接口
*/ */
public static final String SXF_WX_CERT_RESULT = SXF_CERT_DOMAIN + "/merchant/realName/queryApplyInfo"; public String SXF_WX_CERT_RESULT = SXF_CERT_DOMAIN + "/merchant/realName/queryApplyInfo";
/** /**
* 微信实名认证申请撤销接口 * 微信实名认证申请撤销接口
*/ */
public static final String SXF_WX_CERT_CANCEL = SXF_CERT_DOMAIN + "/merchant/realName/backApplyBill"; public String SXF_WX_CERT_CANCEL = SXF_CERT_DOMAIN + "/merchant/realName/backApplyBill";
public static String PRIVATE_KEY = public String PRIVATE_KEY =
"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMRFhTpr+JWtfhHZ80UJcnDCMeydtcF38S5s+WdifTYNMequFN6uRYoSFJqzQrR0ls7/ZAjUFP/dZL0QJAsWlnRLLSvPsgUU/DzAF7myl6/swuK4eo9frwAYP4ItQcP+DsHBUFnqUbWUON8C3M5ggY92qKfKV1k59tVnFVjoPhbbAgMBAAECgYAzL/5jEi2uu6SZe0Iayy/xgHQMxcTVRDa+aOVStTj6k85k6im/OawhKj39aqsG7TE3oxuvwcAISvEu7bq4uZdbICPdeKLcfNpK4pIfVfokPROjlKSyDgm37gqM7F+T0ZoARVqcd7Mgj09UKKpq7Pi0a/FusEa5CdG2LrUTjZuHIQJBAOFzolrGsPsWaVMpoYGeRY2UrT0PjfXJ1E7nkHqLXCCgfrur374YEEWeLtjHCI6zaXgv/3Coj3USAhKMw4lDAYcCQQDe3bL3szwkGdUmZk61ebY7HanilKnIYNuhC9ALUEElDp2eA1ld5cQvRb4BAeNsvabptt2lRPcscFu9zvH0DaUNAkEAww8HAz8xVKyZSAiW4cyMJOjj0hapHmUXOYWELWJxvRDfVYRpOtEbEwC/S3M45i44LHJqsZBFPmbsQBxl+VZt9QJBAL2tD+EywU+0UK2SyxA2mzqq32iAwBNTI/lnlVPbpOYGD21pSkjZAWR+RdyTn9xveLxWr0M2c+t1YQ8lLtVYO40CQQC2pVlYu5BIvXClLj6pHxwrK9G3JgwaanbEPFX0PjIJmU94QSLUd4OtDhvbXq43E5dlyvz5ybYvd8pygmjV9oM5"; "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMRFhTpr+JWtfhHZ80UJcnDCMeydtcF38S5s+WdifTYNMequFN6uRYoSFJqzQrR0ls7/ZAjUFP/dZL0QJAsWlnRLLSvPsgUU/DzAF7myl6/swuK4eo9frwAYP4ItQcP+DsHBUFnqUbWUON8C3M5ggY92qKfKV1k59tVnFVjoPhbbAgMBAAECgYAzL/5jEi2uu6SZe0Iayy/xgHQMxcTVRDa+aOVStTj6k85k6im/OawhKj39aqsG7TE3oxuvwcAISvEu7bq4uZdbICPdeKLcfNpK4pIfVfokPROjlKSyDgm37gqM7F+T0ZoARVqcd7Mgj09UKKpq7Pi0a/FusEa5CdG2LrUTjZuHIQJBAOFzolrGsPsWaVMpoYGeRY2UrT0PjfXJ1E7nkHqLXCCgfrur374YEEWeLtjHCI6zaXgv/3Coj3USAhKMw4lDAYcCQQDe3bL3szwkGdUmZk61ebY7HanilKnIYNuhC9ALUEElDp2eA1ld5cQvRb4BAeNsvabptt2lRPcscFu9zvH0DaUNAkEAww8HAz8xVKyZSAiW4cyMJOjj0hapHmUXOYWELWJxvRDfVYRpOtEbEwC/S3M45i44LHJqsZBFPmbsQBxl+VZt9QJBAL2tD+EywU+0UK2SyxA2mzqq32iAwBNTI/lnlVPbpOYGD21pSkjZAWR+RdyTn9xveLxWr0M2c+t1YQ8lLtVYO40CQQC2pVlYu5BIvXClLj6pHxwrK9G3JgwaanbEPFX0PjIJmU94QSLUd4OtDhvbXq43E5dlyvz5ybYvd8pygmjV9oM5";
//"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMRFhTpr+JWtfhHZ80UJcnDCMeydtcF38S5s+WdifTYNMequFN6uRYoSFJqzQrR0ls7/ZAjUFP/dZL0QJAsWlnRLLSvPsgUU/DzAF7myl6/swuK4eo9frwAYP4ItQcP+DsHBUFnqUbWUON8C3M5ggY92qKfKV1k59tVnFVjoPhbbAgMBAAECgYAzL/5jEi2uu6SZe0Iayy/xgHQMxcTVRDa+aOVStTj6k85k6im/OawhKj39aqsG7TE3oxuvwcAISvEu7bq4uZdbICPdeKLcfNpK4pIfVfokPROjlKSyDgm37gqM7F+T0ZoARVqcd7Mgj09UKKpq7Pi0a/FusEa5CdG2LrUTjZuHIQJBAOFzolrGsPsWaVMpoYGeRY2UrT0PjfXJ1E7nkHqLXCCgfrur374YEEWeLtjHCI6zaXgv/3Coj3USAhKMw4lDAYcCQQDe3bL3szwkGdUmZk61ebY7HanilKnIYNuhC9ALUEElDp2eA1ld5cQvRb4BAeNsvabptt2lRPcscFu9zvH0DaUNAkEAww8HAz8xVKyZSAiW4cyMJOjj0hapHmUXOYWELWJxvRDfVYRpOtEbEwC/S3M45i44LHJqsZBFPmbsQBxl+VZt9QJBAL2tD+EywU+0UK2SyxA2mzqq32iAwBNTI/lnlVPbpOYGD21pSkjZAWR+RdyTn9xveLxWr0M2c+t1YQ8lLtVYO40CQQC2pVlYu5BIvXClLj6pHxwrK9G3JgwaanbEPFX0PjIJmU94QSLUd4OtDhvbXq43E5dlyvz5ybYvd8pygmjV9oM5"; //"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMRFhTpr+JWtfhHZ80UJcnDCMeydtcF38S5s+WdifTYNMequFN6uRYoSFJqzQrR0ls7/ZAjUFP/dZL0QJAsWlnRLLSvPsgUU/DzAF7myl6/swuK4eo9frwAYP4ItQcP+DsHBUFnqUbWUON8C3M5ggY92qKfKV1k59tVnFVjoPhbbAgMBAAECgYAzL/5jEi2uu6SZe0Iayy/xgHQMxcTVRDa+aOVStTj6k85k6im/OawhKj39aqsG7TE3oxuvwcAISvEu7bq4uZdbICPdeKLcfNpK4pIfVfokPROjlKSyDgm37gqM7F+T0ZoARVqcd7Mgj09UKKpq7Pi0a/FusEa5CdG2LrUTjZuHIQJBAOFzolrGsPsWaVMpoYGeRY2UrT0PjfXJ1E7nkHqLXCCgfrur374YEEWeLtjHCI6zaXgv/3Coj3USAhKMw4lDAYcCQQDe3bL3szwkGdUmZk61ebY7HanilKnIYNuhC9ALUEElDp2eA1ld5cQvRb4BAeNsvabptt2lRPcscFu9zvH0DaUNAkEAww8HAz8xVKyZSAiW4cyMJOjj0hapHmUXOYWELWJxvRDfVYRpOtEbEwC/S3M45i44LHJqsZBFPmbsQBxl+VZt9QJBAL2tD+EywU+0UK2SyxA2mzqq32iAwBNTI/lnlVPbpOYGD21pSkjZAWR+RdyTn9xveLxWr0M2c+t1YQ8lLtVYO40CQQC2pVlYu5BIvXClLj6pHxwrK9G3JgwaanbEPFX0PjIJmU94QSLUd4OtDhvbXq43E5dlyvz5ybYvd8pygmjV9oM5";
public static String PUBLIC_KEY; public String PUBLIC_KEY;
/** /**
* sxf渠道号 * sxf渠道号
*/ */
public static String SXF_SUB_CHANNEL_NO = "398434152"; public String SXF_SUB_CHANNEL_NO = "398434152";
/** /**
* sxf环境机构号 * sxf环境机构号
*/ */
public static String ORG_ID;
public String ORG_ID;
/** /**
* 商户号 * 商户号
*/ */
public static String MERCHANT_NO = "399200821899489"; public String MERCHANT_NO = "399200821899489";
/** /**
* 成功响应码 * 成功响应码
*/ */
public static final String SXF_SUCCESS_CODE = "0000"; public String SXF_SUCCESS_CODE = "0000";
/** 功能未开通 */ /** 功能未开通 */
public static final String SXF_NO_PERMIT = "0006"; public String SXF_NO_PERMIT = "0006";
public static final String SXF_REFUND_SUCCESS_CODE = "2002"; public String SXF_REFUND_SUCCESS_CODE = "2002";
/** /**
* 退款成功状态 * 退款成功状态
*/ */
public static final String SXF_REFUND_SUCCESS_STATUS_CODE = "REFUNDSUC"; public String SXF_REFUND_SUCCESS_STATUS_CODE = "REFUNDSUC";
/********************************************进件相关***************************************************/ /********************************************进件相关***************************************************/
/** /**
* 退款成功失败状态 * 退款成功失败状态
*/ */
public static final String SXF_REFUND_FAIL_STATUS_CODE = "REFUNDFAIL"; public String SXF_REFUND_FAIL_STATUS_CODE = "REFUNDFAIL";
/** /**
* 退款成功中状态 * 退款成功中状态
*/ */
public static final String SXF_REFUND_ING_STATUS_CODE = "REFUNDING"; public String SXF_REFUND_ING_STATUS_CODE = "REFUNDING";
/** /**
* 失败响应码 * 失败响应码
*/ */
public static final String SXF_FAIL_CODE = "0001"; public String SXF_FAIL_CODE = "0001";
/** /**
* sxf正式domain * sxf正式domain
*/ */
private static String sxfDomain; public String sxfDomain;
/** /**
* 进件相关 * 进件相关
* 正式环境图片上传 * 正式环境图片上传
*/ */
public static String SXF_MERCHANT_INCOME_PHOTO_UPLOAD = sxfDomain + "/merchant/uploadPicture"; public String SXF_MERCHANT_INCOME_PHOTO_UPLOAD = sxfDomain + "/merchant/uploadPicture";
/** /**
* 进件相关 * 进件相关
* 正式环境商户入驻 * 正式环境商户入驻
*/ */
public static String SXF_MERCHANT_INCOME = sxfDomain + "/merchant/income"; public String SXF_MERCHANT_INCOME = sxfDomain + "/merchant/income";
/** /**
* 进件信息 * 进件信息
* 正式环境商户入驻信息修改 * 正式环境商户入驻信息修改
* 备注商户进件失败的信息修改 * 备注商户进件失败的信息修改
*/ */
public static String SXF_UPADTE_MERCHANT_RZ = sxfDomain + "/merchant/updateMerchantInfo"; public String SXF_UPADTE_MERCHANT_RZ = sxfDomain + "/merchant/updateMerchantInfo";
/** /**
* 该接口通过申请单号查询 * 该接口通过申请单号查询
* 进件信息 * 进件信息
* 正式环境商户入驻接口查询 * 正式环境商户入驻接口查询
*/ */
public static String SXF_QUERY_MERCHANT_INFO = sxfDomain + "/merchant/queryMerchantInfo"; public String SXF_QUERY_MERCHANT_INFO = sxfDomain + "/merchant/queryMerchantInfo";
/** /**
* 该接口通过商编查询商户信息 * 该接口通过商编查询商户信息
*/ */
public static String SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery"; public String SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery";
/********************************************支付相关***************************************************/ /********************************************支付相关***************************************************/
/** /**
@ -111,74 +116,74 @@ public class SxfConfig {
* 正式环境商户进件信息修改 * 正式环境商户进件信息修改
* 备注商户进件成功的信息修改 * 备注商户进件成功的信息修改
*/ */
public static String SXF_UPDATE_MERCHANT_INFO = sxfDomain + "/merchant/editMerchantInfo"; public String SXF_UPDATE_MERCHANT_INFO = sxfDomain + "/merchant/editMerchantInfo";
/** /**
* 进件信息 * 进件信息
* 正式环境商户信息修改审核结果查询 * 正式环境商户信息修改审核结果查询
*/ */
public static String SXF_UPDATE_MERCHANT_INFO_RESULT = sxfDomain + "/merchant/queryModifyResult"; public String SXF_UPDATE_MERCHANT_INFO_RESULT = sxfDomain + "/merchant/queryModifyResult";
/** /**
* 商户设置 * 商户设置
* 正式环境修改商户费率信息 次日0时 生效 * 正式环境修改商户费率信息 次日0时 生效
*/ */
public static String SXF_UPDATE_MERCHANT_RATE = sxfDomain + "/merchant/merchantSetup"; public String SXF_UPDATE_MERCHANT_RATE = sxfDomain + "/merchant/merchantSetup";
/** /**
* 商户查询 * 商户查询
* 正式环境商户详情查询 * 正式环境商户详情查询
*/ */
public static String SXF_QUERY_MERCHANT_DETAIL = sxfDomain + "/merchant/merchantInfoQuery"; public String SXF_QUERY_MERCHANT_DETAIL = sxfDomain + "/merchant/merchantInfoQuery";
/** /**
* 主扫付款 * 主扫付款
* 正式环境商户主扫接口 * 正式环境商户主扫接口
*/ */
public static String SXF_REVERSE_SCAN_PAY = sxfDomain + "/order/reverseScan"; public String SXF_REVERSE_SCAN_PAY = sxfDomain + "/order/reverseScan";
/** /**
* 商户被扫付款 * 商户被扫付款
* 正式环境商户被扫接口 * 正式环境商户被扫接口
*/ */
public static String SXF_JSAPI_SCAN_PAY = sxfDomain + "/order/jsapiScan"; public String SXF_JSAPI_SCAN_PAY = sxfDomain + "/order/jsapiScan";
/** /**
* 退款 * 退款
* 正式环境退款接口地址 * 正式环境退款接口地址
*/ */
public static String SXF_REFUND_PAY = sxfDomain + "/order/refund"; public String SXF_REFUND_PAY = sxfDomain + "/order/refund";
/** /**
* 交易查询 * 交易查询
* 正式环境交易查询 * 正式环境交易查询
*/ */
public static String SXF_TRADE_QUERY_PAY = sxfDomain + "/query/tradeQuery"; public String SXF_TRADE_QUERY_PAY = sxfDomain + "/query/tradeQuery";
/** /**
* 订单关闭 * 订单关闭
* 订单关闭接口 * 订单关闭接口
*/ */
public static String SXF_CLOSE_ORDER = sxfDomain + "/query/close"; public String SXF_CLOSE_ORDER = sxfDomain + "/query/close";
/** /**
* 订单撤销 * 订单撤销
* 订单撤销接口 * 订单撤销接口
*/ */
public static String SXF_CANCEL_ORDER = sxfDomain + "/query/cancel"; public String SXF_CANCEL_ORDER = sxfDomain + "/query/cancel";
/** /**
* sxf 辅助接口 获取wxopenId * sxf 辅助接口 获取wxopenId
*/ */
public static String SXF_GET_WX_OPENID = sxfDomain + "/query/getSubOPenid"; public String SXF_GET_WX_OPENID = sxfDomain + "/query/getSubOPenid";
/** /**
* sxf 辅助接口 获取银联用户标识 * sxf 辅助接口 获取银联用户标识
*/ */
public static String SXF_GET_UNION_USERID = sxfDomain + "/query/getUnionInfo"; public String SXF_GET_UNION_USERID = sxfDomain + "/query/getUnionInfo";
/** /**
* 转账接口地址 * 转账接口地址
*/ */
public static String SXF_ORG_TRANS_FER = sxfDomain + "/capital/fundManage/orgTransfer"; public String SXF_ORG_TRANS_FER = sxfDomain + "/capital/fundManage/orgTransfer";
/** /**
* 商户生成带金额的付款码用户扫码付款 * 商户生成带金额的付款码用户扫码付款
* 正式环境商户被扫接口 * 正式环境商户被扫接口
*/ */
public static String SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan"; public String SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan";
public static JSONObject ok() { public JSONObject ok() {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("code", "success"); jsonObject.put("code", "success");
jsonObject.put("msg", "成功"); jsonObject.put("msg", "成功");
@ -191,7 +196,11 @@ public class SxfConfig {
* @param publicKey 公钥 * @param publicKey 公钥
* @param orgId 机构id * @param orgId 机构id
*/ */
public static void init(String domain, String publicKey, String orgId) {
public SxfConfig(@Value("${sxf.domain}") String domain, @Value("${sxf.publicKey}") String publicKey,
@Value("${sxf.orgId}") String orgId
){
sxfDomain = domain; sxfDomain = domain;
PUBLIC_KEY = publicKey; PUBLIC_KEY = publicKey;
ORG_ID = orgId; ORG_ID = orgId;
@ -216,4 +225,7 @@ public class SxfConfig {
SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery"; SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery";
SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan"; SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan";
} }
public void init(String domain, String publicKey, String orgId) {
}
} }

View File

@ -20,6 +20,7 @@ public interface TbPlussBankCodeSxfMapper extends BaseMapper<TbPlussBankCodeSxf>
int insertSelective(TbPlussBankCodeSxf record); int insertSelective(TbPlussBankCodeSxf record);
TbPlussBankCodeSxf selectByPrimaryKey(Integer id); TbPlussBankCodeSxf selectByPrimaryKey(Integer id);
TbPlussBankCodeSxf selectByCnapsCode(@Param("cnapsCode")String cnapsCode);
List<TbPlussSxfMccInfo> pageData(@Param("keyWord") String keyWord); List<TbPlussSxfMccInfo> pageData(@Param("keyWord") String keyWord);

View File

@ -39,6 +39,8 @@ public interface TbPlussMerchantChannelStatusMapper {
TbPlussMerchantChannelStatus getByMerchantCode(@Param("merchantCode") String merchantCode,@Param("channel") String channel ); TbPlussMerchantChannelStatus getByMerchantCode(@Param("merchantCode") String merchantCode,@Param("channel") String channel );
List<TbPlussMerchantChannelStatus> getByMerchantCodes(@Param("merchantCode") String merchantCode); List<TbPlussMerchantChannelStatus> getByMerchantCodes(@Param("merchantCode") String merchantCode);
List<TbPlussMerchantChannelStatus> getByMerchantCodesAudit(@Param("merchantCode") String merchantCode);
TbPlussMerchantChannelStatus getByIdLock(@Param("id") Integer id); TbPlussMerchantChannelStatus getByIdLock(@Param("id") Integer id);
List<TbPlussMerchantChannelStatus> getByMerchantCodeList(@Param("merchantCode") String merchantCode); List<TbPlussMerchantChannelStatus> getByMerchantCodeList(@Param("merchantCode") String merchantCode);

View File

@ -35,7 +35,13 @@
</if> </if>
</where> </where>
</select> </select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> <select id="selectByCnapsCode" resultType="com.chaozhanggui.dao.system.entity.TbPlussBankCodeSxf">
select
<include refid="Base_Column_List" />
from tb_pluss_bank_code_sxf
where cnaps_code = #{cnapsCode}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from tb_pluss_bank_code_sxf delete from tb_pluss_bank_code_sxf
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</delete> </delete>

View File

@ -263,15 +263,6 @@
<if test="authorizationstatus != null"> <if test="authorizationstatus != null">
authorizationStatus = #{authorizationstatus,jdbcType=VARCHAR}, authorizationStatus = #{authorizationstatus,jdbcType=VARCHAR},
</if> </if>
<if test="mercname != null">
mercName = #{mercname,jdbcType=VARCHAR},
</if>
<if test="virchannelflag != null">
virChannelFlag = #{virchannelflag,jdbcType=VARCHAR},
</if>
<if test="virstatusflag != null">
virStatusFlag = #{virstatusflag,jdbcType=VARCHAR},
</if>
<if test="srcmerchantno != null"> <if test="srcmerchantno != null">
srcMerchantNo = #{srcmerchantno,jdbcType=VARCHAR}, srcMerchantNo = #{srcmerchantno,jdbcType=VARCHAR},
</if> </if>
@ -433,8 +424,8 @@
<select id="getIncomingInfoAnother" <select id="getIncomingInfoAnother"
resultType="com.chaozhanggui.dao.system.entity.TbPlussMerchantChannelStatus"> resultType="com.chaozhanggui.dao.system.entity.TbPlussMerchantChannelStatus">
SELECT * SELECT *
FROM merchant_channel_status FROM tb_pluss_merchant_channel_status
WHERE merchant_code = #{merchantCode} WHERE merchantCode = #{merchantCode}
ORDER BY valid DESC, id ASC ORDER BY valid DESC, id ASC
LIMIT 1; LIMIT 1;
</select> </select>
@ -476,4 +467,10 @@
AND thirdStatus = '-100' AND thirdStatus = '-100'
limit 1 limit 1
</select> </select>
<select id="getByMerchantCodesAudit"
resultType="com.chaozhanggui.dao.system.entity.TbPlussMerchantChannelStatus">
SELECT * FROM tb_pluss_merchant_channel_status
WHERE merchantCode=#{merchantCode}
AND status In (3,6)
</select>
</mapper> </mapper>

View File

@ -37,8 +37,8 @@
<select id="getListOfMerch" resultType="com.chaozhanggui.dao.system.entity.TbPlussMerchantImage"> <select id="getListOfMerch" resultType="com.chaozhanggui.dao.system.entity.TbPlussMerchantImage">
SELECT * SELECT *
FROM tb_pluss_merchant_image FROM tb_pluss_merchant_image
WHERE merchant_code = #{merchantCode} WHERE merchantCode = #{merchantCode}
AND photo_type NOT IN AND photoType NOT IN
('96', '97', '05','07', '98', '01','02'); ('96', '97', '05','07', '98', '01','02');
</select> </select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">

View File

@ -345,6 +345,7 @@
p.is_extend, p.is_extend,
a.inviteNum, a.inviteNum,
a.`status`, a.`status`,
a.createDt,
FORMAT( IFNULL( k.sumConsumeFee, 0 ), 2 ) AS sumConsumeFee, FORMAT( IFNULL( k.sumConsumeFee, 0 ), 2 ) AS sumConsumeFee,
FORMAT( IFNULL( k.yestedayConsumeFee, 0 ), 2 ) AS yestedayConsumeFee FORMAT( IFNULL( k.yestedayConsumeFee, 0 ), 2 ) AS yestedayConsumeFee
FROM FROM

View File

@ -48,6 +48,10 @@
<version>0.4.14</version> <version>0.4.14</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -12,10 +12,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collections; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service @Service
public class MerchantService { public class MerchantService {
@ -93,7 +90,7 @@ public class MerchantService {
switch (channelId){ switch (channelId){
case "1": case "1":
sxfMerchantAuditService.merchantAudit(userId, false); sxfMerchantAuditService.merchantAudit(userId, channelStatus);
break; break;
case "2": case "2":
break; break;
@ -177,4 +174,50 @@ public class MerchantService {
"6 ".equals(mcs.getStatus()) || "6 ".equals(mcs.getStatus()) ||
"4".equals(mcs.getStatus()); "4".equals(mcs.getStatus());
} }
/**
* 通用修改进件基本资料相关
* @param userId
*/
public void updateMerchantBase(Integer userId, TbPlussBankCard bankCard,TbPlussIdCard idCard){
MsgException.checkNull(userId,"请选择用户");
//获取用户信息
TbPlussUserInfo userInfo= tbPlussUserInfoMapper.selectByPrimaryKey(Long.valueOf(userId));
MsgException.checkNull(userInfo,"用户信息不存在");
//判断进件信息是否存在
TbPlussMerchantBaseInfo baseInfo= tbPlussMerchantBaseInfoMapper.selectByUserId(String.valueOf(userId));
MsgException.checkNull(baseInfo,"请完善进件信息");
//判断用户是否有进件
List<TbPlussMerchantChannelStatus> merchantCodes = tbPlussMerchantChannelStatusMapper.getByMerchantCodesAudit(baseInfo.getMerchantcode());
if (merchantCodes != null){
int size = merchantCodes.size();
if (size>2){
MsgException.throwException("用户进件信息有误");
}
if (size == 1){
Integer channel = merchantCodes.get(0).getChannel();
//不同的通道
switch (channel){
case 1:
sxfMerchantAuditService.updateMerchantIdCard(merchantCodes.get(0).getMerchantid(),bankCard,idCard);
break;
case 4:
ysAuditServiceV3.updateMerchantBankCard(merchantCodes.get(0).getMerchantid(),idCard,bankCard,channel);
ysAuditServiceV3.updateMerchantIdCard(merchantCodes.get(0).getMerchantid(),idCard,channel,userInfo);
break;
case 5:
default:
break;
}
}
}
}
} }

View File

@ -40,24 +40,24 @@ public abstract class BaseMerchantAuditService {
String merchantType = merchantBaseInfo.getMerchanttype(); String merchantType = merchantBaseInfo.getMerchanttype();
String principalPerson = merchantBaseInfo.getPrincipalperson(); String principalPerson = merchantBaseInfo.getPrincipalperson();
TbPlussIdCard legalIdCard = idCardMapper.getLegalIdCard(userId); // TbPlussIdCard legalIdCard = idCardMapper.getLegalIdCard(userId);
MsgException.checkNull(legalIdCard, "请完善法人信息"); // MsgException.checkNull(legalIdCard, "请完善法人信息");
if (!"1".equals(merchantType)) { if (!"1".equals(merchantType)) {
MsgException.checkBlank(principalPerson, "请完善营业执照信息"); MsgException.checkBlank(principalPerson, "请完善营业执照信息");
} }
//同一证件只能注册三个小微商户, 如有增加需求请联系客服 //同一证件只能注册三个小微商户, 如有增加需求请联系客服
Integer num = 0; // Integer num = 0;
try { // try {
num = accountMapper.selectMicroMbiAccountNum(legalIdCard.getCertno()); // num = accountMapper.selectMicroMbiAccountNum(legalIdCard.getCertno());
} catch (Exception e) { // } catch (Exception e) {
log.error(e.toString()); // log.error(e.toString());
} // }
//
if (num >= MAX_MIRCO_MERCHANT_NUM) { // if (num >= MAX_MIRCO_MERCHANT_NUM) {
throw new MsgException("同一证件只能注册三个小微商户, 如有增加需求请联系客服"); // throw new MsgException("同一证件只能注册三个小微商户, 如有增加需求请联系客服");
} // }
} }
} }

View File

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chaozhanggui.common.system.config.MsgException; import com.chaozhanggui.common.system.config.MsgException;
import com.chaozhanggui.common.system.config.ParameterConfig;
import com.chaozhanggui.common.system.config.channel.SxfConfig; import com.chaozhanggui.common.system.config.channel.SxfConfig;
import com.chaozhanggui.common.system.util.*; import com.chaozhanggui.common.system.util.*;
import com.chaozhanggui.dao.system.dao.*; import com.chaozhanggui.dao.system.dao.*;
@ -14,6 +15,7 @@ import com.chaozhanggui.merchant.service.sxf.model.Converter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.*; import org.springframework.http.*;
@ -58,48 +60,84 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
@Resource @Resource
private TbPlussMerchantImageMapper merchantImageMapper; private TbPlussMerchantImageMapper merchantImageMapper;
@Resource
RestTemplate restTemplate;
@Autowired
SxfConfig sxfConfig;
public static class ImageType {
private ImageType() {}
/** 身份证正面 */
public static final String IDCARD_FRONT = "02";
/** 身份证反面 */
public static final String IDCARD_BACK = "03";
/** 营业执照 */
public static final String BUSINESS_LICENSE = "13";
/** 开户许可证 */
public static final String ACCOUNT_PERMITS = "04";
/** 门头照 */
public static final String SHOP_FRONT_DOOR = "10";
/** 非法人结算授权书 */
public static final String NON_LEG_SETTLE_AUTH = "26";
/** 其它 */
public static final String OTHER = "19";
/** 收银台照片 */
public static final String CASH_DESK_PHOTO = "12";
/** 门店内景照片 */
public static final String STORE_INTERIOR_PHOTO = "11";
/** 各大餐饮平台入驻 */
public static final String MERCHANT_PLATFORM = "10";
/** 手持身份证 */
public static final String HAND_IDCARD_PHOTO = "15";
/** 租赁协议一(封面) */
public static final String TENANCY_AGREEMENTS1 = "16";
/** 租赁合同二(面积,有效期页面) */
public static final String TENANCY_AGREEMENTS2 = "17";
/** 租赁合同三(签章页) */
public static final String TENANCY_AGREEMENTS3 = "18";
/** 银行卡正面 */
public static final String BANK_CARD_FRONT = "05";
/** 银行卡反面 */
public static final String BANK_CARD_BACK = "06";
/** 结算身份证正面 */
public static final String SETTLE_IDCARD_FRONT = "08";
/** 结算身份证反面 */
public static final String SETTLE_IDCARD_BACK = "07";
}
/** /**
* 进件 * 进件
* @param userId * @param userId
* @param isFailCheck
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void merchantAudit(String userId, boolean isFailCheck) { public void merchantAudit(String userId, TbPlussMerchantChannelStatus mcs) {
//进件检测 //进件检测
merchantAuditCheck(userId,isFailCheck); merchantAuditCheck(userId,false);
TbPlussMerchantBaseInfo merchantBaseInfo = merchantBaseInfoMapper.selectByUserId(userId); TbPlussMerchantBaseInfo merchantBaseInfo = merchantBaseInfoMapper.selectByUserId(userId);
TbPlussMerchantChannelStatus mcs = merchantChannelStatusMapper.getByMerchantCode(merchantBaseInfo.getMerchantcode(),"1");
JSONObject reqData = new JSONObject(); JSONObject reqData = new JSONObject();
// 判断是第一次进件是入驻修改还是第一次进件 // 判断是第一次进件是入驻修改还是第一次进件
String targetUrl; String targetUrl;
MsgException.checkNull(mcs, "商户未提交审核");
String status = mcs.getStatus();
String thirdStatus = mcs.getThirdstatus();
String merchantId = mcs.getMerchantid(); String merchantId = mcs.getMerchantid();
if (status.equals(TbPlussMerchantChannelStatus.AUDIT_STATUS_EXAMINING) && !thirdStatus.equals(TbPlussMerchantChannelStatus.AUDIT_THIRD_STATUS_WAITING)) {
MsgException.throwException("进件审核中,请等待审核结果");
}
if (TbPlussMerchantChannelStatus.isAudited(mcs)) {
MsgException.throwException("商户已进件成功,请勿重复进件");
}
if (StringUtils.isEmpty(merchantId)) { if (StringUtils.isEmpty(merchantId)) {
// 初次进件 // 初次进件
targetUrl = SxfConfig.SXF_MERCHANT_INCOME; targetUrl = sxfConfig.SXF_MERCHANT_INCOME;
} else { } else {
// 进件失败数据修改 // 进件失败数据修改
targetUrl = SxfConfig.SXF_UPADTE_MERCHANT_RZ; targetUrl = sxfConfig.SXF_UPADTE_MERCHANT_RZ;
reqData.put("mno", merchantId); reqData.put("mno", merchantId);
} }
// step 1组合请求数据 // step 1组合请求数据
reqData.putAll(getMerchantAuditInfo(userId, merchantBaseInfo, mcs)); reqData.putAll(getMerchantAuditInfo(userId, merchantBaseInfo, mcs));
reqData.put("callbackUrl", ParametersUtil.domain + "/api/auditCallback/sxf"); reqData.put("callbackUrl", parameterConfig.getDomain() + "/api/auditCallback/sxf");
//支付宝通道ID //支付宝通道ID
reqData.put("specifyALiPayChannel", ParametersUtil.alipayChannel); reqData.put("specifyALiPayChannel", ParametersUtil.alipayChannel);
log.info("{}随行付进件参数{}", userId, JSON.toJSONString(reqData)); log.info("{}随行付进件参数{}", userId, JSON.toJSONString(reqData));
@ -113,11 +151,11 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
MsgException.throwException(e.getMessage()); MsgException.throwException(e.getMessage());
} }
MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, resultMap.get("code"), "进件失败," + resultMap.get("msg")); MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, resultMap.get("code"), "进件失败," + resultMap.get("msg"));
// 业务成功 // 业务成功
JSONObject respData = resultMap.getJSONObject("respData"); JSONObject respData = resultMap.getJSONObject("respData");
MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), "进件失败," + respData.get("bizMsg")); MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), "进件失败," + respData.get("bizMsg"));
Date date = new Date(); Date date = new Date();
@ -150,6 +188,69 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
merchantChannelStatusMapper.insertSelective(mcs); merchantChannelStatusMapper.insertSelective(mcs);
} }
} }
@Autowired
ParameterConfig parameterConfig;
/**
* 随行付更改身份证和银行卡
* @param merchantId
*/
public void updateMerchantIdCard(String merchantId, TbPlussBankCard bankCard, TbPlussIdCard idCard){
//组装参数
//实名
JSONObject reqData = new JSONObject();
reqData.put("mno",merchantId);
reqData.put("identityName",idCard.getCertname());
reqData.put("identityTyp","00");
reqData.put("identityNo",idCard.getCertno());
reqData.put("legalPersonLicStt",idCard.getCertstarttime());
reqData.put("legalPersonLicEnt",idCard.getCertendtime());
reqData.put("legalPersonidPositivePic",idCard.getImgpositive());
reqData.put("legalPersonidOppositePic",idCard.getImgnegative());
//TODO 结算相关(暂时只可以改对私相关)
if ("01".equals(bankCard.getAccounttype())){
reqData.put("actNm",bankCard.getBankholder());
reqData.put("stmManIdNo",idCard.getCertno());
reqData.put("accountLicStt",idCard.getCertstarttime());
reqData.put("accountLicEnt",idCard.getCertendtime());
TbPlussBankCodeSxf bankCodeSxf = bankCodeSxfMapper.selectByCnapsCode(bankCard.getContactline());
reqData.put("actNo",bankCard.getBankcardno());
reqData.put("depoBank",bankCard.getBankcardno());
// 银行code
reqData.put("depoBank", bankCodeSxf.getBankCode());
// 省份code
reqData.put("depoProvCd", bankCodeSxf.getProvinceCode());
// 城市code
reqData.put("depoCityCd", bankCodeSxf.getCityCode());
// 联行号
reqData.put("lbnkNo", bankCodeSxf.getCnapsCode());
reqData.put("lbnkNm", bankCodeSxf.getCnapsName());
reqData.put("bankCardPositivePic", bankCodeSxf.getCnapsCode());
reqData.put("settlePersonIdcardPositive", bankCodeSxf.getCnapsName());
reqData.put("settlePersonIdcardOpposite", bankCodeSxf.getCnapsName());
}
reqData.put("updateCallBackUrl",parameterConfig.getDomain() + "/api/auditCallback/updateSxf");
//调取通用请求
JSONObject resultMap = requestApi(sxfConfig.SXF_UPDATE_MERCHANT_INFO, reqData);
try {
checkSign(resultMap);
} catch (Exception e) {
MsgException.throwException(e.getMessage());
}
MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, resultMap.get("code"), "修改失败," + resultMap.get("msg"));
// 业务成功
JSONObject respData = resultMap.getJSONObject("respData");
MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), "修改失败," + respData.get("bizMsg"));
}
private JSONObject getMerchantAuditInfo(String userId, TbPlussMerchantBaseInfo merchantBaseInfo, TbPlussMerchantChannelStatus merchantChannelStatus) { private JSONObject getMerchantAuditInfo(String userId, TbPlussMerchantBaseInfo merchantBaseInfo, TbPlussMerchantChannelStatus merchantChannelStatus) {
// step 1组合请求数据 // step 1组合请求数据
JSONObject reqData = new JSONObject(); JSONObject reqData = new JSONObject();
@ -222,17 +323,17 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
* @return * @return
*/ */
public JSONObject requestApi(String url, JSONObject reqData) { public JSONObject requestApi(String url, JSONObject reqData) {
RestTemplate restTemplate = new RestTemplate();
try { try {
JSONObject paramMap = new JSONObject(); JSONObject paramMap = new JSONObject();
paramMap.put("orgId", SxfConfig.ORG_ID); paramMap.put("orgId", sxfConfig.ORG_ID);
paramMap.put("reqId", UUID.randomUUID().toString().replaceAll("-", "")); paramMap.put("reqId", UUID.randomUUID().toString().replaceAll("-", ""));
paramMap.put("version", "1.0"); paramMap.put("version", "1.0");
paramMap.put("timestamp", DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")); paramMap.put("timestamp", DateFormatUtils.format(new Date(), "yyyyMMddHHmmss"));
paramMap.put("reqData", reqData); paramMap.put("reqData", reqData);
paramMap.put("signType", "RSA"); paramMap.put("signType", "RSA");
String signContent = SignUtils.getSignContent(paramMap); String signContent = SignUtils.getSignContent(paramMap);
paramMap.put("sign", RSAUtils.sign(SxfConfig.PRIVATE_KEY, signContent)); paramMap.put("sign", RSAUtils.sign(sxfConfig.PRIVATE_KEY, signContent));
log.info("===================>【随行付】请求参数:{}<================",paramMap); log.info("===================>【随行付】请求参数:{}<================",paramMap);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, paramMap, JSONObject.class); ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, paramMap, JSONObject.class);
@ -263,7 +364,7 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
} }
String srcData = SignUtils.getSignContent(receiveData); String srcData = SignUtils.getSignContent(receiveData);
boolean sign = RSAUtils.checkSign(SxfConfig.PUBLIC_KEY, srcData, receiveData.getString("sign")); boolean sign = RSAUtils.checkSign(sxfConfig.PUBLIC_KEY, srcData, receiveData.getString("sign"));
if (!sign) { if (!sign) {
throw new IllegalArgumentException("商户入驻回调接口验签不通过"); throw new IllegalArgumentException("商户入驻回调接口验签不通过");
} }
@ -297,24 +398,24 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
} }
}; };
paramMap.add("file", contentsAsResource); paramMap.add("file", contentsAsResource);
paramMap.add("orgId", SxfConfig.ORG_ID); paramMap.add("orgId", sxfConfig.ORG_ID);
paramMap.add("pictureType", imgTypeTransform(merchantImage.getPhotoType())); paramMap.add("pictureType", imgTypeTransform(merchantImage.getPhotoType()));
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(paramMap, headers); HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(paramMap, headers);
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
JSONObject responseJson = restTemplate.postForObject(SxfConfig.SXF_MERCHANT_INCOME_PHOTO_UPLOAD, request, JSONObject.class); JSONObject responseJson = restTemplate.postForObject(sxfConfig.SXF_MERCHANT_INCOME_PHOTO_UPLOAD, request, JSONObject.class);
MsgException.checkNull(responseJson, "请求失败"); MsgException.checkNull(responseJson, "请求失败");
log.info("upload response : {}", responseJson.toJSONString()); log.info("upload response : {}", responseJson.toJSONString());
MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, responseJson.get("code"), "请求失败"); MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, responseJson.get("code"), "请求失败");
JSONObject respData = responseJson.getJSONObject("respData"); JSONObject respData = responseJson.getJSONObject("respData");
MsgException.checkNull(respData, "上传图片失败"); MsgException.checkNull(respData, "上传图片失败");
MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), respData.getString("bizMsg")); MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), respData.getString("bizMsg"));
Date date = new Date(); Date date = new Date();
@ -329,31 +430,31 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService {
public String imgTypeTransform(String imageType) { public String imgTypeTransform(String imageType) {
switch (imageType) { switch (imageType) {
case TbPlussMerchantImage.IDCARD_FRONT: case TbPlussMerchantImage.IDCARD_FRONT:
return TbPlussMerchantImage.IDCARD_FRONT; return ImageType.IDCARD_FRONT;
case TbPlussMerchantImage.IDCARD_BACK: case TbPlussMerchantImage.IDCARD_BACK:
return TbPlussMerchantImage.IDCARD_BACK; return ImageType.IDCARD_BACK;
case TbPlussMerchantImage.SETTLE_IDCARD_FRONT: case TbPlussMerchantImage.SETTLE_IDCARD_FRONT:
return TbPlussMerchantImage.SETTLE_IDCARD_FRONT; return ImageType.SETTLE_IDCARD_BACK;
case TbPlussMerchantImage.SETTLE_IDCARD_BACK: case TbPlussMerchantImage.SETTLE_IDCARD_BACK:
return TbPlussMerchantImage.SETTLE_IDCARD_BACK; return ImageType.SETTLE_IDCARD_FRONT;
case TbPlussMerchantImage.BANK_CARD_BACK: case TbPlussMerchantImage.BANK_CARD_BACK:
return TbPlussMerchantImage.BANK_CARD_BACK; return ImageType.BANK_CARD_BACK;
case TbPlussMerchantImage.BANK_CARD_FRONT: case TbPlussMerchantImage.BANK_CARD_FRONT:
return TbPlussMerchantImage.BANK_CARD_FRONT; return ImageType.BANK_CARD_FRONT;
case TbPlussMerchantImage.BUSINESS_LICENSE: case TbPlussMerchantImage.BUSINESS_LICENSE:
return TbPlussMerchantImage.BUSINESS_LICENSE; return ImageType.BUSINESS_LICENSE;
case TbPlussMerchantImage.ACCOUNT_PERMITS: case TbPlussMerchantImage.ACCOUNT_PERMITS:
return TbPlussMerchantImage.ACCOUNT_PERMITS; return ImageType.ACCOUNT_PERMITS;
case TbPlussMerchantImage.NON_LEG_SETTLE_AUTH: case TbPlussMerchantImage.NON_LEG_SETTLE_AUTH:
return TbPlussMerchantImage.NON_LEG_SETTLE_AUTH; return ImageType.NON_LEG_SETTLE_AUTH;
case TbPlussMerchantImage.SHOP_FRONT_DOOR: case TbPlussMerchantImage.SHOP_FRONT_DOOR:
return TbPlussMerchantImage.SHOP_FRONT_DOOR; return ImageType.SHOP_FRONT_DOOR;
case TbPlussMerchantImage.CASH_DESK_PHOTO: case TbPlussMerchantImage.CASH_DESK_PHOTO:
return TbPlussMerchantImage.CASH_DESK_PHOTO; return ImageType.CASH_DESK_PHOTO;
case TbPlussMerchantImage.STORE_INTERIOR_PHOTO: case TbPlussMerchantImage.STORE_INTERIOR_PHOTO:
return TbPlussMerchantImage.STORE_INTERIOR_PHOTO; return ImageType.STORE_INTERIOR_PHOTO;
default: default:
return TbPlussMerchantImage.OTHER; return ImageType.OTHER;
} }
} }
private void combineMerchantBaseInfo(Map<String, Object> map, TbPlussMerchantBaseInfo merchantBaseInfo) { private void combineMerchantBaseInfo(Map<String, Object> map, TbPlussMerchantBaseInfo merchantBaseInfo) {

View File

@ -34,7 +34,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ClientHttpRequest;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.TransactionStatus;
@ -46,18 +48,20 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.BodyInserter;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import static com.chaozhanggui.dao.system.entity.TbPlussMerchantBaseInfo.MERCH_TYPE_MICRO; import static com.chaozhanggui.dao.system.entity.TbPlussMerchantBaseInfo.MERCH_TYPE_MICRO;
import static org.springframework.http.HttpHeaders.*;
import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE;
/**银盛进件相关 /**银盛进件相关
* @author lyf * @author lyf
@ -124,6 +128,8 @@ public class YSAuditServiceV3 {
private ExecutorService executorService; private ExecutorService executorService;
@Resource @Resource
private TransactionTemplate transactionTemplate; private TransactionTemplate transactionTemplate;
@Resource
private TbPlussNoticeMapper noticeMapper;
/** /**
* 银盛进件3.0 * 银盛进件3.0
* @param userId 用户id * @param userId 用户id
@ -189,6 +195,112 @@ public class YSAuditServiceV3 {
} }
} }
/**
* 银盛更改身份证
* @param merchantId
*/
public void updateMerchantIdCard(String merchantId, TbPlussIdCard idCard,Integer channel,TbPlussUserInfo userInfo){
//组装更改参数
CrpInfo crpInfo = new CrpInfo();
crpInfo.setCrpNm(idCard.getCertname());
crpInfo.setCertExpire(idCard.getCertendtime());
crpInfo.setCrpPhone(userInfo.getPhone());
JSONObject param = new JSONObject();
param.put("mercId", merchantId);
param.put("crpInfo",crpInfo);
param.put("notifyUrl",YSAuditServiceV3.AUDIT_NOTIFY_URL);
//进件参数
RespEntity respEntity = reqExtension(ReqMethod.changeMercBaseInfo, param, channel);
String subCode = respEntity.getSubCode();
//校验进件信息
if (!Objects.equals(subCode, BIZ_SUCCESS)) {
throw new MsgException(respEntity.getSubMsg());
}
//解析业务响应参数
JSONObject extra = new JSONObject();
extra.putAll(JSON.parseObject(respEntity.getBusinessData()));
//获取变更申请流水号
String changeSysFlowId = extra.getString("changeSysFlowId");
//获取身份证正反面
executorService.execute(() -> {
imageUploadExtension("A002", idCard.getImgpositive(), changeSysFlowId);
imageUploadExtension("A003", idCard.getImgnegative(), changeSysFlowId);
});
}
/**
* 银盛更改结算信息
* @param merchantId
*/
public void updateMerchantBankCard(String merchantId, TbPlussIdCard idCard, TbPlussBankCard bankCard,Integer channel){
//首先判段是不是法人结算
TbPlussAccount tbPlussAccount;
if (4 == channel) {
TbPlussAccount account = new TbPlussAccount();
account.setUserid(bankCard.getUserid());
account.setChanneltype(TbPlussAccount.CHANNEL_TYPE_D0);
tbPlussAccount = accountMapper.selectByAccount(account);
}else {
TbPlussAccount account = new TbPlussAccount();
account.setUserid(bankCard.getUserid());
account.setChanneltype(TbPlussAccount.CHANNEL_TYPE_D1);
tbPlussAccount = accountMapper.selectByAccount(account);
}
//组装更改参数
StlAccInfo stlAccInfo = new StlAccInfo();
stlAccInfo.setIsSettInPlatAcc("N");
stlAccInfo.setIsUncrpSett(tbPlussAccount.getSettletype().startsWith(TbPlussAccount.SETTLE_TYPE_PRIVATE_ILLEGAL) ? "Y" : "N");
stlAccInfo.setStlAccNo(bankCard.getBankcardno());
stlAccInfo.setStlAccType(tbPlussAccount.getSettletype().startsWith(TbPlussAccount.SETTLE_TYPE_CORPORATE) ? "21" : "11");
stlAccInfo.setOpenCertNo(idCard.getCertno());
stlAccInfo.setStlAccNm(bankCard.getBankholder());
stlAccInfo.setBankSubCode(bankCard.getContactline());
stlAccInfo.setBankMobile(bankCard.getPhone());
JSONObject param = new JSONObject();
param.put("mercId", merchantId);
param.put("stlAccInfo", stlAccInfo);
param.put("notifyUrl", YSAuditServiceV3.AUDIT_NOTIFY_URL);
//进件参数
RespEntity respEntity = reqExtension(ReqMethod.changeMercStlAccInfo, param, channel);
String subCode = respEntity.getSubCode();
//校验进件信息
if (!Objects.equals(subCode, BIZ_SUCCESS)) {
throw new MsgException(respEntity.getSubMsg());
}
String businessData = respEntity.getBusinessData();
JSONObject bizData = JSON.parseObject(businessData);
String changeSysFlowId = bizData.getString("changeSysFlowId");
if (bankCard.getAccounttype().equals(TbPlussBankCard.ACCOUNT_TYPE_CORPORATE)) {
// 对公结算需要上传开户许可证
imageUploadExtension("A011", bankCard.getLicenseurl(), changeSysFlowId);
} else {
// 对私结算需要上传银行卡图片
imageUploadExtension("A004", bankCard.getImgurl(), changeSysFlowId);
}
// 非法人结算传结算人的身份证图片
if (Objects.equals(tbPlussAccount.getSettletype(), TbPlussAccount.SETTLE_TYPE_PRIVATE_ILLEGAL)) {
imageUploadExtension("A002", idCard.getImgpositive(), changeSysFlowId);
imageUploadExtension("A003", idCard.getImgnegative(), changeSysFlowId);
}
//添加消息相关
log.debug("云商服3.0基本信息变更发起成功");
String title = "收银呗商户信息变更通知";
String remark = "D0结算信息变更已发起";
TbPlussNotice notice = new TbPlussNotice();
notice.setUserid(bankCard.getUserid());
notice.setTitle(title);
notice.setConrtent(remark);
noticeMapper.insertSelective(notice);
}
/** /**
* 组装进件基本信息 * 组装进件基本信息
* @param userId * @param userId
@ -345,11 +457,6 @@ public class YSAuditServiceV3 {
mcs.setThirdstatus(TbPlussMerchantChannelStatus.AUDIT_THIRD_STATUS_AUDITING); mcs.setThirdstatus(TbPlussMerchantChannelStatus.AUDIT_THIRD_STATUS_AUDITING);
mcs.setInterfaceversion(INTERFACE_VERSION); mcs.setInterfaceversion(INTERFACE_VERSION);
merchantChannelStatusMapper.updateByPrimaryKey(mcs); merchantChannelStatusMapper.updateByPrimaryKey(mcs);
//mcsService.saveOrUpdate(mcs);
AccountDTO accountDTO = sxfMerchantAuditService.getRealAccount(userId, TbPlussAccount.CHANNEL_TYPE_D1);
idCardMapper.getLegalIdCard(userId);
} }
@ -454,6 +561,19 @@ public class YSAuditServiceV3 {
throw new MsgException("图片多次上传失败"); throw new MsgException("图片多次上传失败");
} }
/**
* 图片上传方法(更改信息)
*/
private void imageUploadExtension(String photoType, String imgUrl, String flowId){
RespEntity respEntity = reqUpload(ReqMethod.uploadChangePic, photoType, imgUrl, flowId);
if (!Objects.equals(respEntity.getSubCode(), BIZ_SUCCESS)) {
log.info("上传失败:{}", respEntity.getSubMsg());
throw new MsgException("图片上传失败");
}
}
/** /**
* 图片映射 * 图片映射
* @param imageType * @param imageType
@ -623,6 +743,109 @@ public class YSAuditServiceV3 {
} }
} }
/**
* 只用于银盛更改接口发送通用请求WebClient主要用于更改资料
* @param reqMethod
* @param reqData
* @param channel
* @return
*/
public RespEntity reqExtension(ReqMethod reqMethod, JSONObject reqData, Integer channel){
Calendar calendar = Calendar.getInstance();
int i = calendar.get(Calendar.HOUR_OF_DAY);
if (i < 8 || i >= 21) {
throw new MsgException("当前时段暂不支持入网请于8:00-21:00提交");
}
String key = RandomUtil.randomString(RandomUtil.BASE_NUMBER + "ABCDEF",16);
try {
ReqEntity request = ReqEntity.get(reqMethod);
Sign sign = null;
if (channel.equals(4)) {
request.setCertId(ysConfig.getSrcMerchantNo());
RSA rsa = SecureUtil.rsa(ysConfig.getPriKey(), ysConfig.getOldPubKey());
request.setCheck(rsa.encryptBase64(key, KeyType.PublicKey));
sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, ysConfig.getPriKey(), ysConfig.getOldPubKey());
}else {
request.setCertId(ysConfigV3.getSrcMerchantNoD1());
RSA rsa = SecureUtil.rsa(ysConfigV3.getPriKeyV2D1(), ysConfigV3.getPubKeyV2D1());
request.setCheck(rsa.encryptBase64(key, KeyType.PublicKey));
sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, ysConfigV3.getPriKeyV2D1(), ysConfigV3.getPubKeyV2D1());
}
request.setBizContent(reqData.toJSONString());
log.info("业务参数==============>" + JSONObject.toJSONString(reqData));
log.info("key = " + key);
AES aes = new AES(key.getBytes(StandardCharsets.UTF_8));
String s = aes.encryptBase64(request.getBizContent());
request.setBizContent(s);
String encryptOriginData = SignUtils.getSignContent((JSONObject) JSON.toJSON(request));
log.info("加签源数据==============>" + encryptOriginData);
request.setSign(Base64.encode(sign.sign(encryptOriginData.getBytes())));
log.warn("请求报文==============>" + JSONObject.toJSONString(request));
log.info("请求地址:{}", reqMethod.getUrl());
//发送请求
Mono<String> resp = WebClient.create().post()
.uri(reqMethod.getUrl())
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.header(USER_AGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36")
.body((BodyInserter<?, ? super ClientHttpRequest>) request)
.retrieve().bodyToMono(String.class);
String respStr = resp.toString();
log.info("返回信息base64{}", respStr);
byte[] decode = Base64.decode(respStr);
respStr = new String(decode, StandardCharsets.UTF_8);
log.info("返回信息:{}", respStr);
JSONObject param = JSON.parseObject(respStr);
String signContent = SignUtils.getSignContent(param);
System.out.println("加签原参数:" + signContent);
boolean checkSign;
try {
checkSign = sign.verify(signContent.getBytes(StandardCharsets.UTF_8), Base64.decode(param.getString("sign")));
} catch (Exception e) {
log.error("银盛云商服3.0接口验签失败{}", e.getMessage());
e.printStackTrace();
checkSign = true;
}
if (!checkSign) {
throw new MsgException("银盛云商服3.0接口验签不通过");
}
RespEntity respEntity = JSON.parseObject(respStr, RespEntity.class);
// 检查网关code码
if (!Objects.equals(respEntity.getCode(), REQ_SUCCESS)) {
throw new MsgException(respEntity.getMsg());
}
// 业务响应码这里不做判断交给具体接口业务逻辑去判断
if (StringUtils.hasText(respEntity.getBusinessData())) {
byte[] bizBytes = Base64.decode(respEntity.getBusinessData());
String decryptBizData = aes.decryptStr(bizBytes);
respEntity.setBusinessData(decryptBizData);
log.info("业务参数: {}", respEntity.getBusinessData());
}
return respEntity;
} catch (Exception e) {
if (e instanceof MsgException) {
throw e;
}
return null;
}
}
/** /**
* 进件上传图片 * 进件上传图片
* @param reqMethod * @param reqMethod
@ -740,6 +963,7 @@ public class YSAuditServiceV3 {
} }
} }
/** /**
* 再次检测 * 再次检测
* @param userId * @param userId