微信提現

//時間戳
        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 "";
        }
相關文章
相關標籤/搜索