//時間戳 String times = System.currentTimeMillis() + ""; SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>(); packageParams.put("mch_appid", WxConfigUtil.ZWX_APPID); packageParams.put("mchid", WxConfigUtil.TIXIANMCHID); packageParams.put("nonce_str", times);//時間戳 packageParams.put("partner_trade_no", orderNumber);//編號 packageParams.put("openid", wxOrderPayVo.getOpenId() );//openid packageParams.put("check_name", "NO_CHECK");//openid packageParams.put("amount", Integer.parseInt(total_fee));//價格 packageParams.put("desc", "提現");//支付主體 packageParams.put("spbill_create_ip", WxConfigUtil.TIXIANIP);//服務端的IP //packageParams.put("trade_type", "JSAPI");//這個api有,固定的 //獲取sign String sign = PayCommonUtil.createSign("UTF-8", packageParams, WxConfigUtil.TIXIANKEY);//最後這個是本身設置的32位密鑰 packageParams.put("sign", sign); //轉成XML String requestXML = PayCommonUtil.getRequestXml(packageParams); System.out.println(requestXML); //獲得含有prepay_id的XML try { KeyStore keyStore = KeyStore.getInstance("PKCS12"); FileInputStream instream = new FileInputStream(new File(WxConfigUtil.TIXIANFILE)); // 從配置文件裏讀取證書的路徑信息 keyStore.load(instream, WxConfigUtil.TIXIANMCHID.toCharArray());// 證書密碼是商戶ID instream.close(); SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, WxConfigUtil.TIXIANMCHID.toCharArray()).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); String data = "<xml><mch_appid>"; data += WxConfigUtil.ZWX_APPID + "</mch_appid><mchid>"; // APPID data += WxConfigUtil.TIXIANMCHID + "</mchid><nonce_str>"; // 商戶ID data += times + "</nonce_str><partner_trade_no>"; // 隨機字符串 data += orderNumber + "</partner_trade_no><openid>"; // 訂單號 data += wxOrderPayVo.getOpenId() + "</openid><check_name>NO_CHECK</check_name><amount>"; // 是否強制實名驗證 data += Integer.parseInt(total_fee) + "</amount><desc>"; // 企業付款金額,單位爲分 data += "越用越好-提現" + "</desc><spbill_create_ip>"; // 企業付款操做說明信息。必填。 data += WxConfigUtil.TIXIANIP + "</spbill_create_ip><sign>";// 調用接口的機器Ip地址 data += sign + "</sign></xml>";// 簽名 String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; HttpPost httpost = new HttpPost(url); httpost.addHeader("Connection", "keep-alive"); httpost.addHeader("Accept", "*/*"); httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); httpost.addHeader("Host", "api.mch.weixin.qq.com"); httpost.addHeader("X-Requested-With", "XMLHttpRequest"); httpost.addHeader("Cache-Control", "max-age=0"); httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); httpost.setEntity(new StringEntity(data, "UTF-8")); CloseableHttpResponse response = httpclient.execute(httpost); HttpEntity entity = response.getEntity(); String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8"); EntityUtils.consume(entity); log.info("----微信提現錯誤是什麼--"); log.info(jsonStr); // 把返回的字符串解釋成DOM節點 Document dom = DocumentHelper.parseText(jsonStr); Element root = dom.getRootElement(); String returnCode = root.element("result_code").getText(); // 獲取返回代碼 System.out.println(returnCode); String resXml = HttpUtil.postData("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers", requestXML); System.out.println(resXml); //解析XML存入Map Map map = XMLUtil.doXMLParse(resXml); System.out.println(map); String return_code = (String) map.get("return_code"); //獲得prepay_id String prepay_id = (String) map.get("prepay_id"); SortedMap<Object, Object> packageP = new TreeMap<Object, Object>(); packageP.put("appId", WxConfigUtil.ZWX_APPID); packageP.put("nonceStr", times);//時間戳 packageP.put("package", "prepay_id=" + prepay_id);//必須把package寫成 "prepay_id="+prepay_id這種形式 packageP.put("signType", "MD5");//paySign加密 packageP.put("timeStamp", (System.currentTimeMillis() / 1000) + ""); //獲得paySign String paySign = PayCommonUtil.createSign("UTF-8", packageP, WxConfigUtil.KEY); packageP.put("paySign", paySign); //將packageP數據返回給小程序 Gson gson = new Gson(); String json = gson.toJson(packageP); return json; } catch (Exception ex) { ex.printStackTrace(); return ""; }