微信查詢訂單

直接貼代碼 邏輯很簡單 一些小接口沒有 查詢另外一篇博客: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("查詢訂單,微信已經回調過接口 數據庫狀態已改變,將狀態返回給前端");
                }
            }
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章