From d1f26741bddf6f512d62c0100d42c52be8d37e76 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期六, 06 二月 2021 15:35:40 +0800
Subject: [PATCH] 工具类优化

---
 utils/src/main/java/org/yeshi/utils/wx/WXPayUtil.java |  637 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 360 insertions(+), 277 deletions(-)

diff --git a/utils/src/main/java/org/yeshi/utils/wx/WXPayUtil.java b/utils/src/main/java/org/yeshi/utils/wx/WXPayUtil.java
index 9c3b6c0..6ad6b03 100644
--- a/utils/src/main/java/org/yeshi/utils/wx/WXPayUtil.java
+++ b/utils/src/main/java/org/yeshi/utils/wx/WXPayUtil.java
@@ -1,277 +1,360 @@
-package org.yeshi.utils.wx;
-
-import java.io.InputStream;
-import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.yeshi.utils.HttpUtil;
-import org.yeshi.utils.StringUtil;
-import org.yeshi.utils.entity.wx.RedPackParams;
-import org.yeshi.utils.entity.wx.WXAPPInfo;
-import org.yeshi.utils.entity.wx.WXPlaceOrderParams;
-import org.yeshi.utils.exception.WXOrderException;
-import org.yeshi.utils.exception.WXPlaceOrderParamsException;
-
-/**
- * 寰俊鏀粯甯姪绫�
- * 
- * @author Administrator
- *
- */
-public class WXPayUtil {
-
-	/**
-	 * 浠樻鍒伴浂閽�
-	 * 
-	 * @param appId
-	 * @param openId
-	 * @param mchId
-	 * @param key
-	 * @param pwd
-	 * @param cert
-	 * @param orderNo
-	 * @param money
-	 * @param desc
-	 * @param ip
-	 * @return
-	 */
-	public static String payToOpenId(String appId, String openId, String mchId, String key, String pwd,
-			InputStream cert, String orderNo, BigDecimal money, String desc, String ip) {
-		Map<String, String> map = new HashMap<>();
-		map.put("mch_appid", appId);
-		map.put("mchid", mchId);
-		map.put("nonce_str", StringUtil.getRandomCode(32));
-		map.put("partner_trade_no", orderNo);
-		map.put("openid", openId);
-		map.put("check_name", "NO_CHECK");
-		map.put("amount", money.multiply(new BigDecimal(100)).intValue() + "");
-		map.put("desc", desc);
-		map.put("spbill_create_ip", ip);
-		map.put("sign", WXUtil.getSignMD5(map, key));
-		String entity = WXUtil.loadWXMessage(map);
-		try {
-			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers",
-					entity, pwd, cert);
-			System.out.println(result);
-			return result;
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	/**
-	 * 鍙戞斁寰俊绾㈠寘
-	 * 
-	 * @param params
-	 * @param pwd
-	 * @param cert
-	 * @return
-	 */
-	public static String redPackToOpenId(RedPackParams params, String pwd, InputStream cert) {
-		// 杞寲鎴愬垎
-		BigDecimal money = params.getMoney();
-		money = money.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_DOWN);
-
-		Map<String, String> map = new HashMap<>();
-		map.put("nonce_str", StringUtil.getRandomCode(32));
-		map.put("mch_billno", params.getBillno());
-		map.put("mch_id", params.getMchId());
-		map.put("wxappid", params.getWxappId());
-		map.put("send_name", params.getSendName());
-		map.put("re_openid", params.getOpenid());
-		map.put("total_amount", money.toString());
-		map.put("total_num", params.getTotalNum() + "");
-		map.put("wishing", params.getWishing());
-		map.put("client_ip", params.getClientIp());
-		map.put("act_name", params.getActName());
-		map.put("remark", params.getRemark());
-
-		if (!StringUtil.isNullOrEmpty(params.getSceneId()))
-			map.put("scene_id", params.getSceneId());
-
-		if (!StringUtil.isNullOrEmpty(params.getRiskInfo()))
-			map.put("risk_info", params.getRiskInfo());
-
-		map.put("sign", WXUtil.getSignMD5(map, params.getKey()));
-		String entity = WXUtil.loadWXMessage(map);
-		try {
-			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack", entity,
-					pwd, cert);
-			return result;
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	/**
-	 * 鏌ヨ绾㈠寘棰嗗彇璁板綍
-	 * 
-	 * @param billno
-	 *            鍟嗘埛璁㈠崟鍙�
-	 * @param mchId
-	 *            鍟嗘埛鍙�
-	 * @param key
-	 * @param appId
-	 *            Appid
-	 * @param pwd
-	 * @param cert
-	 * @return
-	 */
-	public static String getRedPackRecord(String billno, String mchId, String appId, String key, String pwd,
-			InputStream cert) {
-		Map<String, String> map = new HashMap<>();
-		map.put("mch_billno", billno);
-		map.put("mch_id", mchId);
-		map.put("wxappid", appId);
-		map.put("bill_type", "MCHT");
-		map.put("nonce_str", StringUtil.getRandomCode(32));
-		map.put("sign", WXUtil.getSignMD5(map, key));
-		String entity = WXUtil.loadWXMessage(map);
-		try {
-			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo", entity, pwd,
-					cert);
-			return result;
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	/**
-	 * 寰俊鏀粯缁熶竴涓嬪崟
-	 * 
-	 * @param params
-	 * @return
-	 * @throws WXPlaceOrderParamsException
-	 */
-	public static Map<String, String> produceOrder(WXPlaceOrderParams params) throws WXPlaceOrderParamsException {
-		if (params == null)
-			throw new WXPlaceOrderParamsException(1, "璇蜂紶鍏ヤ笅鍗曞弬鏁�");
-
-		if (params.getInfo() == null)
-			throw new WXPlaceOrderParamsException(2, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�");
-
-		if (StringUtil.isNullOrEmpty(params.getInfo().getAppId()))
-			throw new WXPlaceOrderParamsException(201, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-appId");
-		if (StringUtil.isNullOrEmpty(params.getInfo().getAppSecret()))
-			throw new WXPlaceOrderParamsException(202, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-appSecret");
-		if (StringUtil.isNullOrEmpty(params.getInfo().getMchId()))
-			throw new WXPlaceOrderParamsException(203, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-mchId");
-		if (StringUtil.isNullOrEmpty(params.getInfo().getMchKey()))
-			throw new WXPlaceOrderParamsException(204, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-mchKey");
-		if (StringUtil.isNullOrEmpty(params.getBody()))
-			throw new WXPlaceOrderParamsException(3, "璇蜂紶鍏ody");
-
-		if (StringUtil.isNullOrEmpty(params.getOrderNo()))
-			throw new WXPlaceOrderParamsException(4, "璇蜂紶鍏rderNo");
-
-		if (params.getFee() == null)
-			throw new WXPlaceOrderParamsException(5, "璇蜂紶鍏ee");
-
-		if (StringUtil.isNullOrEmpty(params.getIp()))
-			throw new WXPlaceOrderParamsException(6, "璇蜂紶鍏p");
-
-		if (StringUtil.isNullOrEmpty(params.getNotifyUrl()))
-			throw new WXPlaceOrderParamsException(7, "璇蜂紶鍏otifyUrl");
-
-		if (StringUtil.isNullOrEmpty(params.getTradeType()))
-			throw new WXPlaceOrderParamsException(8, "璇蜂紶鍏radeType");
-
-		// if (StringUtil.isNullOrEmpty(params.getOpenId()))
-		// throw new WXPlaceOrderParamsException(9, "璇蜂紶鍏penId");
-
-		Map<String, String> map = new HashMap<String, String>();
-		map.put("appid", params.getInfo().getAppId());
-		map.put("mch_id", params.getInfo().getMchId());
-		map.put("nonce_str", StringUtil.getRandomCode(32));
-		map.put("body", params.getBody());
-		map.put("out_trade_no", params.getOrderNo());
-		map.put("total_fee", "" + params.getFee().multiply(new BigDecimal(100)).intValue());
-		map.put("spbill_create_ip", params.getIp());
-		map.put("notify_url", params.getNotifyUrl());
-		map.put("trade_type", params.getTradeType());
-		if (!StringUtil.isNullOrEmpty(params.getOpenId()))
-			map.put("openid", params.getOpenId());
-		map.put("sign", WXUtil.getSignMD5(map, params.getInfo().getMchKey()));
-
-		String entity = WXUtil.loadWXMessage(map);
-
-		String result = HttpUtil.post("https://api.mch.weixin.qq.com/pay/unifiedorder", entity);
-		System.out.println("缁熶竴涓嬪崟缁撴灉:" + result);
-		Map<String, String> resultMap = WXUtil.parseXML(result);
-
-		return resultMap;
-	}
-
-	/**
-	 * 璁㈠崟閫�娆�
-	 * 
-	 * @param orderNo-璁㈠崟鍙�
-	 * @param orderMoney-璁㈠崟鎬昏祫閲�
-	 * @param refundMoney-閫�娆鹃噾棰�
-	 * @param reason-閫�娆惧師鍥�
-	 * @param appInfo
-	 * @param pwd-璇佷功瀵嗙爜
-	 * @param cert-璇佷功
-	 */
-	public static boolean refund(String orderNo, BigDecimal orderMoney, BigDecimal refundMoney, String reason,
-			WXAPPInfo appInfo, String pwd, InputStream cert) throws WXOrderException {
-		Map<String, String> map = new HashMap<String, String>();
-		map.put("appid", appInfo.getAppId());
-		map.put("mch_id", appInfo.getMchId());
-		map.put("nonce_str", StringUtil.getRandomCode(32));
-		map.put("out_trade_no", orderNo);
-		map.put("out_refund_no", orderNo);// 鍟嗘埛閫�娆惧崟鍙�
-		map.put("total_fee", orderMoney.multiply(new BigDecimal(100)).intValue() + "");// 璁㈠崟閲戦
-		map.put("refund_fee", orderMoney.multiply(new BigDecimal(100)).intValue() + "");// 閫�娆鹃噾棰�
-		if (!StringUtil.isNullOrEmpty(reason))
-			map.put("refund_desc", reason);
-		map.put("sign", WXUtil.getSignMD5(map, appInfo.getMchKey()));
-		try {
-			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/secapi/pay/refund",
-					WXUtil.loadWXMessage(map), pwd, cert);
-			System.out.println("璁㈠崟閫�娆剧粨鏋�:" + result);
-			Map<String, String> resultMap = WXUtil.parseXML(result);
-			if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code"))
-					&& "SUCCESS".equalsIgnoreCase(resultMap.get("result_code")))
-				return true;
-			throw new WXOrderException(100, "寰俊鏀粯鎺ュ彛鍑洪敊:" + result);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return false;
-	}
-
-	/**
-	 * 鏌ヨ璁㈠崟鍙锋槸鍚︽敮浠樻垚鍔�
-	 * 
-	 * @param orderNo
-	 * @param app
-	 * @return
-	 * @throws WXOrderException
-	 */
-	public static boolean isPaySuccess(String orderNo, WXAPPInfo app) throws WXOrderException {
-		Map<String, String> map = new HashMap<String, String>();
-		map.put("appid", app.getAppId());
-		map.put("mch_id", app.getMchId());
-		map.put("nonce_str", StringUtil.getRandomCode(32));
-		map.put("out_trade_no", orderNo);
-		map.put("sign", WXUtil.getSignMD5(map, app.getMchKey()));
-		String result = HttpUtil.post("https://api.mch.weixin.qq.com/pay/orderquery", WXUtil.loadWXMessage(map));
-		System.out.println("璁㈠崟鏌ヨ缁撴灉:" + result);
-		Map<String, String> resultMap = WXUtil.parseXML(result);
-		if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code"))
-				&& "SUCCESS".equalsIgnoreCase(resultMap.get("result_code"))) {
-			if ("SUCCESS".equalsIgnoreCase(resultMap.get("trade_state")))// 鏀粯鎴愬姛
-				return true;
-			else
-				return false;
-		} else {
-			throw new WXOrderException(100, "寰俊鏀粯鎺ュ彛鍑洪敊:" + result);
-		}
-	}
-
-}
+package org.yeshi.utils.wx;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.dom4j.DocumentException;
+import org.yeshi.utils.HttpUtil;
+import org.yeshi.utils.StringUtil;
+import org.yeshi.utils.entity.wx.RedPackParams;
+import org.yeshi.utils.entity.wx.WXAPPInfo;
+import org.yeshi.utils.entity.wx.WXPlaceOrderParams;
+import org.yeshi.utils.exception.WXOrderException;
+import org.yeshi.utils.exception.WXPlaceOrderParamsException;
+
+/**
+ * 寰俊鏀粯甯姪绫�
+ * 
+ * @author Administrator
+ *
+ */
+public class WXPayUtil {
+
+	private static String post(String url, String entity) {
+		HttpClient client = new HttpClient();
+		PostMethod method = new PostMethod(url);
+		method.setRequestBody(entity);
+		try {
+			client.executeMethod(method);
+			return method.getResponseBodyAsString();
+		} catch (HttpException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+
+	/**
+	 * 浠樻鍒伴浂閽�
+	 * 
+	 * @param appId
+	 * @param openId
+	 * @param mchId
+	 * @param key
+	 * @param pwd
+	 * @param cert
+	 * @param orderNo
+	 * @param money
+	 * @param desc
+	 * @param ip
+	 * @return
+	 */
+	public static String payToOpenId(String appId, String openId, String mchId, String key, String pwd,
+			InputStream cert, String orderNo, BigDecimal money, String desc, String ip) {
+		Map<String, String> map = new HashMap<>();
+		map.put("mch_appid", appId);
+		map.put("mchid", mchId);
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("partner_trade_no", orderNo);
+		map.put("openid", openId);
+		map.put("check_name", "NO_CHECK");
+		map.put("amount", money.multiply(new BigDecimal(100)).intValue() + "");
+		map.put("desc", desc);
+		map.put("spbill_create_ip", ip);
+		map.put("sign", WXUtil.getSignMD5(map, key));
+		String entity = WXUtil.loadWXMessage(map);
+		try {
+			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers",
+					entity, pwd, cert);
+			System.out.println(result);
+			return result;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 鍙戞斁寰俊绾㈠寘
+	 * 
+	 * @param params
+	 * @param pwd
+	 * @param cert
+	 * @return
+	 */
+	public static String redPackToOpenId(RedPackParams params, String pwd, InputStream cert) {
+		// 杞寲鎴愬垎
+		BigDecimal money = params.getMoney();
+		money = money.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_DOWN);
+
+		Map<String, String> map = new HashMap<>();
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("mch_billno", params.getBillno());
+		map.put("mch_id", params.getMchId());
+		map.put("wxappid", params.getWxappId());
+		map.put("send_name", params.getSendName());
+		map.put("re_openid", params.getOpenid());
+		map.put("total_amount", money.toString());
+		map.put("total_num", params.getTotalNum() + "");
+		map.put("wishing", params.getWishing());
+		map.put("client_ip", params.getClientIp());
+		map.put("act_name", params.getActName());
+		map.put("remark", params.getRemark());
+
+		if (!StringUtil.isNullOrEmpty(params.getSceneId()))
+			map.put("scene_id", params.getSceneId());
+
+		if (!StringUtil.isNullOrEmpty(params.getRiskInfo()))
+			map.put("risk_info", params.getRiskInfo());
+
+		map.put("sign", WXUtil.getSignMD5(map, params.getKey()));
+		String entity = WXUtil.loadWXMessage(map);
+		try {
+			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack", entity,
+					pwd, cert);
+			return result;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 鏌ヨ绾㈠寘棰嗗彇璁板綍
+	 * 
+	 * @param billno
+	 *            鍟嗘埛璁㈠崟鍙�
+	 * @param mchId
+	 *            鍟嗘埛鍙�
+	 * @param key
+	 * @param appId
+	 *            Appid
+	 * @param pwd
+	 * @param cert
+	 * @return
+	 */
+	public static String getRedPackRecord(String billno, String mchId, String appId, String key, String pwd,
+			InputStream cert) {
+		Map<String, String> map = new HashMap<>();
+		map.put("mch_billno", billno);
+		map.put("mch_id", mchId);
+		map.put("wxappid", appId);
+		map.put("bill_type", "MCHT");
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("sign", WXUtil.getSignMD5(map, key));
+		String entity = WXUtil.loadWXMessage(map);
+		try {
+			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo", entity, pwd,
+					cert);
+			return result;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 寰俊鏀粯缁熶竴涓嬪崟
+	 * 
+	 * @param params
+	 * @return
+	 * @throws WXPlaceOrderParamsException
+	 */
+	public static Map<String, String> produceOrder(WXPlaceOrderParams params) throws WXPlaceOrderParamsException {
+		if (params == null)
+			throw new WXPlaceOrderParamsException(1, "璇蜂紶鍏ヤ笅鍗曞弬鏁�");
+
+		if (params.getApp() == null)
+			throw new WXPlaceOrderParamsException(2, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�");
+
+		if (StringUtil.isNullOrEmpty(params.getApp().getAppId()))
+			throw new WXPlaceOrderParamsException(201, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-appId");
+		if (StringUtil.isNullOrEmpty(params.getApp().getAppSecret()))
+			throw new WXPlaceOrderParamsException(202, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-appSecret");
+		if (StringUtil.isNullOrEmpty(params.getApp().getMchId()))
+			throw new WXPlaceOrderParamsException(203, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-mchId");
+		if (StringUtil.isNullOrEmpty(params.getApp().getMchKey()))
+			throw new WXPlaceOrderParamsException(204, "璇蜂紶鍏ヤ笅鍗曞簲鐢ㄤ俊鎭�-mchKey");
+		if (StringUtil.isNullOrEmpty(params.getBody()))
+			throw new WXPlaceOrderParamsException(3, "璇蜂紶鍏ody");
+
+		if (StringUtil.isNullOrEmpty(params.getOrderNo()))
+			throw new WXPlaceOrderParamsException(4, "璇蜂紶鍏rderNo");
+
+		if (params.getFee() == null)
+			throw new WXPlaceOrderParamsException(5, "璇蜂紶鍏ee");
+
+		if (StringUtil.isNullOrEmpty(params.getIp()))
+			throw new WXPlaceOrderParamsException(6, "璇蜂紶鍏p");
+
+		if (StringUtil.isNullOrEmpty(params.getNotifyUrl()))
+			throw new WXPlaceOrderParamsException(7, "璇蜂紶鍏otifyUrl");
+
+		if (StringUtil.isNullOrEmpty(params.getTradeType()))
+			throw new WXPlaceOrderParamsException(8, "璇蜂紶鍏radeType");
+
+		// if (StringUtil.isNullOrEmpty(params.getOpenId()))
+		// throw new WXPlaceOrderParamsException(9, "璇蜂紶鍏penId");
+
+		Map<String, String> map = new HashMap<String, String>();
+		map.put("appid", params.getApp().getAppId());
+		map.put("mch_id", params.getApp().getMchId());
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("body", params.getBody());
+		map.put("out_trade_no", params.getOrderNo());
+		map.put("total_fee", "" + params.getFee().multiply(new BigDecimal(100)).intValue());
+		map.put("spbill_create_ip", params.getIp());
+		map.put("notify_url", params.getNotifyUrl());
+		map.put("trade_type", params.getTradeType());
+		if (!StringUtil.isNullOrEmpty(params.getOpenId()))
+			map.put("openid", params.getOpenId());
+		map.put("sign", WXUtil.getSignMD5(map, params.getApp().getMchKey()));
+
+		String entity = WXUtil.loadWXMessage(map);
+
+		String result = HttpUtil.post("https://api.mch.weixin.qq.com/pay/unifiedorder", entity);
+		try {
+			System.out.println("缁熶竴涓嬪崟缁撴灉:" + new String(result.getBytes("GBK"), "UTF-8"));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		Map<String, String> resultMap = WXUtil.parseXML(result);
+
+		return resultMap;
+	}
+
+	/**
+	 * 璁㈠崟閫�娆�
+	 * 
+	 * @param orderNo-璁㈠崟鍙�
+	 * @param orderMoney-璁㈠崟鎬昏祫閲�
+	 * @param refundMoney-閫�娆鹃噾棰�
+	 * @param reason-閫�娆惧師鍥�
+	 * @param appInfo
+	 * @param pwd-璇佷功瀵嗙爜
+	 * @param cert-璇佷功
+	 */
+	public static boolean refund(String orderNo, BigDecimal orderMoney, BigDecimal refundMoney, String reason,
+			WXAPPInfo appInfo, String pwd, InputStream cert) throws WXOrderException {
+		Map<String, String> map = new HashMap<String, String>();
+		map.put("appid", appInfo.getAppId());
+		map.put("mch_id", appInfo.getMchId());
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("out_trade_no", orderNo);
+		map.put("out_refund_no", orderNo);// 鍟嗘埛閫�娆惧崟鍙�
+		map.put("total_fee", orderMoney.multiply(new BigDecimal(100)).intValue() + "");// 璁㈠崟閲戦
+		map.put("refund_fee", orderMoney.multiply(new BigDecimal(100)).intValue() + "");// 閫�娆鹃噾棰�
+		if (!StringUtil.isNullOrEmpty(reason))
+			map.put("refund_desc", reason);
+		map.put("sign", WXUtil.getSignMD5(map, appInfo.getMchKey()));
+		try {
+			String result = HttpUtil.httpsPost("https://api.mch.weixin.qq.com/secapi/pay/refund",
+					WXUtil.loadWXMessage(map), pwd, cert);
+			System.out.println("璁㈠崟閫�娆剧粨鏋�:" + result);
+			Map<String, String> resultMap = WXUtil.parseXML(result);
+			if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code"))
+					&& "SUCCESS".equalsIgnoreCase(resultMap.get("result_code")))
+				return true;
+			throw new WXOrderException(100, "寰俊鏀粯鎺ュ彛鍑洪敊:" + result);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return false;
+	}
+
+	/**
+	 * 鏌ヨ璁㈠崟鍙锋槸鍚︽敮浠樻垚鍔�
+	 * 
+	 * @param orderNo
+	 * @param app
+	 * @return
+	 * @throws WXOrderException
+	 */
+	public static boolean isPaySuccess(String orderNo, WXAPPInfo app) throws WXOrderException {
+		Map<String, String> map = new HashMap<String, String>();
+		map.put("appid", app.getAppId());
+		map.put("mch_id", app.getMchId());
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("out_trade_no", orderNo);
+		map.put("sign", WXUtil.getSignMD5(map, app.getMchKey()));
+		String result = HttpUtil.post("https://api.mch.weixin.qq.com/pay/orderquery", WXUtil.loadWXMessage(map));
+		try {
+			try {
+				result = new String(result.getBytes("GBK"), "UTF-8");
+			} catch (UnsupportedEncodingException e1) {
+				e1.printStackTrace();
+			}
+			System.out.println("璁㈠崟鏌ヨ缁撴灉:" + new String(result.getBytes("GBK"), "UTF-8"));
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		Map<String, String> resultMap = null;
+		try {
+			resultMap = WXUtil.parseXML(result);
+		} catch (Exception e) {
+			try {
+				result = new String(result.getBytes("GBK"), "UTF-8");
+			} catch (UnsupportedEncodingException e1) {
+				e1.printStackTrace();
+			}
+			resultMap = WXUtil.parseXML(result);
+		}
+		if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code"))
+				&& "SUCCESS".equalsIgnoreCase(resultMap.get("result_code"))) {
+			if ("SUCCESS".equalsIgnoreCase(resultMap.get("trade_state")))// 鏀粯鎴愬姛
+				return true;
+			else
+				return false;
+		} else {
+			throw new WXOrderException(100, "寰俊鏀粯鎺ュ彛鍑洪敊:" + result);
+		}
+	}
+
+	/**
+	 * 
+	 * @param refundOrderNo
+	 *            -閫�娆惧崟鍙�
+	 * @param app
+	 * @return
+	 * @throws WXOrderException
+	 */
+	public static boolean isRefundSuccess(String refundOrderNo, WXAPPInfo app) throws WXOrderException {
+		Map<String, String> map = new HashMap<String, String>();
+		map.put("appid", app.getAppId());
+		map.put("mch_id", app.getMchId());
+		map.put("nonce_str", StringUtil.getRandomCode(32));
+		map.put("out_refund_no", refundOrderNo);
+		map.put("sign", WXUtil.getSignMD5(map, app.getMchKey()));
+		String result = post("https://api.mch.weixin.qq.com/pay/refundquery", WXUtil.loadWXMessage(map));
+		System.out.println("璁㈠崟鏌ヨ缁撴灉:" + result);
+		Map<String, String> resultMap = null;
+		try {
+			resultMap = WXUtil.parseXML(result);
+		} catch (Throwable e) {
+			try {
+				result = new String(result.getBytes("GBK"), "UTF-8");
+			} catch (UnsupportedEncodingException e1) {
+				e1.printStackTrace();
+			}
+			resultMap = WXUtil.parseXML(result);
+		}
+		if ("SUCCESS".equalsIgnoreCase(resultMap.get("return_code"))
+				&& "SUCCESS".equalsIgnoreCase(resultMap.get("result_code"))) {
+			if ("SUCCESS".equalsIgnoreCase(resultMap.get("refund_status_0")))// 閫�娆炬垚鍔�
+				return true;
+			else
+				return false;
+		} else {
+			throw new WXOrderException(100, "寰俊鏀粯鎺ュ彛鍑洪敊:" + result);
+		}
+	}
+
+}

--
Gitblit v1.8.0