mitao
2025-11-14 b86f280e00ec3623bd9f220957115b8b3137ba77
汇付进件对接
4个文件已添加
3个文件已修改
471 ■■■■■ 已修改文件
UserJYXTravel/guns-admin/pom.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/account/controller/ElectronicLedgerController.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongBasicDataBiz.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/config/HuiFuPropertiesConfiguration.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/properties/HuiFuProperties.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/req/UserBasicDataReq.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/resources/application.yml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/pom.xml
@@ -232,7 +232,12 @@
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
        </dependency>-->
        <!--斗拱sdk-->
        <dependency>
            <groupId>com.huifu.bspay.sdk</groupId>
            <artifactId>dg-java-sdk</artifactId>
            <version>3.0.31</version>
        </dependency>
    </dependencies>
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/account/controller/ElectronicLedgerController.java
@@ -17,6 +17,7 @@
import com.stylefeng.guns.modular.cloudPayment.example.*;
import com.stylefeng.guns.modular.cloudPayment.req.BalanceAcctReq;
import com.stylefeng.guns.modular.cloudPayment.req.UserBankAccountReq;
import com.stylefeng.guns.modular.huifu.biz.DouGongBasicDataBiz;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.IBankCardService;
import com.stylefeng.guns.modular.system.service.ICompanyService;
@@ -47,6 +48,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Api(tags = "用户进件(提现操作)/创建电子账簿")
@@ -66,6 +68,8 @@
    private IUserService userService;
    @Autowired
    private IBankCardService bankCardService;
    @Autowired
    private DouGongBasicDataBiz douGongBasicDataBiz;
    @ResponseBody
    @RequestMapping(value = "/addElectronicLedger", method = RequestMethod.POST)
