xiaoyong931011
2023-05-09 31c1f349451712141ce826b585313825e0de41bd
src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
@@ -9,6 +9,7 @@
import cc.mrbird.febs.mall.service.ICommonService;
import cc.mrbird.febs.pay.model.LaKaLaBasicReqDate;
import cc.mrbird.febs.pay.model.LaKaLaCreateOrderReqDate;
import cc.mrbird.febs.pay.model.LaKaLaQueryOrderReqDate;
import cc.mrbird.febs.pay.service.LaKaLaService;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.date.DateUtil;
@@ -117,6 +118,10 @@
    public final static String apiUrlCreate = "https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/create";
    public final static String apiUrlCreate_prd = "https://s2.lakala.com/api/v3/ccss/counter/order/create";
    public final static String apiUrlQuery = "https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/query";
    public final static String apiUrlQuery_prd = "https://s2.lakala.com/api/v3/ccss/counter/order/query";
    /**
     * 支付回调地址
     */
@@ -174,6 +179,7 @@
        try {
            String body = JSONUtil.parseObj(laKaLaBasicReqDate).toString();
            log.info("LKL创建请求Body,{}",body);
            String authorization = getAuthorization(body);
            String apiUrlCreateHttp = "";
@@ -196,6 +202,7 @@
            String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING);
            System.out.println("responseStr  " + responseStr);
            log.info("LKL创建请求返回的responseStr,{}",responseStr);
            String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n";
            System.out.println("source  " + source);
@@ -239,6 +246,7 @@
    @Override
    public String payCallback(JSONObject jsonObject) {
        boolean flag = false;
        String orderStatus = jsonObject.get("order_status").toString();
        if(2 != Integer.parseInt(orderStatus)){
            return "FAIL";
@@ -246,37 +254,124 @@
        String orderNo = jsonObject.get("out_order_no").toString();
        LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
        query.eq(MallOrderInfo::getOrderNo, orderNo);
        MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query);
        if ("1".equals(orderInfo.getPayResult())) {
            return "SUCCESS";
        /*
            {"req_time":"1660205634885","version":"3.0","req_data":{"out_order_no":"GHSNVDY8033038232443530","merchant_no":"8222900701107M5"}}
         */
        LaKaLaQueryOrderReqDate laKaLaQueryOrderReqDate = new LaKaLaQueryOrderReqDate();
        laKaLaQueryOrderReqDate.setOut_order_no(orderNo);
        if ("dev".equals(active) || "test".equals(active)) {
            laKaLaQueryOrderReqDate.setMerchant_no(merchant_no);
        }else{
            laKaLaQueryOrderReqDate.setMerchant_no(merchant_no_prd);
        }
        orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
        orderInfo.setPayResult("1");
        orderInfo.setPayTime(new Date());
        String payOrderNo = jsonObject.get("pay_order_no").toString();
        orderInfo.setPayTradeNo(payOrderNo);
        orderInfoMapper.updateById(orderInfo);
        String yyyyMMddHHmmss = DateUtil.format(new Date(), "yyyyMMddHHmmss");
        LaKaLaBasicReqDate laKaLaBasicReqDate = new LaKaLaBasicReqDate();
        laKaLaBasicReqDate.setReq_time(yyyyMMddHHmmss);
        laKaLaBasicReqDate.setVersion("3.0");
        JSONObject jsonObjectQuery = JSONUtil.parseObj(laKaLaQueryOrderReqDate);
        laKaLaBasicReqDate.setReq_data(jsonObjectQuery);
        try {
            String body = JSONUtil.parseObj(laKaLaBasicReqDate).toString();
            log.info("LKL查询请求Body,{}",body);
            String authorization = getAuthorization(body);
        commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue());
            String apiUrlCreateHttp = "";
            if ("dev".equals(active) || "test".equals(active)) {
                apiUrlCreateHttp = apiUrlQuery;
            }else{
                apiUrlCreateHttp = apiUrlQuery_prd;
            }
            HttpResponse response = post(apiUrlCreateHttp , body, authorization);
            if (response.getStatusLine().getStatusCode() != 200) {
                return "FAIL";
            }
        /**
         * 插入一条待处理记录
         * mq处理之后,更新状态
         */
        MallMqRecord mallMqRecord = new MallMqRecord();
        mallMqRecord.setOrderId(orderInfo.getId());
        mallMqRecord.setState(2);
        mallMqRecord.setRetryTimes(2);
        mallMqRecordMapper.insert(mallMqRecord);
        //发送补贴消息
        agentProducer.sendPerkMoneyMsg(orderInfo.getId());
        //发送代理自动升级消息
        agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId());
            String appid = getHeadValue(response, "Lklapi-Appid");
            String lklapiSerial = getHeadValue(response, "Lklapi-Serial");
            String timestamp = getHeadValue(response, "Lklapi-Timestamp");
            String nonce = getHeadValue(response, "Lklapi-Nonce");
            String signature = getHeadValue(response, "Lklapi-Signature");
            String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING);
            System.out.println("responseStr  " + responseStr);
        return "SUCCESS";
            log.info("LKL查询返回的responseStr,{}",responseStr);
            String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n";
            System.out.println("source  " + source);
            String lklCertificatePathNameStr = "";
            if ("dev".equals(active) || "test".equals(active)) {
                lklCertificatePathNameStr = lklCertificatePathName;
            }else{
                lklCertificatePathNameStr = lklCertificatePathName_prd;
            }
            InputStream fileInputStream = resourceLoader.getResource(lklCertificatePathNameStr).getInputStream();
            X509Certificate lklCertificate = loadCertificate(fileInputStream);
            boolean verify = verify(lklCertificate, source.getBytes(ENCODING), signature);
            if (verify) {
                System.out.println("验签成功");
                JSONObject parseObj = JSONUtil.parseObj(responseStr);
                String code = parseObj.get("code").toString();
                if("000000".equals(code)){
                    Object respData = parseObj.get("resp_data");
                    JSONObject respDataChild = JSONUtil.parseObj(respData);
                    String orderStatusQuery = respDataChild.get("order_status").toString();
                    if(2 != Integer.parseInt(orderStatusQuery)){
                        return "FAIL";
                    }
                    Object trade_info_list = respDataChild.get("order_trade_info_list");
                    JSONObject respChild = JSONUtil.parseObj(trade_info_list);
                    String tradeStatus = respChild.get("trade_status").toString();
                    if(!"S".equals(tradeStatus)){
                        return "FAIL";
                    }
                    flag = true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(flag){
            LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
            query.eq(MallOrderInfo::getOrderNo, orderNo);
            MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query);
            if ("1".equals(orderInfo.getPayResult())) {
                return "SUCCESS";
            }
            orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
            orderInfo.setPayResult("1");
            orderInfo.setPayTime(new Date());
            String payOrderNo = jsonObject.get("pay_order_no").toString();
            orderInfo.setPayTradeNo(payOrderNo);
            orderInfoMapper.updateById(orderInfo);
            commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue());
            /**
             * 插入一条待处理记录
             * mq处理之后,更新状态
             */
            MallMqRecord mallMqRecord = new MallMqRecord();
            mallMqRecord.setOrderId(orderInfo.getId());
            mallMqRecord.setState(2);
            mallMqRecord.setRetryTimes(2);
            mallMqRecordMapper.insert(mallMqRecord);
            //发送补贴消息
            agentProducer.sendPerkMoneyMsg(orderInfo.getId());
            //发送代理自动升级消息
            agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId());
            return "SUCCESS";
        }else{
            return "FAIL";
        }
    }
    public static void main(String[] args) {