liujie
2025-11-22 bfbb651d3e15563ccfa53b860a88f990fdfedad6
update
3个文件已修改
115 ■■■■■ 已修改文件
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
@@ -12,6 +12,7 @@
import com.stylefeng.guns.modular.cloudPayment.example.DepositExample;
import com.stylefeng.guns.modular.cloudPayment.req.DepositReq;
import com.stylefeng.guns.modular.enums.PaymentTypeEnum;
import com.stylefeng.guns.modular.huifu.biz.DouGongPayUtil;
import com.stylefeng.guns.modular.system.model.Company;
import com.stylefeng.guns.modular.system.model.UserInfo;
import com.stylefeng.guns.modular.system.model.UserWithdrawal;
@@ -86,7 +87,51 @@
                    Integer id = Integer.valueOf(split[1]);
                    String payAmt = jsonObject.get("pay_amt").toString();
                    userInfoService.payCancelUserBalance(Integer.valueOf(uid), order_id, Integer.valueOf(id), 1);
                    appOrderController.createAllocationReqUser(1, Integer.valueOf(uid), 1, new BigDecimal(payAmt).divide(new BigDecimal(100)).doubleValue());
//                    appOrderController.createAllocationReqUser(1, Integer.valueOf(uid), 1, new BigDecimal(payAmt).divide(new BigDecimal(100)).doubleValue());
                    // cloudPay(Integer.valueOf(uid),map.get("total_fee"),map.get("transaction_id"),1);
                    PrintWriter out = response.getWriter();
                    out.write(200);
                    out.flush();
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 斗拱充值回调函数
     }
     * @param request
     */
    @ResponseBody
    @PostMapping("/DGCancelUserBalanceZfb")
    public void DGCancelUserBalanceZfb(HttpServletRequest request, HttpServletResponse response) {
        try {
            System.out.println("DG额充值回调函数");
            String sign = request.getParameter("sign");
            String resp_data = request.getParameter("resp_data");
            System.out.println(sign);
            System.out.println(resp_data);
            resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;", ")");
            boolean verify = RsaUtils.verify(resp_data, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB", sign);
            if (verify) {
                JSONObject jsonObject = JSONObject.parseObject(resp_data);
                String order_id = jsonObject.get("out_trans_id").toString();
                String out_trade_no = jsonObject.get("req_seq_id").toString();
                String trans_stat = jsonObject.get("trans_stat").toString();
                if ("S".equals(trans_stat)) {
                    String[] split = out_trade_no.split("_");
                    Integer uid = Integer.valueOf(split[0]);
                    Integer id = Integer.valueOf(split[1]);
                    String payAmt = jsonObject.get("pay_amt").toString();
                    userInfoService.payCancelUserBalance(Integer.valueOf(uid), order_id, Integer.valueOf(id), 2);
                    // cloudPay(Integer.valueOf(uid),map.get("total_fee"),map.get("transaction_id"),1);
                    PrintWriter out = response.getWriter();
                    out.write(200);
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongPayUtil.java
@@ -5,6 +5,9 @@
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.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.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
import com.stylefeng.guns.modular.system.util.ResultUtil;
@@ -18,9 +21,7 @@
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date;
import java.util.TreeMap;
import java.util.*;
/**
 * 斗拱支付工具类
@@ -46,7 +47,7 @@
        String req_seq_id = System.currentTimeMillis() + ToolUtil.getRandomNumber(10);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        String req_date = simpleDateFormat.format(new Date());
        String money ="0.5";
        String money ="0.01";
        money =  new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString();
        String a = "{\n" +
                "    \"req_seq_id\": \"" + req_seq_id + "\",\n" +
@@ -56,7 +57,7 @@
                "    \"trans_amt\": \""+money+"\",\n" +
                "    \"goods_desc\": \"test\",\n" +
                "    \"remark\": \"嘉易行\",\n" +
                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBack"+"\",\n" +
                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBackZfb"+"\",\n" +
                "  }";
        // 去掉换行、空格等格式字符
        a = a.replaceAll("\\s", "");
@@ -77,7 +78,7 @@
                "    \"trans_amt\": \""+money+"\",\n" +
                "    \"goods_desc\": \"test\",\n" +
                "    \"remark\": \"嘉易行\",\n" +
                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBack"+"\",\n" +
                "    \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBackZfb"+"\",\n" +
                "  }\n" +
                "}\n";
        System.out.println(p);
@@ -262,6 +263,47 @@
    }
    public static Map<String, Object> payFromUser(String req_seq_id, String req_date, String ord_amt, String huifu_id) throws Exception {
        // 1. 数据初始化,填入对应的商户配置
        MerConfig merConfig = new MerConfig();
//        merConfig.setProcutId(huiFuProperties.getProductId());
//        merConfig.setSysId(huiFuProperties.getSysId());
//        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
//        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
        merConfig.setProcutId("KAZX");
        merConfig.setSysId("6666000182995771");
        merConfig.setRsaPrivateKey("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=");
        merConfig.setRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB");
        BasePay.initWithMerConfig(merConfig);
        ord_amt=new BigDecimal(ord_amt).setScale(2,RoundingMode.HALF_UP).toString();
        // 2.组装请求参数
        Map<String, Object> paramsInfo = new HashMap<>();
        // 请求流水号
        paramsInfo.put("req_seq_id",req_seq_id);
        // 请求日期
        paramsInfo.put("req_date", req_date);
        // 出款方商户号
        paramsInfo.put("out_huifu_id", "6666000182995771");
        // 支付金额
        paramsInfo.put("ord_amt", ord_amt);
        // 分账对象
        paramsInfo.put("acct_split_bunch", "{\"acct_infos\":[{\"div_amt\":\""+ord_amt+"\",\"huifu_id\":\""+huifu_id+"\"}]}");
        // 安全信息
        paramsInfo.put("risk_check_data", "{\"sub_product\":\"1\",\"transfer_type\":\"05\"}");
        // 手续费承担方标识余额支付手续费承担方标识;商户余额支付扣收规则为接口指定承担方时必填!枚举值:&lt;br/&gt;OUT:出款方;&lt;br/&gt;IN:分账接受方。&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:IN&lt;/font&gt;
        paramsInfo.put("trans_fee_take_flag", "OUT");
        // 核验值verify_type不为空时必填。当verify_type&#x3D;SMS时,填写用户收到的短信验证码
//        paramsInfo.put("verify_value", "test");
        // 3. 发起API调用
        Map<String, Object> response = BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false);;
        return response;
    }
    public static String sign(String data, String privateKeyBase64) {
        // Base64 --> Key
        try {
UserJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -12,6 +12,8 @@
import com.stylefeng.guns.core.util.JwtTokenUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.account.controller.AppOrderController;
import com.stylefeng.guns.modular.account.dao.UserWithdrawalMapper;
import com.stylefeng.guns.modular.account.server.UserWithdrawalService;
import com.stylefeng.guns.modular.huifu.biz.DouGongPayUtil;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
@@ -124,6 +126,8 @@
    private boolean pushMinistryOfTransport;
    private String salt = "&a.s";
    @Autowired
    private UserWithdrawalService userWithdrawalService;
    /**
@@ -1072,6 +1076,7 @@
     */
    @Override
    public void payCancelUserBalance(Integer id, String order_id, Integer paymentRecordId, Integer type) throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        UserInfo userInfo = this.selectById(id);
        System.out.println("用户信息"+userInfo);
        PaymentRecord query = paymentRecordService.selectById(paymentRecordId);
@@ -1090,6 +1095,15 @@
                paymentRecordService.updateById(query);
                this.addCoupon(userInfo.getId(), query.getAmount(), userInfo.getCompanyId(), query.getId());//添加优惠券
                String date = simpleDateFormat.format(new Date());
                UserWithdrawal userWithdrawal1 = userWithdrawalService.selectOne(new EntityWrapper<UserWithdrawal>()
                        .eq("phone", userInfo.getPhone()).eq("type", 1)
                        .last("LIMIT 1"));
                if(userWithdrawal1.getHuifuId()!=null){
                    DouGongPayUtil.payFromUser(order_id,date,  query.getAmount().toString(), userWithdrawal1.getHuifuId());
                }
            } else {
                System.err.println("预支付数据异常(userId = " + id + ")");