diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java
index 494e75a9e..53f51e0f3 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonParser.java
@@ -3,21 +3,25 @@ package me.chanjar.weixin.common.util.json;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
+import lombok.NoArgsConstructor;
import java.io.Reader;
+/**
+ * @author niefy
+ */
public class GsonParser {
private static final JsonParser JSON_PARSER = new JsonParser();
- public static JsonObject parse(String json){
+ public static JsonObject parse(String json) {
return JSON_PARSER.parse(json).getAsJsonObject();
}
- public static JsonObject parse(Reader json){
+ public static JsonObject parse(Reader json) {
return JSON_PARSER.parse(json).getAsJsonObject();
}
- public static JsonObject parse(JsonReader json){
+ public static JsonObject parse(JsonReader json) {
return JSON_PARSER.parse(json).getAsJsonObject();
}
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
index b52bad953..062492350 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
@@ -13,7 +13,6 @@ import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
* @author chanjarster
*/
public class WxGsonBuilder {
-
private static final GsonBuilder INSTANCE = new GsonBuilder();
static {
diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml
index e199395a1..e413ade74 100644
--- a/weixin-java-pay/pom.xml
+++ b/weixin-java-pay/pom.xml
@@ -71,6 +71,7 @@
lombok
+
com.fasterxml.jackson.core
jackson-databind
2.9.10.4
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/TimeRange.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/TimeRange.java
index 08b86d6ed..a0a27693d 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/TimeRange.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/TimeRange.java
@@ -1,6 +1,7 @@
package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -14,6 +15,7 @@ import java.io.Serializable;
*/
@Data
@NoArgsConstructor
+@AllArgsConstructor
public class TimeRange implements Serializable {
private static final long serialVersionUID = 8169562173656314930L;
/**
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequest.java
index e76801b90..c4fd49438 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequest.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequest.java
@@ -6,6 +6,7 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.io.Serializable;
import java.util.List;
@@ -22,6 +23,10 @@ import java.util.List;
public class WxPayScoreRequest implements Serializable {
private static final long serialVersionUID = 364764508076146082L;
+ public String toJson() {
+ return WxGsonBuilder.create().toJson(this);
+ }
+
/**
* out_order_no : 1234323JKHDFE1243252
* appid : wxd678efh567hg6787
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreResult.java
index 506148ad9..58665bf55 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreResult.java
@@ -3,6 +3,7 @@ package com.github.binarywang.wxpay.bean.payscore;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.io.Serializable;
import java.util.List;
@@ -17,6 +18,10 @@ import java.util.Map;
public class WxPayScoreResult implements Serializable {
private static final long serialVersionUID = 8809250065540275770L;
+ public static WxPayScoreResult fromJson(String json) {
+ return WxGsonBuilder.create().fromJson(json, WxPayScoreResult.class);
+ }
+
/**
* appid : wxd678efh567hg6787
* mchid : 1230000109
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java
index 14950a5b2..7fa7efa58 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImpl.java
@@ -8,9 +8,8 @@ import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.PayScoreService;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.v3.util.AesUtils;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.URIBuilder;
@@ -26,7 +25,6 @@ import java.util.Map;
*/
@RequiredArgsConstructor
public class PayScoreServiceImpl implements PayScoreService {
- private static final Gson GSON = new GsonBuilder().create();
private final WxPayService payService;
@Override
@@ -37,8 +35,8 @@ public class PayScoreServiceImpl implements PayScoreService {
request.setAppid(config.getAppId());
request.setServiceId(config.getServiceId());
request.setNotifyUrl(config.getPayScoreNotifyUrl());
- String result = payService.postV3(url, GSON.toJson(request));
- WxPayScoreResult wxPayScoreCreateResult = GSON.fromJson(result, WxPayScoreResult.class);
+ String result = this.payService.postV3(url, request.toJson());
+ WxPayScoreResult wxPayScoreCreateResult = WxPayScoreResult.fromJson(result);
//补充算一下签名给小程序跳转用
String currentTimeMillis = System.currentTimeMillis() + "";
@@ -84,7 +82,7 @@ public class PayScoreServiceImpl implements PayScoreService {
uriBuilder.setParameter("appid", config.getAppId());
try {
String result = payService.getV3(uriBuilder.build());
- return GSON.fromJson(result, WxPayScoreResult.class);
+ return WxPayScoreResult.fromJson(result);
} catch (URISyntaxException e) {
throw new WxPayException("未知异常!", e);
}
@@ -95,12 +93,12 @@ public class PayScoreServiceImpl implements PayScoreService {
public WxPayScoreResult cancelServiceOrder(String outOrderNo, String reason) throws WxPayException {
WxPayConfig config = this.payService.getConfig();
String url = String.format("%s/v3/payscore/serviceorder/%s/cancel", this.payService.getPayBaseUrl(), outOrderNo);
- HashMap map = new HashMap<>(4);
+ Map map = new HashMap<>(4);
map.put("appid", config.getAppId());
map.put("service_id", config.getServiceId());
map.put("reason", reason);
- String result = payService.postV3(url, GSON.toJson(map));
- return GSON.fromJson(result, WxPayScoreResult.class);
+ String result = payService.postV3(url, WxGsonBuilder.create().toJson(map));
+ return WxPayScoreResult.fromJson(result);
}
@Override
@@ -111,8 +109,8 @@ public class PayScoreServiceImpl implements PayScoreService {
request.setAppid(config.getAppId());
request.setServiceId(config.getServiceId());
request.setOutOrderNo(null);
- String result = payService.postV3(url, GSON.toJson(request));
- return GSON.fromJson(result, WxPayScoreResult.class);
+ String result = payService.postV3(url, request.toJson());
+ return WxPayScoreResult.fromJson(result);
}
@Override
@@ -123,19 +121,19 @@ public class PayScoreServiceImpl implements PayScoreService {
request.setAppid(config.getAppId());
request.setServiceId(config.getServiceId());
request.setOutOrderNo(null);
- String result = payService.postV3(url, GSON.toJson(request));
- return GSON.fromJson(result, WxPayScoreResult.class);
+ String result = payService.postV3(url, request.toJson());
+ return WxPayScoreResult.fromJson(result);
}
@Override
public WxPayScoreResult payServiceOrder(String outOrderNo) throws WxPayException {
WxPayConfig config = this.payService.getConfig();
String url = String.format("%s/v3/payscore/serviceorder/%s/pay", this.payService.getPayBaseUrl(), outOrderNo);
- HashMap map = new HashMap<>(2);
+ Map map = new HashMap<>(2);
map.put("appid", config.getAppId());
map.put("service_id", config.getServiceId());
- String result = payService.postV3(url, GSON.toJson(map));
- return GSON.fromJson(result, WxPayScoreResult.class);
+ String result = payService.postV3(url, WxGsonBuilder.create().toJson(map));
+ return WxPayScoreResult.fromJson(result);
}
@Override
@@ -146,13 +144,13 @@ public class PayScoreServiceImpl implements PayScoreService {
request.setAppid(config.getAppId());
request.setServiceId(config.getServiceId());
request.setOutOrderNo(null);
- String result = payService.postV3(url, GSON.toJson(request));
- return GSON.fromJson(result, WxPayScoreResult.class);
+ String result = payService.postV3(url, request.toJson());
+ return WxPayScoreResult.fromJson(result);
}
@Override
public PayScoreNotifyData parseNotifyData(String data) {
- return GSON.fromJson(data, PayScoreNotifyData.class);
+ return WxGsonBuilder.create().fromJson(data, PayScoreNotifyData.class);
}
@Override
@@ -163,8 +161,7 @@ public class PayScoreServiceImpl implements PayScoreService {
String nonce = resource.getNonce();
String apiV3Key = this.payService.getConfig().getApiV3Key();
try {
- String s = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key);
- return GSON.fromJson(s, WxPayScoreResult.class);
+ return WxPayScoreResult.fromJson(AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key));
} catch (GeneralSecurityException | IOException e) {
throw new WxPayException("解析报文异常!", e);
}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
index 59ad93cb7..db656f4c9 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/AutoUpdateCertificatesVerifier.java
@@ -25,6 +25,7 @@ import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
@@ -148,30 +149,32 @@ public class AutoUpdateCertificatesVerifier implements Verifier {
* 反序列化证书并解密
*/
private List deserializeToCerts(byte[] apiV3Key, String body) throws GeneralSecurityException, IOException {
- AesUtils decryptor = new AesUtils(apiV3Key);
+ AesUtils aesUtils = new AesUtils(apiV3Key);
ObjectMapper mapper = new ObjectMapper();
JsonNode dataNode = mapper.readTree(body).get("data");
- List newCertList = new ArrayList<>();
- if (dataNode != null) {
- for (int i = 0, count = dataNode.size(); i < count; i++) {
- JsonNode encryptCertificateNode = dataNode.get(i).get("encrypt_certificate");
- //解密
- String cert = decryptor.decryptToString(
- encryptCertificateNode.get("associated_data").toString().replaceAll("\"", "")
- .getBytes(StandardCharsets.UTF_8),
- encryptCertificateNode.get("nonce").toString().replaceAll("\"", "")
- .getBytes(StandardCharsets.UTF_8),
- encryptCertificateNode.get("ciphertext").toString().replaceAll("\"", ""));
+ if (dataNode == null) {
+ return Collections.emptyList();
+ }
- X509Certificate x509Cert = PemUtils
- .loadCertificate(new ByteArrayInputStream(cert.getBytes(StandardCharsets.UTF_8)));
- try {
- x509Cert.checkValidity();
- } catch (CertificateExpiredException | CertificateNotYetValidException e) {
- continue;
- }
- newCertList.add(x509Cert);
+ List newCertList = new ArrayList<>();
+ for (int i = 0, count = dataNode.size(); i < count; i++) {
+ JsonNode encryptCertificateNode = dataNode.get(i).get("encrypt_certificate");
+ //解密
+ String cert = aesUtils.decryptToString(
+ encryptCertificateNode.get("associated_data").toString().replaceAll("\"", "")
+ .getBytes(StandardCharsets.UTF_8),
+ encryptCertificateNode.get("nonce").toString().replaceAll("\"", "")
+ .getBytes(StandardCharsets.UTF_8),
+ encryptCertificateNode.get("ciphertext").toString().replaceAll("\"", ""));
+
+ X509Certificate x509Cert = PemUtils
+ .loadCertificate(new ByteArrayInputStream(cert.getBytes(StandardCharsets.UTF_8)));
+ try {
+ x509Cert.checkValidity();
+ } catch (CertificateExpiredException | CertificateNotYetValidException e) {
+ continue;
}
+ newCertList.add(x509Cert);
}
return newCertList;
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequestTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequestTest.java
new file mode 100644
index 000000000..6976bba38
--- /dev/null
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/payscore/WxPayScoreRequestTest.java
@@ -0,0 +1,54 @@
+package com.github.binarywang.wxpay.bean.payscore;
+
+import org.testng.annotations.Test;
+
+/**
+ * @author Binary Wang
+ * @date 2020-07-11
+ */
+public class WxPayScoreRequestTest {
+ @Test
+ public void testToJson() {
+ WxPayScoreRequest request = WxPayScoreRequest.builder()
+ .outOrderNo("QLS202005201058000201")
+ .appid("123")
+ .serviceId("345")
+ .serviceIntroduction("租借服务")
+ .timeRange(new TimeRange("OnAccept", "20200520225840"))
+ .build();
+ System.out.println(request.toJson());
+ /* {
+ "out_order_no":"QLS202005201058000201",
+ "appid":"123",
+ "service_id":"345",
+ "service_introduction":"租借服务",
+ "time_range":{
+ "start_time":"OnAccept",
+ "end_time":"20200520225840"
+ },
+ "location":{
+ "start_location":"山",
+ "end_location":"山"
+ },
+ "risk_fund":{
+ "name":"DEPOSIT",
+ "amount":200,
+ "description":"丢失偿还费用2元/台"
+ },
+ "attach":"",
+ "notify_url":"/pay/notify/payScore",
+ "openid":"",
+ "need_user_confirm":true,
+ "profit_sharing":false,
+ "post_payments":[
+ {
+ "name":"租借服务",
+ "amount":100,
+ "description":"服务费:1元/台",
+ "count":1
+ }
+ ],
+ "total_amount":0
+ }*/
+ }
+}
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImplTest.java
index 0aa6cafb2..425cf99c6 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImplTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/PayScoreServiceImplTest.java
@@ -64,7 +64,7 @@ public class PayScoreServiceImplTest {
}
@Test
- public void testQueryServiceOrder() throws URISyntaxException, WxPayException {
+ public void testQueryServiceOrder() throws WxPayException {
//两个参数选填一个
this.payService.getPayScoreService().queryServiceOrder("11", "");
}