微信查询订单

直接贴代码 逻辑很简单 一些小接口没有 查询另外一篇博客:https://www.cnblogs.com/yi1036943655/p/7211275.html

{
            //根据 商户订单号 查询DB
            OrderInfo orderInfo = orderInfoMapper.selectByOutTradeNo(outTradeNo);
            logger.info("根据商户订单号 查询订单数据JSON:" + JSONObject.toJSONString(orderInfo));
            if(orderInfo != null){
                //查询 订单 成功
                //判断订单状态
                if(1 == orderInfo.getPayStatus()){
                    //等待支付 证明微信未回调我们
                    logger.info("订单状态为:等待支付 查询微信端是否支付成功");
                    //创建hashmap(查询订单)
                    SortedMap<String, String> paraMap = new TreeMap<String, String>();
                    //设置随机字符串
                    String nonceStr = UUID.randomUUID().toString().replaceAll("-", "");
                    //设置请求参数(小程序ID)
                    paraMap.put("appid", appid);
                    //设置请求参数(商户号)
                    paraMap.put("mch_id", mch_id);
                    //设置请求参数(商户订单号)
                    paraMap.put("out_trade_no", outTradeNo);
                    //设置请求参数(随机字符串)
                    paraMap.put("nonce_str", nonceStr);
                    //调用逻辑传入参数按照字段名的 ASCII 码从小到大排序(字典序)
                    String stringA = formatUrlMap(paraMap, false, false);
                    //第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。(签名)
                    String sign = MD5Util.MD5(stringA+"&key="+key).toUpperCase();
                    //将参数 编写XML格式
                    StringBuffer paramBuffer = new StringBuffer();
                    paramBuffer.append("<xml>");
                    paramBuffer.append("<appid>"+appid+"</appid>");
                    paramBuffer.append("<mch_id>"+mch_id+"</mch_id>");
                    paramBuffer.append("<out_trade_no>"+paraMap.get("out_trade_no")+"</out_trade_no>");
                    paramBuffer.append("<nonce_str>"+paraMap.get("nonce_str")+"</nonce_str>");
                    paramBuffer.append("<sign>"+sign+"</sign>");
                    paramBuffer.append("</xml>");
                    try{
                        //发送请求(POST)(获得数据包ID)(这有个注意的地方 如果不转码成ISO8859-1则会告诉你body不是UTF8编码 就算你改成UTF8编码也一样不好使 所以修改成ISO8859-1)
                        Map<String,String> map = doXMLParse(getRemotePortData(selectOrderUrl, new String(paramBuffer.toString().getBytes(), "ISO8859-1")));
                        logger.info("查询微信订单接口 返回结果 JSON格式:" + JSONObject.toJSONString(map));
                        //避免null
                        if(map != null){
                            //判断是否成功
                            String return_code = map.get("return_code");
                            String result_code = map.get("result_code");
                            if("SUCCESS".equals(return_code) && "SUCCESS".equals(result_code)){
                                logger.info("查询微信订单接口 查询成功");
                                outTradeNo = map.get("out_trade_no");
                                logger.info("微信端返回 商户订单号 " + outTradeNo);
                                String userId = sessionUserInfo.getUserId();
                                String tradeState = map.get("trade_state");
                                logger.info("微信端返回 订单状态:" + tradeState);
                                String tradeStateDesc = map.get("trade_state_desc");
                                logger.info("微信端返回 订单状态描述:" + tradeStateDesc);
                                String payStatus = null;
                            }
                        }
                    }catch (Exception e){
                        logger.info("查询微信订单异常:" + e.getMessage());
                    }
                }else{
                    logger.info("查询订单,微信已经回调过接口 数据库状态已改变,将状态返回给前端");
                }
            }
        }

 

posted @ 2019-06-05 15:23  一只奋斗的猪  阅读(449)  评论(0编辑  收藏  举报