mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 02:28:25 +08:00 
			
		
		
		
	微信支付增加获取微信的请求和响应数据的方法getWxApiData(),方便使用者获取使用该数据
This commit is contained in:
		| @ -0,0 +1,87 @@ | |||||||
|  | package com.github.binarywang.wxpay.bean; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * <pre> | ||||||
|  |  * 微信支付接口请求数据封装对象 | ||||||
|  |  * Created by Binary Wang on 2017-8-25. | ||||||
|  |  * </pre> | ||||||
|  |  * | ||||||
|  |  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||||
|  |  */ | ||||||
|  | public class WxPayApiData { | ||||||
|  |   /** | ||||||
|  |    * 接口请求地址 | ||||||
|  |    */ | ||||||
|  |   private String url; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 请求数据 | ||||||
|  |    */ | ||||||
|  |   private String requestData; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 响应数据 | ||||||
|  |    */ | ||||||
|  |   private String responseData; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 接口请求异常信息 | ||||||
|  |    */ | ||||||
|  |   private String exceptionMsg; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * @param url          接口请求地址 | ||||||
|  |    * @param requestData  请求数据 | ||||||
|  |    * @param responseData 响应数据 | ||||||
|  |    * @param exceptionMsg 接口请求异常信息 | ||||||
|  |    */ | ||||||
|  |   public WxPayApiData(String url, String requestData, String responseData, String exceptionMsg) { | ||||||
|  |     this.url = url; | ||||||
|  |     this.requestData = requestData; | ||||||
|  |     this.responseData = responseData; | ||||||
|  |     this.exceptionMsg = exceptionMsg; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getUrl() { | ||||||
|  |     return this.url; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setUrl(String url) { | ||||||
|  |     this.url = url; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getRequestData() { | ||||||
|  |     return this.requestData; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setRequestData(String requestData) { | ||||||
|  |     this.requestData = requestData; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getResponseData() { | ||||||
|  |     return this.responseData; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setResponseData(String responseData) { | ||||||
|  |     this.responseData = responseData; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public String getExceptionMsg() { | ||||||
|  |     return this.exceptionMsg; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   public void setExceptionMsg(String exceptionMsg) { | ||||||
|  |     this.exceptionMsg = exceptionMsg; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public String toString() { | ||||||
|  |     if (this.exceptionMsg != null) { | ||||||
|  |       return String.format("\n【请求地址】:%s\n【请求数据】:%s\n【异常信息】:%s", | ||||||
|  |         this, url, this.requestData, this.exceptionMsg); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return String.format("\n【请求地址】:%s\n【请求数据】:%s\n【响应数据】:%s", | ||||||
|  |       this.url, this.requestData, this.responseData); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -1,5 +1,6 @@ | |||||||
| package com.github.binarywang.wxpay.service; | package com.github.binarywang.wxpay.service; | ||||||
|  |  | ||||||
|  | import com.github.binarywang.wxpay.bean.WxPayApiData; | ||||||
| import com.github.binarywang.wxpay.bean.coupon.*; | import com.github.binarywang.wxpay.bean.coupon.*; | ||||||
| import com.github.binarywang.wxpay.bean.request.*; | import com.github.binarywang.wxpay.bean.request.*; | ||||||
| import com.github.binarywang.wxpay.bean.result.*; | import com.github.binarywang.wxpay.bean.result.*; | ||||||
| @ -368,4 +369,9 @@ public interface WxPayService { | |||||||
|    * </pre> |    * </pre> | ||||||
|    */ |    */ | ||||||
|   WxPayCouponInfoQueryResult queryCouponInfo(WxPayCouponInfoQueryRequest request) throws WxPayException; |   WxPayCouponInfoQueryResult queryCouponInfo(WxPayCouponInfoQueryRequest request) throws WxPayException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 获取微信请求数据,方便接口调用方获取处理 | ||||||
|  |    */ | ||||||
|  |   WxPayApiData getWxApiData(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package com.github.binarywang.wxpay.service.impl; | package com.github.binarywang.wxpay.service.impl; | ||||||
|  |  | ||||||
| import com.github.binarywang.utils.qrcode.QrcodeUtils; | import com.github.binarywang.utils.qrcode.QrcodeUtils; | ||||||
|  | import com.github.binarywang.wxpay.bean.WxPayApiData; | ||||||
| import com.github.binarywang.wxpay.bean.coupon.*; | import com.github.binarywang.wxpay.bean.coupon.*; | ||||||
| import com.github.binarywang.wxpay.bean.request.*; | import com.github.binarywang.wxpay.bean.request.*; | ||||||
| import com.github.binarywang.wxpay.bean.result.*; | import com.github.binarywang.wxpay.bean.result.*; | ||||||
| @ -33,6 +34,7 @@ import java.util.Map; | |||||||
| public abstract class WxPayServiceAbstractImpl implements WxPayService { | public abstract class WxPayServiceAbstractImpl implements WxPayService { | ||||||
|   private static final String PAY_BASE_URL = "https://api.mch.weixin.qq.com"; |   private static final String PAY_BASE_URL = "https://api.mch.weixin.qq.com"; | ||||||
|   protected final Logger log = LoggerFactory.getLogger(this.getClass()); |   protected final Logger log = LoggerFactory.getLogger(this.getClass()); | ||||||
|  |   protected static ThreadLocal<WxPayApiData> wxApiData = new ThreadLocal<>(); | ||||||
|  |  | ||||||
|   protected WxPayConfig config; |   protected WxPayConfig config; | ||||||
|  |  | ||||||
| @ -501,4 +503,15 @@ public abstract class WxPayServiceAbstractImpl implements WxPayService { | |||||||
|     result.checkResult(this); |     result.checkResult(this); | ||||||
|     return result; |     return result; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public WxPayApiData getWxApiData() { | ||||||
|  |     try { | ||||||
|  |       return wxApiData.get(); | ||||||
|  |     }finally { | ||||||
|  |       //一般来说,接口请求会在一个线程内进行,这种情况下,每个线程get的会是之前所存入的数据, | ||||||
|  |       // 但以防万一有同一线程多次请求的问题,所以每次获取完数据后移除对应数据 | ||||||
|  |       wxApiData.remove(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| package com.github.binarywang.wxpay.service.impl; | package com.github.binarywang.wxpay.service.impl; | ||||||
|  |  | ||||||
|  | import com.github.binarywang.wxpay.bean.WxPayApiData; | ||||||
| import com.github.binarywang.wxpay.exception.WxPayException; | import com.github.binarywang.wxpay.exception.WxPayException; | ||||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||||
| import org.apache.http.auth.AuthScope; | import org.apache.http.auth.AuthScope; | ||||||
| @ -66,15 +67,17 @@ public class WxPayServiceApacheHttpImpl extends WxPayServiceAbstractImpl { | |||||||
|       try (CloseableHttpClient httpclient = httpClientBuilder.build()) { |       try (CloseableHttpClient httpclient = httpClientBuilder.build()) { | ||||||
|         httpPost.setEntity(new StringEntity(new String(requestStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1))); |         httpPost.setEntity(new StringEntity(new String(requestStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1))); | ||||||
|         try (CloseableHttpResponse response = httpclient.execute(httpPost)) { |         try (CloseableHttpResponse response = httpclient.execute(httpPost)) { | ||||||
|           String result = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); |           String responseString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); | ||||||
|           this.log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", url, requestStr, result); |           this.log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", url, requestStr, responseString); | ||||||
|           return result; |           wxApiData.set(new WxPayApiData(url, requestStr, responseString, null)); | ||||||
|  |           return responseString; | ||||||
|         } |         } | ||||||
|       } finally { |       } finally { | ||||||
|         httpPost.releaseConnection(); |         httpPost.releaseConnection(); | ||||||
|       } |       } | ||||||
|     } catch (Exception e) { |     } catch (Exception e) { | ||||||
|       this.log.error("\n【请求地址】:{}\n【请求数据】:{}\n【异常信息】:{}", url, requestStr, e.getMessage()); |       this.log.error("\n【请求地址】:{}\n【请求数据】:{}\n【异常信息】:{}", url, requestStr, e.getMessage()); | ||||||
|  |       wxApiData.set(new WxPayApiData(url, requestStr, null, e.getMessage())); | ||||||
|       throw new WxPayException(e.getMessage(), e); |       throw new WxPayException(e.getMessage(), e); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| package com.github.binarywang.wxpay.service.impl; | package com.github.binarywang.wxpay.service.impl; | ||||||
|  |  | ||||||
|  | import com.github.binarywang.wxpay.bean.WxPayApiData; | ||||||
| import com.github.binarywang.wxpay.exception.WxPayException; | import com.github.binarywang.wxpay.exception.WxPayException; | ||||||
| import jodd.http.HttpConnectionProvider; | import jodd.http.HttpConnectionProvider; | ||||||
| import jodd.http.HttpRequest; | import jodd.http.HttpRequest; | ||||||
| @ -53,9 +54,11 @@ public class WxPayServiceJoddHttpImpl extends WxPayServiceAbstractImpl { | |||||||
|       String responseString = this.getResponseString(request.send()); |       String responseString = this.getResponseString(request.send()); | ||||||
|  |  | ||||||
|       this.log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", url, requestStr, responseString); |       this.log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", url, requestStr, responseString); | ||||||
|  |       wxApiData.set(new WxPayApiData(url, requestStr, responseString, null)); | ||||||
|       return responseString; |       return responseString; | ||||||
|     } catch (Exception e) { |     } catch (Exception e) { | ||||||
|       this.log.error("\n【请求地址】:{}\n【请求数据】:{}\n【异常信息】:{}", url, requestStr, e.getMessage()); |       this.log.error("\n【请求地址】:{}\n【请求数据】:{}\n【异常信息】:{}", url, requestStr, e.getMessage()); | ||||||
|  |       wxApiData.set(new WxPayApiData(url, requestStr, null, e.getMessage())); | ||||||
|       throw new WxPayException(e.getMessage(), e); |       throw new WxPayException(e.getMessage(), e); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -53,6 +53,7 @@ public class WxPayServiceAbstractImplTest { | |||||||
|         .outTradeNo("1111112") |         .outTradeNo("1111112") | ||||||
|         .build()); |         .build()); | ||||||
|     this.logger.info(result.toString()); |     this.logger.info(result.toString()); | ||||||
|  |     this.logger.warn(this.payService.getWxApiData().toString()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @Test |   @Test | ||||||
|  | |||||||
| @ -12,11 +12,16 @@ import java.io.IOException; | |||||||
| import java.io.InputStream; | import java.io.InputStream; | ||||||
|  |  | ||||||
| public class ApiTestModule implements Module { | public class ApiTestModule implements Module { | ||||||
|  |   private static final String TEST_CONFIG_XML = "test-config.xml"; | ||||||
|  |  | ||||||
|   @Override |   @Override | ||||||
|   public void configure(Binder binder) { |   public void configure(Binder binder) { | ||||||
|     try (InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml")) { |     try (InputStream inputStream = ClassLoader.getSystemResourceAsStream(TEST_CONFIG_XML)) { | ||||||
|       XmlWxPayConfig config = this.fromXml(XmlWxPayConfig.class, is1); |       if (inputStream == null) { | ||||||
|  |         throw new RuntimeException("测试配置文件【" + TEST_CONFIG_XML + "】未找到"); | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       XmlWxPayConfig config = this.fromXml(XmlWxPayConfig.class, inputStream); | ||||||
|       WxPayService wxService = new WxPayServiceImpl(); |       WxPayService wxService = new WxPayServiceImpl(); | ||||||
|       wxService.setConfig(config); |       wxService.setConfig(config); | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Binary Wang
					Binary Wang