|  |  | @@ -72,12 +72,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayRefundResult refund(WxPayRefundRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/secapi/pay/refund"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), true); | 
		
	
		
			
			|  |  |  | WxPayRefundResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -90,13 +90,13 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | request.setOutRefundNo(StringUtils.trimToNull(outRefundNo)); | 
		
	
		
			
			|  |  |  | request.setRefundId(StringUtils.trimToNull(refundId)); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/pay/refundquery"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayRefundQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRefundQueryResult.class); | 
		
	
		
			
			|  |  |  | result.composeRefundRecords(); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -112,7 +112,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | log.debug("微信支付异步通知请求参数:{}", xmlData); | 
		
	
		
			
			|  |  |  | WxPayOrderNotifyResult result = WxPayOrderNotifyResult.fromXML(xmlData); | 
		
	
		
			
			|  |  |  | log.debug("微信支付异步通知请求解析后的对象:{}", result); | 
		
	
		
			
			|  |  |  | result.checkResult(this, false); | 
		
	
		
			
			|  |  |  | result.checkResult(this, null, false); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } catch (WxPayException e) { | 
		
	
		
			
			|  |  |  | log.error(e.getMessage(), e); | 
		
	
	
		
			
				|  |  | @@ -138,7 +138,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPaySendRedpackResult sendRedpack(WxPaySendRedpackRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/sendredpack"; | 
		
	
		
			
			|  |  |  | if (request.getAmtType() != null) { | 
		
	
	
		
			
				|  |  | @@ -156,12 +156,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | WxPayRedpackQueryRequest request = new WxPayRedpackQueryRequest(); | 
		
	
		
			
			|  |  |  | request.setMchBillNo(mchBillNo); | 
		
	
		
			
			|  |  |  | request.setBillType(BillType.MCHT); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gethbinfo"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), true); | 
		
	
		
			
			|  |  |  | WxPayRedpackQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayRedpackQueryResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -170,7 +170,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | WxPayOrderQueryRequest request = new WxPayOrderQueryRequest(); | 
		
	
		
			
			|  |  |  | request.setOutTradeNo(StringUtils.trimToNull(outTradeNo)); | 
		
	
		
			
			|  |  |  | request.setTransactionId(StringUtils.trimToNull(transactionId)); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/pay/orderquery"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
	
		
			
				|  |  | @@ -180,7 +180,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | WxPayOrderQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderQueryResult.class); | 
		
	
		
			
			|  |  |  | result.composeCoupons(); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -192,12 +192,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | WxPayOrderCloseRequest request = new WxPayOrderCloseRequest(); | 
		
	
		
			
			|  |  |  | request.setOutTradeNo(StringUtils.trimToNull(outTradeNo)); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/pay/closeorder"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayOrderCloseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderCloseResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -236,7 +236,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | configMap.put("appid", appId); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | payResult = WxPayAppOrderResult.builder() | 
		
	
		
			
			|  |  |  | .sign(SignUtils.createSign(configMap, this.getConfig().getMchKey(), null)) | 
		
	
		
			
			|  |  |  | .sign(SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), false)) | 
		
	
		
			
			|  |  |  | .prepayId(prepayId) | 
		
	
		
			
			|  |  |  | .partnerId(partnerId) | 
		
	
		
			
			|  |  |  | .appId(appId) | 
		
	
	
		
			
				|  |  | @@ -255,9 +255,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | .signType(SignType.MD5) | 
		
	
		
			
			|  |  |  | .build(); | 
		
	
		
			
			|  |  |  | ((WxPayMpOrderResult) payResult) | 
		
	
		
			
			|  |  |  | .setPaySign(SignUtils.createSign(payResult, this.getConfig().getMchKey(), null)); | 
		
	
		
			
			|  |  |  | .setPaySign(SignUtils.createSign(payResult, null, this.getConfig().getMchKey(), false)); | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | default: { | 
		
	
		
			
			|  |  |  | throw new WxPayException("该交易类型暂不支持"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return (T) payResult; | 
		
	
	
		
			
				|  |  | @@ -265,12 +268,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayUnifiedOrderResult unifiedOrder(WxPayUnifiedOrderRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/pay/unifiedorder"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayUnifiedOrderResult result = WxPayBaseResult.fromXML(responseContent, WxPayUnifiedOrderResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -303,7 +306,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | configMap.put("noncestr", nonceStr); | 
		
	
		
			
			|  |  |  | configMap.put("appid", appId); | 
		
	
		
			
			|  |  |  | // 此map用于客户端与微信服务器交互 | 
		
	
		
			
			|  |  |  | payInfo.put("sign", SignUtils.createSign(configMap, this.getConfig().getMchKey(), null)); | 
		
	
		
			
			|  |  |  | payInfo.put("sign", SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), false)); | 
		
	
		
			
			|  |  |  | payInfo.put("prepayId", prepayId); | 
		
	
		
			
			|  |  |  | payInfo.put("partnerId", partnerId); | 
		
	
		
			
			|  |  |  | payInfo.put("appId", appId); | 
		
	
	
		
			
				|  |  | @@ -317,7 +320,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | payInfo.put("nonceStr", nonceStr); | 
		
	
		
			
			|  |  |  | payInfo.put("package", "prepay_id=" + prepayId); | 
		
	
		
			
			|  |  |  | payInfo.put("signType", SignType.MD5); | 
		
	
		
			
			|  |  |  | payInfo.put("paySign", SignUtils.createSign(payInfo, this.getConfig().getMchKey(), null)); | 
		
	
		
			
			|  |  |  | payInfo.put("paySign", SignUtils.createSign(payInfo, null, this.getConfig().getMchKey(), false)); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return payInfo; | 
		
	
	
		
			
				|  |  | @@ -325,12 +328,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxEntPayResult entPay(WxEntPayRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/promotion/transfers"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), true); | 
		
	
		
			
			|  |  |  | WxEntPayResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -338,12 +341,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | public WxEntPayQueryResult queryEntPay(String partnerTradeNo) throws WxPayException { | 
		
	
		
			
			|  |  |  | WxEntPayQueryRequest request = new WxEntPayQueryRequest(); | 
		
	
		
			
			|  |  |  | request.setPartnerTradeNo(partnerTradeNo); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/gettransferinfo"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), true); | 
		
	
		
			
			|  |  |  | WxEntPayQueryResult result = WxPayBaseResult.fromXML(responseContent, WxEntPayQueryResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -364,7 +367,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | params.put("time_stamp", String.valueOf(System.currentTimeMillis() / 1000));//这里需要秒,10位数字 | 
		
	
		
			
			|  |  |  | params.put("nonce_str", String.valueOf(System.currentTimeMillis())); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String sign = SignUtils.createSign(params, this.getConfig().getMchKey(), null); | 
		
	
		
			
			|  |  |  | String sign = SignUtils.createSign(params, null, this.getConfig().getMchKey(), false); | 
		
	
		
			
			|  |  |  | params.put("sign", sign); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (String key : params.keySet()) { | 
		
	
	
		
			
				|  |  | @@ -389,13 +392,14 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | return QrcodeUtils.createQrcode(content, sideLength, logoFile); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public void report(WxPayReportRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/payitil/report"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
	
		
			
				|  |  | @@ -406,7 +410,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | request.setTarType(tarType); | 
		
	
		
			
			|  |  |  | request.setDeviceInfo(deviceInfo); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/pay/downloadbill"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
	
		
			
				|  |  | @@ -488,34 +492,34 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayMicropayResult micropay(WxPayMicropayRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/pay/micropay"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayMicropayResult result = WxPayBaseResult.fromXML(responseContent, WxPayMicropayResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayOrderReverseResult reverseOrder(WxPayOrderReverseRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/secapi/pay/reverse"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), true); | 
		
	
		
			
			|  |  |  | WxPayOrderReverseResult result = WxPayBaseResult.fromXML(responseContent, WxPayOrderReverseResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public String shorturl(WxPayShorturlRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/tools/shorturl"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayShorturlResult result = WxPayBaseResult.fromXML(responseContent, WxPayShorturlResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result.getShortUrl(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -526,12 +530,12 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public String authcode2Openid(WxPayAuthcode2OpenidRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/tools/authcodetoopenid"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayAuthcode2OpenidResult result = WxPayBaseResult.fromXML(responseContent, WxPayAuthcode2OpenidResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result.getOpenid(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -543,45 +547,45 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public String getSandboxSignKey() throws WxPayException { | 
		
	
		
			
			|  |  |  | WxPayDefaultRequest request = new WxPayDefaultRequest(); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 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); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result.getSandboxSignKey(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayCouponSendResult sendCoupon(WxPayCouponSendRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/send_coupon"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), true); | 
		
	
		
			
			|  |  |  | WxPayCouponSendResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponSendResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayCouponStockQueryResult queryCouponStock(WxPayCouponStockQueryRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/query_coupon_stock"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayCouponStockQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponStockQueryResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxPayCouponInfoQueryResult queryCouponInfo(WxPayCouponInfoQueryRequest request) throws WxPayException { | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), false); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/mmpaymkttransfers/querycouponsinfo"; | 
		
	
		
			
			|  |  |  | String responseContent = this.post(url, request.toXML(), false); | 
		
	
		
			
			|  |  |  | WxPayCouponInfoQueryResult result = WxPayBaseResult.fromXML(responseContent, WxPayCouponInfoQueryResult.class); | 
		
	
		
			
			|  |  |  | result.checkResult(this, true); | 
		
	
		
			
			|  |  |  | result.checkResult(this, request.getSignType(), true); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -605,7 +609,7 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | 
		
	
		
			
			|  |  |  | request.setLimit(limit); | 
		
	
		
			
			|  |  |  | request.setSignType(SignType.HMAC_SHA256); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig()); | 
		
	
		
			
			|  |  |  | request.checkAndSign(this.getConfig(), true); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String url = this.getPayBaseUrl() + "/billcommentsp/batchquerycomment"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | 
 |