org.apache.commons
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeRequest.java
index fa6ca553e9..2ab481849e 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeRequest.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class BusiFavorCouponCodeRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:批次号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeResult.java
index ca45a091c4..bca9ea932e 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponCodeResult.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class BusiFavorCouponCodeResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:批次号
@@ -130,8 +130,8 @@ public class BusiFavorCouponCodeResult implements Serializable {
@Data
@NoArgsConstructor
- public static class FailCode {
- public static final float serialVersionUID = 1L;
+ public static class FailCode implements Serializable {
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:上传失败的券code
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUrlRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUrlRequest.java
index 11319e56b4..8af44901e0 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUrlRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUrlRequest.java
@@ -4,6 +4,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
/**
* H5发券请求对象
*
@@ -14,8 +16,8 @@
*/
@Data
@NoArgsConstructor
-public class BusiFavorCouponsUrlRequest {
- public static final float serialVersionUID = 1L;
+public class BusiFavorCouponsUrlRequest implements Serializable {
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUseRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUseRequest.java
index ab8a8ba2a5..9d365054e9 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUseRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorCouponsUseRequest.java
@@ -4,6 +4,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
/**
* 核销用户券请求对象
*
@@ -14,8 +16,8 @@
*/
@Data
@NoArgsConstructor
-public class BusiFavorCouponsUseRequest {
- public static final float serialVersionUID = 1L;
+public class BusiFavorCouponsUseRequest implements Serializable {
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsRequest.java
index 3dad3fe5d1..0a53cd33d1 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsRequest.java
@@ -17,7 +17,7 @@
@Data
@NoArgsConstructor
public class BusiFavorQueryOneUserCouponsRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:用户标识
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsResult.java
index 6db7d303a9..566957eb51 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryOneUserCouponsResult.java
@@ -20,7 +20,7 @@
@Data
@NoArgsConstructor
public class BusiFavorQueryOneUserCouponsResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:批次归属商户号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsRequest.java
index 600a48c8de..0c417c425a 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsRequest.java
@@ -17,7 +17,7 @@
@Data
@NoArgsConstructor
public class BusiFavorQueryUserCouponsRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:用户标识
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsResult.java
index 9b5f57b040..c2906be27e 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/BusiFavorQueryUserCouponsResult.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class BusiFavorQueryUserCouponsResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
* * 字段名:+结果集
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/AvailableWeek.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/AvailableWeek.java
index 410a285ca2..487291a739 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/AvailableWeek.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/AvailableWeek.java
@@ -17,7 +17,7 @@
@Data
@NoArgsConstructor
public class AvailableWeek implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
@@ -51,7 +51,7 @@ public class AvailableWeek implements Serializable {
@Data
@NoArgsConstructor
public static class AvailableDayTimeItem implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/CouponAvailableTime.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/CouponAvailableTime.java
index 31833c1188..f41692c068 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/CouponAvailableTime.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/CouponAvailableTime.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class CouponAvailableTime implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/IrregularyAvaliableTime.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/IrregularyAvaliableTime.java
index 4ddd196e56..0b11010493 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/IrregularyAvaliableTime.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/busifavor/IrregularyAvaliableTime.java
@@ -18,7 +18,7 @@
@NoArgsConstructor
public class IrregularyAvaliableTime implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsRequest.java
index 9aa51ce742..bbb4e93ab4 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsRequest.java
@@ -23,7 +23,7 @@
@Data
@NoArgsConstructor
public class BatchDetailsRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
* 字段名:微信支付批次单号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java
index 720cd72503..4ca7958ed5 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchDetailsResult.java
@@ -25,7 +25,7 @@
@Data
@NoArgsConstructor
public class BatchDetailsResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
@Override
public String toString() {
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberRequest.java
index 9f53843d66..127c38cdc6 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberRequest.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class BatchNumberRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberResult.java
index 1defcca943..a59ccbc85f 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BatchNumberResult.java
@@ -20,7 +20,7 @@
@Data
@NoArgsConstructor
public class BatchNumberResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
@Override
public String toString() {
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java
index ea83328308..fc0b97d7bb 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/BillReceiptResult.java
@@ -20,7 +20,7 @@
@Data
@NoArgsConstructor
public class BillReceiptResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
@Override
public String toString() {
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/DownloadRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/DownloadRequest.java
index 50ca1feac7..3f147abd00 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/DownloadRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/DownloadRequest.java
@@ -21,7 +21,7 @@
@Data
@NoArgsConstructor
public class DownloadRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsRequest.java
index 1f4d8134f4..cc419d3a4f 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsRequest.java
@@ -20,7 +20,7 @@
@Data
@NoArgsConstructor
public class ElectronicReceiptsRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
* 字段名:受理类型
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsResult.java
index 114b1982c3..4e0581108c 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ElectronicReceiptsResult.java
@@ -20,7 +20,7 @@
@Data
@NoArgsConstructor
public class ElectronicReceiptsResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
* 字段名:受理类型
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/MerchantBatchRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/MerchantBatchRequest.java
index fe6450b22e..a319d3f4b3 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/MerchantBatchRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/MerchantBatchRequest.java
@@ -20,7 +20,7 @@
@Data
@NoArgsConstructor
public class MerchantBatchRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
* 字段名:商家批次单号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferRequest.java
index bd06b5db4b..0e8418cca9 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferRequest.java
@@ -19,7 +19,7 @@
@Data
@NoArgsConstructor
public class PartnerTransferRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferResult.java
index cca369b408..d9c8019462 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/PartnerTransferResult.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class PartnerTransferResult implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
* 字段名:商家批次单号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java
index deda24d426..1995ac1656 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/marketing/transfer/ReceiptBillRequest.java
@@ -18,7 +18,7 @@
@Data
@NoArgsConstructor
public class ReceiptBillRequest implements Serializable {
- public static final float serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
/**
*
* 字段名:商家批次单号
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/converter/WxPayOrderNotifyResultConverter.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/converter/WxPayOrderNotifyResultConverter.java
index 0f01358633..e3e28e9183 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/converter/WxPayOrderNotifyResultConverter.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/converter/WxPayOrderNotifyResultConverter.java
@@ -39,7 +39,6 @@ public WxPayOrderNotifyResultConverter(Mapper mapper, ReflectionProvider reflect
}
@Override
- @SuppressWarnings("rawtypes")
public boolean canConvert(Class type) {
return type.equals(WxPayOrderNotifyResult.class);
}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
index f171a04ed2..ce0fbaf375 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
@@ -64,7 +64,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
private static final Gson GSON = new GsonBuilder().create();
- static ThreadLocal wxApiData = new ThreadLocal<>();
+ static final ThreadLocal wxApiData = new ThreadLocal<>();
@Setter
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceHttpComponentsImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceHttpComponentsImpl.java
new file mode 100644
index 0000000000..1c558f711b
--- /dev/null
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceHttpComponentsImpl.java
@@ -0,0 +1,367 @@
+package com.github.binarywang.wxpay.service.impl;
+
+import com.github.binarywang.wxpay.bean.WxPayApiData;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.v3.WxPayV3DownloadHttpGet;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.util.http.apache.ByteArrayResponseHandler;
+import me.chanjar.weixin.common.util.json.GsonParser;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.*;
+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.*;
+import org.apache.http.conn.ssl.DefaultHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+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 javax.net.ssl.SSLContext;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 微信支付请求实现类,apache httpconponents 实现.
+ *
+ * @author altusea
+ */
+@Slf4j
+public class WxPayServiceHttpComponentsImpl extends BaseWxPayServiceImpl {
+
+ private static final String ACCEPT = "Accept";
+ private static final String CONTENT_TYPE = "Content-Type";
+ private static final String APPLICATION_JSON = "application/json";
+ private static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
+
+ @Override
+ public byte[] postForBytes(String url, String requestStr, boolean useKey) throws WxPayException {
+ try {
+ HttpClientBuilder httpClientBuilder = createHttpClientBuilder(useKey);
+ HttpPost httpPost = this.createHttpPost(url, requestStr);
+ try (CloseableHttpClient httpClient = httpClientBuilder.build()) {
+ final byte[] bytes = httpClient.execute(httpPost, ByteArrayResponseHandler.INSTANCE);
+ final String responseData = Base64.getEncoder().encodeToString(bytes);
+ this.logRequestAndResponse(url, requestStr, responseData);
+ wxApiData.set(new WxPayApiData(url, requestStr, responseData, null));
+ return bytes;
+ }
+ } catch (Exception e) {
+ this.logError(url, requestStr, e);
+ wxApiData.set(new WxPayApiData(url, requestStr, null, e.getMessage()));
+ throw new WxPayException(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ public String post(String url, String requestStr, boolean useKey) throws WxPayException {
+ try {
+ HttpClientBuilder httpClientBuilder = this.createHttpClientBuilder(useKey);
+ HttpPost httpPost = this.createHttpPost(url, requestStr);
+ try (CloseableHttpClient httpClient = httpClientBuilder.build()) {
+ try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
+ String responseString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
+ this.logRequestAndResponse(url, requestStr, responseString);
+ if (this.getConfig().isIfSaveApiData()) {
+ wxApiData.set(new WxPayApiData(url, requestStr, responseString, null));
+ }
+ return responseString;
+ }
+ } finally {
+ httpPost.releaseConnection();
+ }
+ } catch (Exception e) {
+ this.logError(url, requestStr, e);
+ if (this.getConfig().isIfSaveApiData()) {
+ wxApiData.set(new WxPayApiData(url, requestStr, null, e.getMessage()));
+ }
+ throw new WxPayException(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ public String postV3(String url, String requestStr) throws WxPayException {
+ HttpPost httpPost = this.createHttpPost(url, requestStr);
+ this.configureRequest(httpPost);
+ return this.requestV3(url, requestStr, httpPost);
+ }
+
+ private String requestV3(String url, String requestStr, HttpRequestBase httpRequestBase) throws WxPayException {
+ CloseableHttpClient httpClient = this.createApiV3HttpClient();
+ try (CloseableHttpResponse response = httpClient.execute(httpRequestBase)) {
+ //v3已经改为通过状态码判断200 204 成功
+ int statusCode = response.getStatusLine().getStatusCode();
+ //post方法有可能会没有返回值的情况
+ String responseString = null;
+ if (response.getEntity() != null) {
+ responseString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
+ }
+
+ if (HttpStatus.SC_OK == statusCode || HttpStatus.SC_NO_CONTENT == statusCode) {
+ this.logRequestAndResponse(url, requestStr, responseString);
+ return responseString;
+ }
+
+ //有错误提示信息返回
+ JsonObject jsonObject = GsonParser.parse(responseString);
+ throw convertException(jsonObject);
+ } catch (Exception e) {
+ this.logError(url, requestStr, e);
+ throw (e instanceof WxPayException) ? (WxPayException) e : new WxPayException(e.getMessage(), e);
+ } finally {
+ httpRequestBase.releaseConnection();
+ }
+ }
+
+ @Override
+ public String patchV3(String url, String requestStr) throws WxPayException {
+ HttpPatch httpPatch = new HttpPatch(url);
+ httpPatch.setEntity(createEntry(requestStr));
+ return this.requestV3(url, requestStr, httpPatch);
+ }
+
+ @Override
+ public String postV3WithWechatpaySerial(String url, String requestStr) throws WxPayException {
+ HttpPost httpPost = this.createHttpPost(url, requestStr);
+ this.configureRequest(httpPost);
+ CloseableHttpClient httpClient = this.createApiV3HttpClient();
+ try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
+ //v3已经改为通过状态码判断200 204 成功
+ int statusCode = response.getStatusLine().getStatusCode();
+ String responseString = "{}";
+ HttpEntity entity = response.getEntity();
+ if (entity != null) {
+ responseString = EntityUtils.toString(entity, StandardCharsets.UTF_8);
+ }
+
+ if (HttpStatus.SC_OK == statusCode || HttpStatus.SC_NO_CONTENT == statusCode) {
+ this.logRequestAndResponse(url, requestStr, responseString);
+ return responseString;
+ }
+
+ //有错误提示信息返回
+ JsonObject jsonObject = GsonParser.parse(responseString);
+ throw convertException(jsonObject);
+ } catch (Exception e) {
+ this.logError(url, requestStr, e);
+ throw (e instanceof WxPayException) ? (WxPayException) e : new WxPayException(e.getMessage(), e);
+ } finally {
+ httpPost.releaseConnection();
+ }
+ }
+
+ @Override
+ public String postV3(String url, HttpPost httpPost) throws WxPayException {
+ return this.requestV3(url, httpPost);
+ }
+
+ @Override
+ public String requestV3(String url, HttpRequestBase httpRequest) throws WxPayException {
+ this.configureRequest(httpRequest);
+ CloseableHttpClient httpClient = this.createApiV3HttpClient();
+ try (CloseableHttpResponse response = httpClient.execute(httpRequest)) {
+ //v3已经改为通过状态码判断200 204 成功
+ int statusCode = response.getStatusLine().getStatusCode();
+ //post方法有可能会没有返回值的情况
+ String responseString = null;
+ if (response.getEntity() != null) {
+ responseString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
+ }
+
+ if (HttpStatus.SC_OK == statusCode || HttpStatus.SC_NO_CONTENT == statusCode) {
+ log.info("\n【请求地址】:{}\n【响应数据】:{}", url, responseString);
+ return responseString;
+ }
+
+ //有错误提示信息返回
+ JsonObject jsonObject = GsonParser.parse(responseString);
+ throw convertException(jsonObject);
+ } catch (Exception e) {
+ log.error("\n【请求地址】:{}\n【异常信息】:{}", url, e.getMessage());
+ throw (e instanceof WxPayException) ? (WxPayException) e : new WxPayException(e.getMessage(), e);
+ } finally {
+ httpRequest.releaseConnection();
+ }
+ }
+
+ @Override
+ public String getV3(String url) throws WxPayException {
+ if (this.getConfig().isStrictlyNeedWechatPaySerial()) {
+ return getV3WithWechatPaySerial(url);
+ }
+ HttpGet httpGet = new HttpGet(url);
+ return this.requestV3(url, httpGet);
+ }
+
+ @Override
+ public String getV3WithWechatPaySerial(String url) throws WxPayException {
+ HttpGet httpGet = new HttpGet(url);
+ return this.requestV3(url, httpGet);
+ }
+
+ @Override
+ public InputStream downloadV3(String url) throws WxPayException {
+ HttpGet httpGet = new WxPayV3DownloadHttpGet(url);
+ this.configureRequest(httpGet);
+ CloseableHttpClient httpClient = this.createApiV3HttpClient();
+ try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
+ //v3已经改为通过状态码判断200 204 成功
+ int statusCode = response.getStatusLine().getStatusCode();
+ Header contentType = response.getFirstHeader(HttpHeaders.CONTENT_TYPE);
+ boolean isJsonContentType = Objects.nonNull(contentType) && ContentType.APPLICATION_JSON.getMimeType()
+ .equals(ContentType.parse(String.valueOf(contentType.getValue())).getMimeType());
+ if ((HttpStatus.SC_OK == statusCode || HttpStatus.SC_NO_CONTENT == statusCode) && !isJsonContentType) {
+ log.info("\n【请求地址】:{}\n", url);
+ return response.getEntity().getContent();
+ }
+
+ //response里的header有content-type=json说明返回了错误信息
+ //有错误提示信息返回
+ String responseString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
+ JsonObject jsonObject = GsonParser.parse(responseString);
+ throw convertException(jsonObject);
+ } catch (Exception e) {
+ log.error("\n【请求地址】:{}\n【异常信息】:{}", url, e.getMessage());
+ throw (e instanceof WxPayException) ? (WxPayException) e : new WxPayException(e.getMessage(), e);
+ } finally {
+ httpGet.releaseConnection();
+ }
+ }
+
+ @Override
+ public String putV3(String url, String requestStr) throws WxPayException {
+ HttpPut httpPut = new HttpPut(url);
+ StringEntity entity = createEntry(requestStr);
+ httpPut.setEntity(entity);
+ return requestV3(url, httpPut);
+ }
+
+ @Override
+ public String deleteV3(String url) throws WxPayException {
+ HttpDelete httpDelete = new HttpDelete(url);
+ return requestV3(url, httpDelete);
+ }
+
+ private void configureRequest(HttpRequestBase request) {
+ String serialNumber = getWechatPaySerial(getConfig());
+ String method = request.getMethod();
+ request.addHeader(ACCEPT, APPLICATION_JSON);
+ if (!method.equals("POST")) {
+ request.addHeader(CONTENT_TYPE, APPLICATION_JSON);
+ }
+ request.addHeader(WECHAT_PAY_SERIAL, serialNumber);
+
+ request.setConfig(RequestConfig.custom()
+ .setConnectionRequestTimeout(this.getConfig().getHttpConnectionTimeout())
+ .setConnectTimeout(this.getConfig().getHttpConnectionTimeout())
+ .setSocketTimeout(this.getConfig().getHttpTimeout())
+ .build());
+ }
+
+ private CloseableHttpClient createApiV3HttpClient() throws WxPayException {
+ CloseableHttpClient apiV3HttpClient = this.getConfig().getApiV3HttpClient();
+ if (null == apiV3HttpClient) {
+ return this.getConfig().initApiV3HttpClient();
+ }
+ return apiV3HttpClient;
+ }
+
+ private static StringEntity createEntry(String requestStr) {
+ return new StringEntity(requestStr, ContentType.create(APPLICATION_JSON, StandardCharsets.UTF_8));
+ //return new StringEntity(new String(requestStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
+ }
+
+ private HttpClientBuilder createHttpClientBuilder(boolean useKey) throws WxPayException {
+ HttpClientBuilder httpClientBuilder = HttpClients.custom();
+ if (useKey) {
+ this.initSSLContext(httpClientBuilder);
+ }
+
+ if (StringUtils.isNotBlank(this.getConfig().getHttpProxyHost()) && this.getConfig().getHttpProxyPort() > 0) {
+ if (StringUtils.isEmpty(this.getConfig().getHttpProxyUsername())) {
+ this.getConfig().setHttpProxyUsername("whatever");
+ }
+
+ // 使用代理服务器 需要用户认证的代理服务器
+ CredentialsProvider provider = new BasicCredentialsProvider();
+ provider.setCredentials(new AuthScope(this.getConfig().getHttpProxyHost(),
+ this.getConfig().getHttpProxyPort()),
+ new UsernamePasswordCredentials(this.getConfig().getHttpProxyUsername(),
+ this.getConfig().getHttpProxyPassword()));
+ httpClientBuilder.setDefaultCredentialsProvider(provider)
+ .setProxy(new HttpHost(this.getConfig().getHttpProxyHost(), this.getConfig().getHttpProxyPort()));
+ }
+
+ // 提供自定义httpClientBuilder的能力
+ Optional.ofNullable(getConfig().getHttpClientBuilderCustomizer()).ifPresent(e -> {
+ e.customize(httpClientBuilder);
+ });
+
+ return httpClientBuilder;
+ }
+
+ private HttpPost createHttpPost(String url, String requestStr) {
+ HttpPost httpPost = new HttpPost(url);
+ httpPost.setEntity(createEntry(requestStr));
+
+ httpPost.setConfig(RequestConfig.custom()
+ .setConnectionRequestTimeout(this.getConfig().getHttpConnectionTimeout())
+ .setConnectTimeout(this.getConfig().getHttpConnectionTimeout())
+ .setSocketTimeout(this.getConfig().getHttpTimeout())
+ .build());
+
+ return httpPost;
+ }
+
+ private void initSSLContext(HttpClientBuilder httpClientBuilder) throws WxPayException {
+ SSLContext sslContext = this.getConfig().getSslContext();
+ if (null == sslContext) {
+ sslContext = this.getConfig().initSSLContext();
+ }
+
+ httpClientBuilder.setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext,
+ new DefaultHostnameVerifier()));
+ }
+
+ private WxPayException convertException(JsonObject jsonObject) {
+ //TODO 这里考虑使用新的适用于V3的异常
+ JsonElement codeElement = jsonObject.get("code");
+ String code = codeElement == null ? null : codeElement.getAsString();
+ String message = jsonObject.get("message").getAsString();
+ WxPayException wxPayException = new WxPayException(message);
+ wxPayException.setErrCode(code);
+ wxPayException.setErrCodeDes(message);
+ return wxPayException;
+ }
+
+ /**
+ * 兼容微信支付公钥模式
+ */
+ private String getWechatPaySerial(WxPayConfig wxPayConfig) {
+ if (StringUtils.isNotBlank(wxPayConfig.getPublicKeyId())) {
+ return wxPayConfig.getPublicKeyId();
+ }
+
+ return wxPayConfig.getVerifier().getValidCertificate().getSerialNumber().toString(16).toUpperCase();
+ }
+
+ private void logRequestAndResponse(String url, String requestStr, String responseStr) {
+ log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", url, requestStr, responseStr);
+ }
+
+ private void logError(String url, String requestStr, Exception e) {
+ log.error("\n【请求地址】:{}\n【请求数据】:{}\n【异常信息】:{}", url, requestStr, e.getMessage());
+ }
+}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java
index 9e005a813e..6c0009fd18 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java
@@ -92,8 +92,7 @@ public static String createSign(Map params, String signType, Str
for (String key : new TreeMap<>(params).keySet()) {
String value = params.get(key);
boolean shouldSign = false;
- if (StringUtils.isNotEmpty(value) && !ArrayUtils.contains(ignoredParams, key)
- && !NO_SIGN_PARAMS.contains(key)) {
+ if (StringUtils.isNotEmpty(value) && !ArrayUtils.contains(ignoredParams, key) && !NO_SIGN_PARAMS.contains(key)) {
shouldSign = true;
}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ZipUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ZipUtils.java
index f9c434196a..1bab0432e6 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ZipUtils.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ZipUtils.java
@@ -24,7 +24,7 @@ public static File unGzip(final File file) throws IOException {
resultFile.createNewFile();
try (FileOutputStream fos = new FileOutputStream(resultFile);
- GZIPInputStream gzis = new GZIPInputStream(new FileInputStream(file));) {
+ GZIPInputStream gzis = new GZIPInputStream(new FileInputStream(file))) {
IOUtils.copy(gzis, fos);
}
diff --git a/weixin-java-qidian/pom.xml b/weixin-java-qidian/pom.xml
index 5e7503e1c9..a7e7040f3a 100644
--- a/weixin-java-qidian/pom.xml
+++ b/weixin-java-qidian/pom.xml
@@ -31,6 +31,11 @@
okhttp
provided
+