微信提现

//时间戳
        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 "";
        }
相关文章
相关标签/搜索