| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -11,7 +11,6 @@ import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.bean.request.*; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.bean.result.*; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.config.WxPayConfig; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.constant.WxPayConstants; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.github.binarywang.wxpay.constant.WxPayConstants.TradeType; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -21,26 +20,10 @@ import com.github.binarywang.wxpay.util.SignUtils; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.google.common.base.Joiner; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import com.google.common.collect.Maps; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import jodd.io.ZipUtil; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import jodd.util.Base64; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.commons.lang3.StringUtils; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.auth.AuthScope; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.auth.UsernamePasswordCredentials; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.client.CredentialsProvider; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.client.config.RequestConfig; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.client.methods.CloseableHttpResponse; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.client.methods.HttpPost; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.conn.ssl.DefaultHostnameVerifier; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.conn.ssl.SSLConnectionSocketFactory; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.entity.StringEntity; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.impl.client.BasicCredentialsProvider; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.impl.client.CloseableHttpClient; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.impl.client.HttpClientBuilder; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.impl.client.HttpClients; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.http.util.EntityUtils; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.slf4j.Logger; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.slf4j.LoggerFactory; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import javax.net.ssl.SSLContext; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.io.File; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.io.IOException; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.nio.charset.StandardCharsets; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -61,7 +44,7 @@ import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * @author <a href="https://github.com/binarywang">Binary Wang</a> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			public abstract class BaseWxPayServiceImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  private static final String PAY_BASE_URL = "https://api.mch.weixin.qq.com"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  protected final Logger log = LoggerFactory.getLogger(this.getClass()); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  protected static ThreadLocal<WxPayApiData> wxApiData = new ThreadLocal<>(); | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -112,7 +95,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/secapi/pay/refund"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayRefundResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayRefundResult result = BaseWxPayResult.fromXML(responseContent, WxPayRefundResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -130,7 +113,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/pay/refundquery"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayRefundQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayRefundQueryResult result = BaseWxPayResult.fromXML(responseContent, WxPayRefundQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.composeRefundRecords(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -184,7 +167,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    //无需校验,因为没有返回签名信息 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return WxPayBaseResult.fromXML(responseContent, WxPaySendRedpackResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return BaseWxPayResult.fromXML(responseContent, WxPaySendRedpackResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  @Override | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -196,7 +179,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gethbinfo"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayRedpackQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRedpackQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayRedpackQueryResult result = BaseWxPayResult.fromXML(responseContent, WxPayRedpackQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -214,7 +197,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      throw new WxPayException("无响应结果"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayOrderQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayOrderQueryResult result = BaseWxPayResult.fromXML(responseContent, WxPayOrderQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.composeCoupons(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -232,7 +215,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/pay/closeorder"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayOrderCloseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderCloseResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayOrderCloseResult result = BaseWxPayResult.fromXML(responseContent, WxPayOrderCloseResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -314,7 +297,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/pay/unifiedorder"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayUnifiedOrderResult result = WxPayBaseResult.fromXML(responseContent, WxPayUnifiedOrderResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayUnifiedOrderResult result = BaseWxPayResult.fromXML(responseContent, WxPayUnifiedOrderResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -374,7 +357,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/mmpaymkttransfers/promotion/transfers"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxEntPayResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxEntPayResult result = BaseWxPayResult.fromXML(responseContent, WxEntPayResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -387,7 +370,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gettransferinfo"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxEntPayQueryResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxEntPayQueryResult result = BaseWxPayResult.fromXML(responseContent, WxEntPayQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -440,7 +423,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/payitil/report"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCommonResult result = BaseWxPayResult.fromXML(responseContent, WxPayCommonResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -466,7 +449,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (responseContent.startsWith("<")) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        throw WxPayException.from(WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        throw WxPayException.from(BaseWxPayResult.fromXML(responseContent, WxPayCommonResult.class)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -492,7 +475,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return Joiner.on("\n").join(allLines); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } catch (ZipException e) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (e.getMessage().contains("Not in GZIP format")) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          throw WxPayException.from(WxPayBaseResult.fromXML(new String(responseBytes, StandardCharsets.UTF_8), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          throw WxPayException.from(BaseWxPayResult.fromXML(new String(responseBytes, StandardCharsets.UTF_8), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            WxPayCommonResult.class)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          this.log.error("解压zip文件出错", e); | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -584,7 +567,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/pay/micropay"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayMicropayResult result = WxPayBaseResult.fromXML(responseContent, WxPayMicropayResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayMicropayResult result = BaseWxPayResult.fromXML(responseContent, WxPayMicropayResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -595,7 +578,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/secapi/pay/reverse"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayOrderReverseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderReverseResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayOrderReverseResult result = BaseWxPayResult.fromXML(responseContent, WxPayOrderReverseResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -606,7 +589,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/tools/shorturl"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayShorturlResult result = WxPayBaseResult.fromXML(responseContent, WxPayShorturlResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayShorturlResult result = BaseWxPayResult.fromXML(responseContent, WxPayShorturlResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result.getShortUrl(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -622,7 +605,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/tools/authcodetoopenid"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayAuthcode2OpenidResult result = WxPayBaseResult.fromXML(responseContent, WxPayAuthcode2OpenidResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayAuthcode2OpenidResult result = BaseWxPayResult.fromXML(responseContent, WxPayAuthcode2OpenidResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result.getOpenid(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -639,7 +622,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPaySandboxSignKeyResult result = WxPayBaseResult.fromXML(responseContent, WxPaySandboxSignKeyResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPaySandboxSignKeyResult result = BaseWxPayResult.fromXML(responseContent, WxPaySandboxSignKeyResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result.getSandboxSignKey(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -650,7 +633,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/mmpaymkttransfers/send_coupon"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCouponSendResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponSendResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCouponSendResult result = BaseWxPayResult.fromXML(responseContent, WxPayCouponSendResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -661,7 +644,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/mmpaymkttransfers/query_coupon_stock"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCouponStockQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponStockQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCouponStockQueryResult result = BaseWxPayResult.fromXML(responseContent, WxPayCouponStockQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -672,7 +655,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String url = this.getPayBaseUrl() + "/mmpaymkttransfers/querycouponsinfo"; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCouponInfoQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponInfoQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WxPayCouponInfoQueryResult result = BaseWxPayResult.fromXML(responseContent, WxPayCouponInfoQueryResult.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    result.checkResult(this, request.getSignType(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return result; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -703,7 +686,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    String responseContent = this.post(url, request.toXML(), true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (responseContent.startsWith("<")) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      throw WxPayException.from(WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      throw WxPayException.from(BaseWxPayResult.fromXML(responseContent, WxPayCommonResult.class)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return responseContent; |