//时间戳 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 ""; }