@@ -105,96 +109,87 @@
            System.out.println("验证码:"+userWithdrawalReq.getCode());
            userWithdrawalReq.setCopy1(userWithdrawalReq.getCopy1().replaceAll(" ","+"));
            userWithdrawalReq.setCopy2(userWithdrawalReq.getCopy2().replaceAll(" ","+"));
            // 用户进件
            CusApplicationResp cusApplicationResp = CusApplicationExample.create(userWithdrawalReq);
            System.out.println("进件状态:"+cusApplicationResp);
            if("succeeded".equals(cusApplicationResp.getApplicationStatus())) {
                userWithdrawal.setTransactionAuthorizationCode(Base64Util.encode(password));
                userWithdrawal.setUserType(1);
                userWithdrawal.setUserId(id);
                userWithdrawal.setImgUrl(userWithdrawalReq.getIdCardFrontPicture());
                userWithdrawal.setImgUrlOne(userWithdrawalReq.getIdCardReversePicture());
                userWithdrawal.setIdCardFrontPicture(userWithdrawalReq.getCopy1());
                userWithdrawal.setIdCardReversePicture(userWithdrawalReq.getCopy2());
                userWithdrawalService.insert(userWithdrawal);
                UserWithdrawal userWithdrawal1 = new UserWithdrawal();
                userWithdrawal1.setId(userWithdrawal.getId());
                BeanUtils.copyProperties(cusApplicationResp, userWithdrawal1);
                userWithdrawalService.updateById(userWithdrawal1);
                // 开通电子账簿
                BalanceAcctReq balanceAcctReq = new BalanceAcctReq();
                balanceAcctReq.setCusId(userWithdrawal1.getCusId());
                balanceAcctReq.setOutRequestNo(ToolUtil.getRandomString(32));
                balanceAcctReq.setPassword(password);
                ElectronicLedger electronicLedger = new ElectronicLedger();
                electronicLedger.setBalanceAcctId(cusApplicationResp.getBalanceAcctId());
                electronicLedger.setCreateTime(new Date());
                electronicLedger.setCusId(cusApplicationResp.getCusId());
                electronicLedger.setOutRequestNo(cusApplicationResp.getOutRequestNo());
                electronicLedger.setUserId(userWithdrawal.getUserId());
                electronicLedger.setPassword(SecureUtil.md5(password));
                electronicLedger.setRelAcctNo(cusApplicationResp.getRelAcctNo());
                electronicLedger.setUserType(1);
                electronicLedgerService.insert(electronicLedger);
                // 绑卡 存卡
                UserBankAccount userBankAccount = new UserBankAccount();
                userBankAccount.setBankAcctType("1");
                userBankAccount.setOutRequestNo(ToolUtil.getRandomString(32));
                userBankAccount.setUserType(1);
                userBankAccount.setCreateTime(new Date());
                userBankAccount.setBankCardCode(userWithdrawal.getBankCardCode());
                // TODO 页面没有输入地方 需要查询
                userBankAccount.setBankCode(userWithdrawal.getBankCode());
                // TODO 行联号
                userBankAccount.setBankBranchCode(userWithdrawal.getBankBranchCode());
                userBankAccount.setPhone(userWithdrawal.getPhone());
                userBankAccount.setUserId(userWithdrawal.getUserId());
                userBankAccount.setBankName(userWithdrawal.getBankName());
                userBankAccount.setOpenAccountName(userWithdrawalReq.getOpenAccountName());
                int count = userBankAccountService.selectCount(new EntityWrapper<UserBankAccount>()
                        .eq("bankCardCode", userWithdrawalReq.getBankCardCode()).eq("phone",userWithdrawalReq.getPhone()).eq("status",1));
                if(count<1){
                    userBankAccountService.insert(userBankAccount);
                }
                BankCard bankCard = new BankCard();
                bankCard.setDriverId(userWithdrawal.getUserId());
                bankCard.setBankAcctType("1");
                bankCard.setOutRequestNo(ToolUtil.getRandomString(32));
                bankCard.setInsertTime(new Date());
                bankCard.setCode(userWithdrawal.getBankCardCode());
                bankCard.setBankCode(userWithdrawal.getBankCode());
                bankCard.setBankBranchCode(userWithdrawal.getBankBranchCode());
                bankCard.setBank(userWithdrawal.getBankName());
                bankCard.setPhone(userWithdrawal.getPhone());
                bankCard.setName(userWithdrawal.getOpenAccountName());
                bankCard.setIfDefault(true);
                bankCardService.insert(bankCard);
                UserBankAccountReq userBankAccountReq = new UserBankAccountReq();
                BeanUtils.copyProperties(userBankAccount, userBankAccountReq);
                System.err.println(userWithdrawalReq.getCode());
                userBankAccountReq.setCusId(cusApplicationResp.getCusId());
                userBankAccountReq.setCode(userWithdrawalReq.getCode());
                return ResultUtil.success();
            // 用户进件 TODO
            Map<String, Object> resultMap = douGongBasicDataBiz.userBasicDataIndv(userWithdrawalReq);
            String respCode = (String) resultMap.get("resp_code");
            //CusApplicationResp cusApplicationResp = CusApplicationExample.create(userWithdrawalReq);
            if(!"200".equals(respCode)) {
                return ResultUtil.error((String) resultMap.get("resp_desc"));
            }
            if("failed".equals(cusApplicationResp.getApplicationStatus())){
                List<FailureMsgParam> failureMsgs = cusApplicationResp.getFailureMsgs();
                if(failureMsgs != null && failureMsgs.size()>0){
                    return ResultUtil.error(failureMsgs.get(0).getReason());
                }
            userWithdrawal.setTransactionAuthorizationCode(Base64Util.encode(password));
            userWithdrawal.setUserType(1);
            userWithdrawal.setUserId(id);
            userWithdrawal.setImgUrl(userWithdrawalReq.getIdCardFrontPicture());
            userWithdrawal.setImgUrlOne(userWithdrawalReq.getIdCardReversePicture());
            userWithdrawal.setIdCardFrontPicture(userWithdrawalReq.getCopy1());
            userWithdrawal.setIdCardReversePicture(userWithdrawalReq.getCopy2());
            userWithdrawalService.insert(userWithdrawal);
            //调用汇付业务入驻接口 todo
            Map<String, Object> map = douGongBasicDataBiz.userBusinessOpen(userWithdrawalReq);
            UserWithdrawal userWithdrawal1 = new UserWithdrawal();
            userWithdrawal1.setId(userWithdrawal.getId());
            BeanUtils.copyProperties(cusApplicationResp, userWithdrawal1);
            userWithdrawalService.updateById(userWithdrawal1);
            // 开通电子账簿
            BalanceAcctReq balanceAcctReq = new BalanceAcctReq();
            balanceAcctReq.setCusId(userWithdrawal1.getCusId());
            balanceAcctReq.setOutRequestNo(ToolUtil.getRandomString(32));
            balanceAcctReq.setPassword(password);
            ElectronicLedger electronicLedger = new ElectronicLedger();
            electronicLedger.setBalanceAcctId(cusApplicationResp.getBalanceAcctId());
            electronicLedger.setCreateTime(new Date());
            electronicLedger.setCusId(cusApplicationResp.getCusId());
            electronicLedger.setOutRequestNo(cusApplicationResp.getOutRequestNo());
            electronicLedger.setUserId(userWithdrawal.getUserId());
            electronicLedger.setPassword(SecureUtil.md5(password));
            electronicLedger.setRelAcctNo(cusApplicationResp.getRelAcctNo());
            electronicLedger.setUserType(1);
            electronicLedgerService.insert(electronicLedger);
            // 绑卡 存卡
            UserBankAccount userBankAccount = new UserBankAccount();
            userBankAccount.setBankAcctType("1");
            userBankAccount.setOutRequestNo(ToolUtil.getRandomString(32));
            userBankAccount.setUserType(1);
            userBankAccount.setCreateTime(new Date());
            userBankAccount.setBankCardCode(userWithdrawal.getBankCardCode());
            // TODO 页面没有输入地方 需要查询
            userBankAccount.setBankCode(userWithdrawal.getBankCode());
            // TODO 行联号
            userBankAccount.setBankBranchCode(userWithdrawal.getBankBranchCode());
            userBankAccount.setPhone(userWithdrawal.getPhone());
            userBankAccount.setUserId(userWithdrawal.getUserId());
            userBankAccount.setBankName(userWithdrawal.getBankName());
            userBankAccount.setOpenAccountName(userWithdrawalReq.getOpenAccountName());
            int count = userBankAccountService.selectCount(new EntityWrapper<UserBankAccount>()
                    .eq("bankCardCode", userWithdrawalReq.getBankCardCode()).eq("phone",userWithdrawalReq.getPhone()).eq("status",1));
            if(count<1){
                userBankAccountService.insert(userBankAccount);
            }
            BankCard bankCard = new BankCard();
            bankCard.setDriverId(userWithdrawal.getUserId());
            bankCard.setBankAcctType("1");
            bankCard.setOutRequestNo(ToolUtil.getRandomString(32));
            bankCard.setInsertTime(new Date());
            bankCard.setCode(userWithdrawal.getBankCardCode());
            bankCard.setBankCode(userWithdrawal.getBankCode());
            bankCard.setBankBranchCode(userWithdrawal.getBankBranchCode());
            bankCard.setBank(userWithdrawal.getBankName());
            bankCard.setPhone(userWithdrawal.getPhone());
            bankCard.setName(userWithdrawal.getOpenAccountName());
            bankCard.setIfDefault(true);
            bankCardService.insert(bankCard);
            UserBankAccountReq userBankAccountReq = new UserBankAccountReq();
            BeanUtils.copyProperties(userBankAccount, userBankAccountReq);
            System.err.println(userWithdrawalReq.getCode());
            userBankAccountReq.setCusId(cusApplicationResp.getCusId());
            userBankAccountReq.setCode(userWithdrawalReq.getCode());
            return ResultUtil.success();
        }catch (UpyztException e){
            if(e.getCode().equals("100101")){
                return ResultUtil.error(e.getIssue());
            }
            e.printStackTrace();
            String message = e.getMessage();
            return ResultUtil.error(message);
        }catch (Exception e){
            log.error("用户进件失败", e);
            String message = e.getMessage();
            return ResultUtil.error(message);
        }
@@ -249,6 +244,7 @@
            userWithdrawal.setCode(code);
            userWithdrawal.setBankCode(bankCode);
            CusApplicationResp renew = CusApplicationExample.renew(userWithdrawal);
            Map<String, Object> resultMap = douGongBasicDataBiz.userBasicDataIndvModify(userWithdrawal);
            log.info("修改个人用户进件信息返回:{}",renew);
            if("succeeded".equals(renew.getApplicationStatus())){
                userWithdrawal1.setIdCardFrontPicture(copy1);
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongBasicDataBiz.java
New file
@@ -0,0 +1,196 @@
package com.stylefeng.guns.modular.huifu.biz;
import cn.hutool.core.date.DateUtil;
import com.google.gson.JsonObject;
import com.huifu.bspay.sdk.opps.core.BasePay;
import com.huifu.bspay.sdk.opps.core.config.MerConfig;
import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
import com.huifu.bspay.sdk.opps.core.utils.RsaUtils;
import com.stylefeng.guns.modular.account.req.UserWithdrawalReq;
import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
import com.stylefeng.guns.core.util.RequestSeqUtil;
import com.stylefeng.guns.modular.system.model.UserWithdrawal;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * 斗拱进件业务
 * @author mitao
 * @date 2025/11/14
 */
@Slf4j
@Component
public class DouGongBasicDataBiz {
    @Autowired
    private HuiFuProperties huiFuProperties;
    /**
     * 个人用户基本信息开户
     * @return
     * @throws Exception
     */
    public Map<String, Object> userBasicDataIndv(UserWithdrawalReq userWithdrawalReq) throws Exception {
        // 1. 数据初始化,填入对应的商户配置
        MerConfig merConfig = new MerConfig();
        merConfig.setProcutId(huiFuProperties.getProductId());
        merConfig.setSysId(huiFuProperties.getSysId());
        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
        BasePay.initWithMerConfig(merConfig);
        // 2.组装请求参数
        Map<String, Object> paramsInfo = new HashMap<>();
        // 请求流水号(动态生成,确保唯一性)
        paramsInfo.put("req_seq_id", RequestSeqUtil.generateForHuiFu());
        // 请求日期
        paramsInfo.put("req_date", DateUtil.format(new Date(),"yyyyMMdd"));
        // 个人证件类型
        paramsInfo.put("cert_type", "00");
        String[] certificateExpireDateArr = userWithdrawalReq.getCertificateExpireTime().split(",");
        String startDateStr = certificateExpireDateArr[0];
        // 个人证件有效期开始日期
        paramsInfo.put("cert_begin_date", startDateStr.replace("-", ""));
        // 个人证件有效期截止日期
        String endDateStr = certificateExpireDateArr[1];
        if (!"长期".equals(endDateStr)) {
            String formatEndDate = endDateStr.replace("-", "");
            paramsInfo.put("cert_end_date", formatEndDate);
            // 个人证件有效期类型
            paramsInfo.put("cert_validity_type", "0");
        }else {
            // 个人证件有效期类型
            paramsInfo.put("cert_validity_type", "1");
        }
        // 手机号
        paramsInfo.put("mobile_no", userWithdrawalReq.getPhone());
        // 个人姓名
        paramsInfo.put("name", RsaUtils.encrypt(userWithdrawalReq.getOpenAccountName(), huiFuProperties.getRsaPublicKey()));
        // 个人证件号码
        paramsInfo.put("cert_no", RsaUtils.encrypt(userWithdrawalReq.getCertificateCode(), huiFuProperties.getRsaPublicKey()));
        // 是否发送短信标识
        paramsInfo.put("sms_send_flag", "1");
        // 3. 发起API调用
        Map<String, Object> response = BasePayRequest.requestBasePay("v2/user/basicdata/indv", paramsInfo, null, false);;
        log.info("个人用户基本信息开户返回参数:" + response);
        return response;
    }
    /**
     * 个人用户基本信息修改
     * @return
     * @throws Exception
     */
    public Map<String, Object> userBasicDataIndvModify(UserWithdrawal userWithdrawal) throws Exception {
        // 1. 数据初始化,填入对应的商户配置
        MerConfig merConfig = new MerConfig();
        merConfig.setProcutId(huiFuProperties.getProductId());
        merConfig.setSysId(huiFuProperties.getSysId());
        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
        BasePay.initWithMerConfig(merConfig);
        // 2.组装请求参数
        Map<String, Object> paramsInfo = new HashMap<>();
        // 请求流水号
        paramsInfo.put("req_seq_id", RequestSeqUtil.generateForHuiFu());
        // 请求日期
        paramsInfo.put("req_date", DateUtil.format(new Date(),"yyyyMMdd"));
        // 汇付客户Id
        paramsInfo.put("huifu_id", userWithdrawal.getCusId());
        String[] certificateExpireDateArr = userWithdrawal.getCertificateExpireTime().split(",");
        String startDateStr = certificateExpireDateArr[0];
        // 个人证件有效期开始日期
        paramsInfo.put("cert_begin_date", startDateStr.replace("-", ""));
        // 个人证件有效期截止日期
        String endDateStr = certificateExpireDateArr[1];
        if (!"长期".equals(endDateStr)) {
            String formatEndDate = endDateStr.replace("-", "");
            paramsInfo.put("cert_end_date", formatEndDate);
            // 个人证件有效期类型
            paramsInfo.put("cert_validity_type", "0");
        }else {
            // 个人证件有效期类型
            paramsInfo.put("cert_validity_type", "1");
        }
        // 手机号
        paramsInfo.put("mobile_no", userWithdrawal.getPhone());
        // 3. 发起API调用
        Map<String, Object> response = BasePayRequest.requestBasePay("v2/user/basicdata/indv/modify", paramsInfo, null, false);
        log.info("个人用户基本信息修改返回参数:" + response);
        return response;
    }
    /**
     * 用户业务入驻
     * @return
     * @throws Exception
     */
    public Map<String, Object> userBusinessOpen(UserWithdrawalReq userWithdrawalReq) throws Exception {
        // 1. 数据初始化,填入对应的商户配置
        MerConfig merConfig = new MerConfig();
        merConfig.setProcutId(huiFuProperties.getProductId());
        merConfig.setSysId(huiFuProperties.getSysId());
        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
        BasePay.initWithMerConfig(merConfig);
        // 2.组装请求参数
        Map<String, Object> paramsInfo = new HashMap<>();
        // 汇付ID
        paramsInfo.put("huifu_id", "6666000105765113");
        // 请求流水号
        paramsInfo.put("req_seq_id", RequestSeqUtil.generateForHuiFu());
        // 请求日期
        paramsInfo.put("req_date", DateUtil.format(new Date(),"yyyyMMdd"));
        // 渠道商/商户汇付Id
        paramsInfo.put("upper_huifu_id", "6666000003084836");
        // 乐接活配置当合作平台为乐接活,必填
        paramsInfo.put("ljh_data", "test");
        // 汇薪云配置当合作平台为汇薪云,必填
        paramsInfo.put("hxy_data", "test");
        // 结算信息配置
        paramsInfo.put("settle_config", "{\"settle_cycle\":\"D1\",\"min_amt\":\"0.01\",\"remained_amt\":\"10.00\",\"settle_abstract\":\"结算摘要\",\"out_settle_flag\":\"2\",\"settle_batch_no\":\"300\",\"fixed_ratio\":\"2\"}");
        // 结算卡信息
        paramsInfo.put("card_info", "{\"card_type\":\"0\",\"card_name\":\"交通银行股份有限公司\",\"card_no\":\"6217001210064762121\",\"prov_id\":\"310000\",\"area_id\":\"310100\",\"branch_code\":\"105305264815\",\"cert_type\":\"00\",\"cert_no\":\"110101197003077513\",\"cert_validity_type\":\"0\",\"cert_begin_date\":\"20210806\",\"cert_end_date\":\"20410806\",\"mp\":\"15556622368\"}");
        // 3. 发起API调用
        Map<String, Object> response = BasePayRequest.requestBasePay("v2/user/busi/open", paramsInfo, null, false);;
        log.info("用户业务入驻返回参数:" + response);
        return response;
    }
    /**
     * 用户业务入驻
     * @return
     * @throws Exception
     */
    public Map<String, Object> userBusinessOpenModify(UserWithdrawalReq userWithdrawalReq) throws Exception {
        // 1. 数据初始化,填入对应的商户配置
        MerConfig merConfig = new MerConfig();
        merConfig.setProcutId(huiFuProperties.getProductId());
        merConfig.setSysId(huiFuProperties.getSysId());
        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
        BasePay.initWithMerConfig(merConfig);
        // 2.组装请求参数
        Map<String, Object> paramsInfo = new HashMap<>();
        // 汇付ID
        paramsInfo.put("huifu_id", "6666000105765113");
        // 请求流水号
        paramsInfo.put("req_seq_id", RequestSeqUtil.generateForHuiFu());
        // 请求日期
        paramsInfo.put("req_date", DateUtil.format(new Date(),"yyyyMMdd"));
        // 渠道商/商户汇付Id
        paramsInfo.put("upper_huifu_id", "6666000003084836");
        // 乐接活配置当合作平台为乐接活,必填
        paramsInfo.put("ljh_data", "test");
        // 汇薪云配置当合作平台为汇薪云,必填
        paramsInfo.put("hxy_data", "test");
        // 结算信息配置
        paramsInfo.put("settle_config", "{\"settle_cycle\":\"D1\",\"min_amt\":\"0.01\",\"remained_amt\":\"10.00\",\"settle_abstract\":\"结算摘要\",\"out_settle_flag\":\"2\",\"settle_batch_no\":\"300\",\"fixed_ratio\":\"2\"}");
        // 结算卡信息
        paramsInfo.put("card_info", "{\"card_type\":\"0\",\"card_name\":\"交通银行股份有限公司\",\"card_no\":\"6217001210064762121\",\"prov_id\":\"310000\",\"area_id\":\"310100\",\"branch_code\":\"105305264815\",\"cert_type\":\"00\",\"cert_no\":\"110101197003077513\",\"cert_validity_type\":\"0\",\"cert_begin_date\":\"20210806\",\"cert_end_date\":\"20410806\",\"mp\":\"15556622368\"}");
        // 3. 发起API调用
        Map<String, Object> response = BasePayRequest.requestBasePay("v2/user/busi/open", paramsInfo, null, false);;
        log.info("用户业务入驻返回参数:" + response);
        return response;
    }
}
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/config/HuiFuPropertiesConfiguration.java
New file
@@ -0,0 +1,15 @@
package com.stylefeng.guns.modular.huifu.config;
import com.stylefeng.guns.modular.cloudPayment.config.UpyztProperties;
import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
 * @author mitao
 * @date 2025/11/14
 */
@Configuration
@EnableConfigurationProperties({HuiFuProperties.class})
public class HuiFuPropertiesConfiguration {
}
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/properties/HuiFuProperties.java
New file
@@ -0,0 +1,42 @@
package com.stylefeng.guns.modular.huifu.properties;
import lombok.Data;
import org.bouncycastle.crypto.util.PrivateKeyFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.PrimitiveIterator;
/**
 * @author mitao
 * @date 2025/11/14
 */
@Data
@Component
@ConfigurationProperties(prefix = "huifu")
public class HuiFuProperties {
    /**
     * 汇付分配的产品号
     */
    private String productId;
    /**
     * 汇付分配的系统号
     */
    private String sysId;
    /**
     * 服务商私钥,用于调用接口时进行签名
     */
    private String rsaPrivateKey;
    /**
     * 汇付公钥,用于对汇付返回报文进行签名验证
     */
    private String rsaPublicKey;
    /**
     * 汇付ID
     */
    private String huifuId;
    /**
     * 渠道商/商户汇付Id
     */
    private String upperHuifuId;
}
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/req/UserBasicDataReq.java
New file
@@ -0,0 +1,11 @@
package com.stylefeng.guns.modular.huifu.req;
import lombok.Data;
/**
 * @author mitao
 * @date 2025/11/14
 */
@Data
public class UserBasicDataReq {
}
UserJYXTravel/guns-admin/src/main/resources/application.yml
@@ -75,12 +75,12 @@
spring:
  profiles: local
  datasource:
    url: jdbc:mysql://rm-2ze3v6o025804w200ho.mysql.rds.aliyuncs.com:3306/jyxtravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: ztjyx
    password: g@arm2tx+fcxFREizr6LDt84s)UKv2EZ
    db-name: jyxtravel #用来搜集数据库的所有表
    filters: wall,mergeStat
#  datasource:
#    url: jdbc:mysql://rm-2ze3v6o025804w200ho.mysql.rds.aliyuncs.com:3306/jyxtravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
#    username: ztjyx
#    password: g@arm2tx+fcxFREizr6LDt84s)UKv2EZ
#    db-name: jyxtravel #用来搜集数据库的所有表
#    filters: wall,mergeStat
#  datasource:
##    url: jdbc:mysql://127.0.0.1:3306/jyxtravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
#    url: jdbc:mysql://192.168.110.80:3306/jyxtravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
@@ -107,12 +107,12 @@
#    filters: wall,mergeStat
#spring:
#  datasource:
#    url: jdbc:mysql://127.0.0.1:3306/jyxtravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
#    username: root
#    password: 123456
#    db-name: jyxtravel #用来搜集数据库的所有表
#    filters: wall,mergeStat
  datasource:
    url: jdbc:mysql://127.0.0.1:3307/jyxtravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root_remote
    password: 123456
    db-name: jyxtravel #用来搜集数据库的所有表
    filters: wall,mergeStat
#多数据源情况的配置
#guns:
@@ -192,4 +192,10 @@
  msgSrcId: 34U0
  mid: 898150841210108
  tid: 84UJWSE8
  instMid: QRPAYDEFAULT
  instMid: QRPAYDEFAULT
huifu:
  product_id: KAZX
  sys_id: 6666000182995771
  rsa_private_key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR6W3ynQJL7f2C8vFYMcQkcirpkif9ZhLq1374jIlV87nv0T9uIm6DoW8LyNEl9w2Yc5qoBv70tt/oVpemA6IZY6NXzE2USNi/sv2qUTtapcIRYxe4acCfY8K+x+p7W2e6wUWIpl9qgZA+UnFmHQ0HT6Ywzq2jJL92JdIs147Ud1aVi3aX8LYItj0z3ZKwZQkaJawZSWQk2+EdPfN059L2qFkPtnT7JIthAdUTJYZA13K4tzw6mXp/DbgwVmLhrlmwl/ccSv2Q0ABfEk7jIxF1nZmCmSy3HrEw9xWyrg1BC+DgXBdyF0OEtpNfv+UW080syUVBNN0irHVuDP81BaAjAgMBAAECggEAGlBZprZQErdxz6rWgYxADj6UpJjaI2XEJZwFZveZUOnqb2hyIv+MpKp5Z0upBErApey7SHAyjJlqWfE72hGvqxp/+7Z5izNz+2ZhPtT1ekyIajBPt89CkLwiA9vz2plKZLC0RIeUj5WcGNEvaDX3AomHtCehwtk+uiTp+XJKbOBtkkQszcdCGY1DVoQ0ppFoINnM9VLbEzaFaG7VS3eFkU4cf2CwcrnJB1RncyPFK+bGFvjkLM/eQbsh8YxkBqaGz/8UM1Na1SEidqdyUF71ltqnI0u8pLe0V+5jugVW+3lPL/p1C3i7mAbQOs4yqRWlFaGVTzOawoQUOPVwDpzeeQKBgQDs1P7F4wURqX1qZR0hSTqOigg48ychaOF66new3SuWk2CVBy8Q8b7odGSPyxJSGZvFLoznPYuSaXCtQ935WWfjB7Z5JpSWCi9BmJnkh41k/KvgMqAEGkZP6ul/zFnDWj94VwXEBz3TuRk574vK2coWoxjM6h1dlJjRBVVTs8dnrQKBgQCduKCjPDUuOHbcNn3VsaHEZX1XyiXN5gds08o61PjiHM42wYXxfUt59nBJmg2yAVRIrKYHfswJcxb5XUTDI5ZhCBnIPrdrQzj7FNadm/7mKDvSsvZdpfTiHY341XnvCq7OcNNj8g5fVsWF769strepQReSug7xgX7ojPvVcAZhDwKBgD57KwP2Er5IIuhQ6NCBS0uTqvurWqV70BDnjtBAaWF+XDq0/HvR63XUTzuIbbrvOqNY1p+jIxFrc+iiQQupxLimrkNkJEs5QKJjqiYahPkhmA68DG9Ip0gqR5QJy5y4UIplGwZOiscyzC72vcC0mJZETSSylzC7JV3vtEUy5ua5AoGAEwlDqjAMIyYBgpa5HV+xLKkrNbtaUL2gy8vMLsmhuHjNkuJMrlb3EyNhbiC/4moyqArehy0Qp1tSvIo7UGotLkzx/69CKBoW+IcNWDyJyXG1trqO7cKoCdqTViM98lIRwyzu9rMydONeN8o0HCT5id4nYDhAsXl1vc+2XY6F1pUCgYEA0dxGHBTKD/WzIvTYGYD6Xx224Y84mO6x2Mu16zFoq/NjuIdKi2O+92yrKDCMMCqaY77fXvWD3eI7QYYlbKAOqdLKVipTbhnBccDyNbtYHVg59t4xS+K6HyD+quVkL9n40UkxSZbKZBQhqt+vlQy0FUgONFii1ACZO0A8Sc/bvn4=
  rsa_public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB
  upper_huifu_id: 6666000182995771