1
zj
2025-03-17 c0bc900b8f801c63b6b78350dfd79faea5452fae
src/main/java/com/nq/service/impl/PayServiceImpl.java
@@ -90,12 +90,12 @@
        String reqUrl = "https://api.watchglbpay.com/pay/web";
//        User user = userService.getCurrentRefreshUser(request);
//        if(ObjectUtils.isNotEmpty(user)){
//            GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
//            String lang = request.getHeader("lang");
//            return ServerResponse.createByErrorMsg(new Gson().toJson(ServerResponse.createByErrorCodeMsg(401,googleTranslateUtil.translate("请登录",lang ))));
//        }
        User user = userService.getCurrentRefreshUser(request);
        if(ObjectUtils.isEmpty(user)){
            GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
            String lang = request.getHeader("lang");
            return ServerResponse.createByErrorCodeMsg(401,googleTranslateUtil.translate("请登录",lang ));
        }
        Map<String, String> params = new TreeMap<String, String>();
        //版本号 需同步返回JSON 必填,固定值 1.0
        params.put("version", "1.0");
@@ -103,20 +103,20 @@
//        params.put("goods_name", "用户:"+user.getId()+",充值");
        params.put("goods_name", "用户充值");
        //商户号  平台分配唯一
        params.put("mch_id", "222887002");
        params.put("mch_id", "100789033");
        //商家订单号 保证每笔订单唯一
        params.put("mch_order_no", generatePayOrderId());
        //异步通知地址 不超过 200 字节,支付成功后发起,不能携带参数
        params.put("notify_url", "http://api.durocaspitall.com/user/rechargeCallback.do");
        params.put("notify_url", "https://api.durocaspitall.com/user/rechargeCallback.do");
        // 订单时间  时间格式yyyy-MM-dd HH:mm:ss
        params.put("order_date", getOrderTime());
        //支付类型 请查阅商户后台通道编码
        params.put("pay_type", "104");
        params.put("pay_type", "151");
        //交易金额 以元为单位
        params.put("trade_amount", tradeAmount);
        //商户秘钥必填
        String merchant_key = "8979d78b437948f18c14628ff1ad5f41";
        String merchant_key = "6ef36aa4d88a47a9a177c33c7199fff6";
        String signInfo = SignUtil.sortData(params);
        // 签名   signInfo签名参数排序,  merchant_key商户私钥
@@ -133,9 +133,6 @@
        System.out.println("result值:" + result);
        if(StringUtils.isEmpty(result)){
            return ServerResponse.createByErrorMsg("获取充值链接失败",request);
        }
        // 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
@@ -146,7 +143,7 @@
            return ServerResponse.createByErrorMsg("获取充值链接失败",request);
        }
        PaymentRecharge paymentRecharge = new PaymentRecharge();
        paymentRecharge.setUserId(1);
        paymentRecharge.setUserId(user.getId());
        paymentRecharge.setOrderNo(payResponse.getOrderNo());
        paymentRecharge.setMchOrderNo(payResponse.getMchOrderNo());
        paymentRecharge.setAmount(new BigDecimal(payResponse.getOriAmount()));
@@ -156,7 +153,7 @@
        paymentRecharge.setNotifyUrl(payResponse.getPayInfo());
        paymentRecharge.setPayInfo(payResponse.toString());
        paymentRechargeService.save(paymentRecharge);
        return ServerResponse.createBySuccessMsg(result);
        return ServerResponse.createBySuccess(payResponse.getPayInfo());
    }
    public String generatePayOrderId() {
@@ -642,35 +639,47 @@
    }
    @Override
    public void rechargeCallback(HttpServletResponse response,RechargeCallbackVo rechargeCallbackVo) throws IOException {
        synchronized (rechargeCallbackVo.getOrderNo()){
    public void rechargeCallback(PaymentResponse vo,HttpServletResponse response) throws IOException {
        log.info("充值回调进来了:"+vo.toString());
        synchronized (vo.getOrderNo()){
            PrintWriter pw = response.getWriter();
            if(!rechargeCallbackVo.getTradeResult().equals("1")){
                log.error("充值回调失败:"+rechargeCallbackVo.toString());
                return;
            }
            PaymentRecharge paymentRecharge = paymentRechargeService.getOne(new LambdaQueryWrapper<>(PaymentRecharge.class)
                    .eq(PaymentRecharge::getOrderNo, rechargeCallbackVo.getOrderNo())
                    .eq(PaymentRecharge::getMchOrderNo, rechargeCallbackVo.getMchOrderNo())
                    .eq(PaymentRecharge::getOrderNo, vo.getOrderNo())
                    .eq(PaymentRecharge::getMchOrderNo, vo.getMchOrderNo())
                    .eq(PaymentRecharge::getStatus,1)
                    .last("limit 1")
            );
            if(!vo.getTradeResult().equals("1")){
                paymentRecharge.setStatus(2);
                paymentRecharge.setAmount(new BigDecimal(vo.getOriAmount()));
                paymentRecharge.setPayInfo(vo.toString());
                paymentRechargeService.updateById(paymentRecharge);
                log.error("充值回调失败:"+vo.toString());
                return;
            }
            if(ObjectUtils.isEmpty(paymentRecharge)){
                pw.print("未找到充值订单");
                log.info("未找到充值订单");
                pw.print("error 未找到充值订单");
                return;
            }
            UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class)
                    .eq(UserAssets::getUserId, paymentRecharge.getUserId())
                    .eq(UserAssets::getAccectType, "IN")
            );
            ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), rechargeCallbackVo.getAmount().toString(), "2");
            ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getOriAmount().toString(), "2");
            if(serverResponse.getStatus() == 0){
                paymentRecharge.setStatus(2);
                paymentRecharge.setAmount(new BigDecimal(rechargeCallbackVo.getAmount()));
                paymentRecharge.setPayInfo(rechargeCallbackVo.toString());
                paymentRecharge.setAmount(new BigDecimal(vo.getOriAmount()));
                paymentRecharge.setPayInfo(vo.toString());
                paymentRechargeService.updateById(paymentRecharge);
            }
            log.info("充值回调----完成");
            pw.print("success");
            pw.flush();
            pw.close();
        }
    }