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