当前位置 博文首页 > 小小舍的博客:springboot对接微信支付——查询订单

    小小舍的博客:springboot对接微信支付——查询订单

    作者:[db:作者] 时间:2021-08-09 18:52

    ?主要代码:

    service接口

     ServiceCommonInfo<Object> orderQuery(WxPayDto dto, HttpServletRequest request) throws Exception;

    service接口实现

    /**
        * @Author: xxs
        * @param dto
         * @param request
        * @Date: 2021/8/2 16:19
        * @Description:  订单查询
        * @Version: 2.9
        * @Return: void
        */
        @Override
        public ServiceCommonInfo<Object> orderQuery(WxPayDto dto, HttpServletRequest request) throws Exception {
            String payOrderNo = dto.getPayOrderNo();
            //这里主要是确认自己系统存储订单状态是否是已支付,如果是就不用查询啦
    
            String nonce_str = CommUtils.getRandomStringByLength(32);
            Map<String, String> packageParams = new HashMap<>();
            packageParams.put("appid", appId);
            packageParams.put("mch_id",mch_id);
            packageParams.put("nonce_str", nonce_str);
            packageParams.put("out_trade_no", payOrderNo);
            packageParams = CommUtils.paraFilter(packageParams);
            String prestr = CommUtils.createLinkString(packageParams);
            String sign = CommUtils.sign(prestr, key, "utf-8").toUpperCase();
            packageParams.put("sign", sign);
            logger.info("查询订单请求签名:" + sign );
            String xml = "<xml version='1.0' encoding='gbk'>" + "<appid>" + appId + "</appid>"
                    + "<mch_id>" + mch_id + "</mch_id>"
                    + "<nonce_str>" + nonce_str + "</nonce_str>"
                    + "<out_trade_no>" + payOrderNo + "</out_trade_no>"
                    + "<nonce_str>" + nonce_str + "</nonce_str>"
                    + "<sign>" + sign + "</sign>"
                    + "</xml>";
            String result = CommUtils.httpRequest(WeChatConstants.orderQueryUrl, "POST", xml);
            Map map = CommUtils.doXMLParse(result);
            Object returnCode = map.get("return_code");
            Object result_code = map.get("result_code");
            logger.info("查询订单return_code:" + returnCode+",result_code:"+result_code );
            String statusStr = "";
            Integer status = null;
            if("SUCCESS".equals(returnCode) && "SUCCESS".equals(result_code)){
                Object trade_state = map.get("trade_state");
                String time_end = (String) map.get("time_end");//支付完成时间
                Map<String,Object> mapData = new HashMap<>();
                if ("SUCCESS".equals(trade_state)){
                    logger.info("支付成功,outTradeNo:"+payOrderNo);
                    statusStr = "订单支付成功";
                    status = CommonConstants.PAY_STATUS_YES;
                }
                if ("REFUND".equals(trade_state)){
                    logger.info("转入退款,outTradeNo:"+payOrderNo);
                    statusStr = "订单转入退款";
                }
                if ("NOTPAY".equals(trade_state)){
                    logger.info("未支付,outTradeNo:"+payOrderNo);
                    statusStr = "订单未支付";
                    status = CommonConstants.PAY_STATUS_NO;
                }
                if ("CLOSED".equals(trade_state)){
                    logger.info("已关闭,outTradeNo:"+payOrderNo);
                    statusStr = "订单已关闭";
                    status = CommonConstants.PAY_STATUS_CLOSE;
                }
                if ("REVOKED".equals(trade_state)){
                    logger.info("已撤销(刷卡支付),outTradeNo:"+payOrderNo);
                    statusStr = "已撤销(刷卡支付)";
                }
                if ("USERPAYING".equals(trade_state)){
                    logger.info("用户支付中,outTradeNo:"+payOrderNo);
                    statusStr = "用户支付中";
                    status = CommonConstants.PAY_STATUS_ING;
                }
                if ("PAYERROR".equals(trade_state)){
                    logger.info("支付失败(其他原因,如银行返回失败),outTradeNo:"+payOrderNo);
                    statusStr = "订单支付失败(其他原因,如银行返回失败)";
                    status = CommonConstants.PAY_STATUS_FAIL;
                }
                //业务处理
    
                mapData.put("status",status);
                return ServiceCommonInfo.success(statusStr, mapData);
            }
            return ServiceCommonInfo.serviceFail("查询失败", null);
        }

    cs