springboot对接微信支付——查询订单

 主要代码:

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);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值